19 KiB
Scikit-learn kullanarak bir regresyon modeli oluşturun: verileri hazırlayın ve görselleştirin
Infografik Dasani Madipalli tarafından
Ders öncesi quiz
Bu ders R dilinde mevcut!
Giriş
Artık Scikit-learn ile makine öğrenimi modeli oluşturmaya başlamak için ihtiyaç duyduğunuz araçlara sahipsiniz, verilerinize soru sormaya başlayabilirsiniz. Verilerle çalışırken ve ML çözümleri uygularken, veri setinizin potansiyellerini doğru şekilde açığa çıkarmak için doğru soruyu sormanın çok önemli olduğunu anlamak gereklidir.
Bu derste şunları öğreneceksiniz:
- Model oluşturmak için verilerinizi nasıl hazırlayacağınızı.
- Verileri görselleştirmek için Matplotlib'i nasıl kullanacağınızı.
- Daha etkili veri görselleştirmesi için Seaborn'u nasıl kullanacağınızı.
Verilerinize doğru soruyu sormak
Cevaplamanız gereken soru, nasıl bir ML algoritması kullanacağınızı belirleyecektir. Ve aldığınız cevabın kalitesi, verilerinizin doğasına büyük ölçüde bağlıdır.
Bu derste verilen veriye bir göz atın. Bu .csv dosyasını VS Code'da açabilirsiniz. Hızlıca bakıldığında boşluklar ve hem metin hem sayı içeren karışık veri olduğu görülür. Ayrıca 'Package' adında tuhaf bir sütun var; veriler burada 'sacks', 'bins' ve diğer değerlerin karışımı. Aslında veri biraz karışık.
🎥 Bu ders için verilerin hazırlanmasını gösteren kısa video için yukarıdaki resme tıklayın.
Aslında, kutudan çıkar çıkmaz kullanıma tamamen hazır bir veri seti almak çok yaygın değildir. Bu derste, standart Python kütüphaneleri kullanarak ham bir veri setini nasıl hazırlayacağınızı öğreneceksiniz. Ayrıca verileri görselleştirmek için çeşitli teknikleri öğreneceksiniz.
Vaka çalışması: 'kabak pazarı'
Bu klasörde, kök data klasörü içinde US-pumpkins.csv adlı, şehir bazında gruplandırılmış kabak pazarı hakkında 1757 satırlık veri içeren bir .csv dosyası bulacaksınız. Bu, Amerika Birleşik Devletleri Tarım Bakanlığı tarafından dağıtılan Özel Ürünler Terminal Pazarları Standart Raporlarından çıkarılan ham veridir.
Verileri hazırlama
Bu veri kamu malıdır. USDA web sitesinden şehir başına çok sayıda ayrı dosya olarak indirilebilir. Çok fazla dosya olmasını önlemek için tüm şehir verilerini tek bir tabloya birleştirdik, böylece veriyi zaten biraz hazırlamış olduk. Şimdi veriye daha yakından bakalım.
Kabak verisi - ilk çıkarımlar
Bu veride ne fark ettiniz? Zaten içinde metinler, sayılar, boşluklar ve anlamlandırmanız gereken tuhaf değerler olduğunu gördünüz.
Bu veriye bir Regresyon tekniği kullanarak hangi soruyu sorabilirsiniz? Mesela "Belirli bir ayda satılan kabak fiyatını tahmin et". Veriye tekrar baktığınızda, görevi gerçekleştirmek için veri yapısında yapmanız gereken bazı değişiklikler var.
Alıştırma - kabak verisini analiz et
Bu kabak verisini analiz etmek ve hazırlamak için verileri şekillendirmede çok faydalı olan Pandas (adı Python Veri Analizi anlamına gelir) aracını kullanalım.
İlk olarak, eksik tarihler için kontrol yapın
Öncelikle eksik tarih olup olmadığını kontrol etmek için adımlar atmanız gerekiyor:
- Tarihleri ay formatına dönüştürün (bunlar ABD tarihleri, format
MM/DD/YYYY). - Ay bilgisini yeni bir sütuna çıkarın.
Visual Studio Code'da notebook.ipynb dosyasını açın ve tabloyu yeni bir Pandas dataframe'ine aktarın.
-
İlk beş satırı görmek için
head()fonksiyonunu kullanın.import pandas as pd pumpkins = pd.read_csv('../data/US-pumpkins.csv') pumpkins.head()✅ Son beş satırı görmek için hangi fonksiyonu kullanırsınız?
-
Mevcut dataframe'de eksik veri olup olmadığını kontrol edin:
pumpkins.isnull().sum()Eksik veri var, ancak belki mevcut görev için önemli olmayabilir.
-
Dataframe ile çalışmayı kolaylaştırmak için, yalnızca ihtiyacınız olan sütunları
locfonksiyonunu kullanarak seçin; bu fonksiyon orijinal dataframe'den satır grubunu (birinci parametre) ve sütun grubunu (ikinci parametre) ayıklar. Aşağıdaki durumda:ifadesi "tüm satırlar" anlamındadır.columns_to_select = ['Package', 'Low Price', 'High Price', 'Date'] pumpkins = pumpkins.loc[:, columns_to_select]
İkinci olarak, kabak fiyatının ortalamasını belirleyin
Belirli bir ayda bir kabağın ortalama fiyatını nasıl belirleyeceğinizi düşünün. Bu görev için hangi sütunları seçersiniz? İpucu: 3 sütuna ihtiyacınız olacak.
Çözüm: Yeni Fiyat sütununu doldurmak için Low Price ve High Price sütunlarının ortalamasını alın ve Tarih sütununu sadece ay gösterecek şekilde dönüştürün. Neyse ki yukarıdaki kontrole göre, tarihler veya fiyatlar için eksik veri yok.
-
Ortalamayı hesaplamak için aşağıdaki kodu ekleyin:
price = (pumpkins['Low Price'] + pumpkins['High Price']) / 2 month = pd.DatetimeIndex(pumpkins['Date']).month✅ Kontrol etmek istediğiniz verileri
print(month)ile yazdırmakta özgürsünüz. -
Şimdi, dönüştürdüğünüz verileri yeni bir Pandas dataframe'ine kopyalayın:
new_pumpkins = pd.DataFrame({'Month': month, 'Package': pumpkins['Package'], 'Low Price': pumpkins['Low Price'],'High Price': pumpkins['High Price'], 'Price': price})Dataframe'inizi yazdırmak, üzerine yeni regresyon modelinizi kurabileceğiniz temiz bir veri seti gösterecektir.
Ama durun! Burada tuhaf bir şey var
Package sütununa bakarsanız, kabaklar birçok farklı şekilde satılıyor. Bazıları '1 1/9 bushel' ölçüsünde, bazıları '1/2 bushel' ölçüsünde, bazıları tane başına, bazıları pound başına ve bazıları değişen genişlikte büyük kutularda satılıyor.
Kabakların tartılması tutarlı şekilde çok zor görünüyor
Orijinal veriye daha yakından baktığınızda, Unit of Sale 'EACH' veya 'PER BIN' olan kayıtların Package türü de inç başına, porsiyon başına ya da 'her biri' olarak gözüküyor. Kabaklar tutarlı tartılması zor görünüyor, o yüzden sadece Package sütununda 'bushel' geçen kabakları seçerek filtreleyelim.
-
Dosyanın en üstüne, ilk .csv aktarımının altına bir filtre ekleyin:
pumpkins = pumpkins[pumpkins['Package'].str.contains('bushel', case=True, regex=True)]Verileri şimdi yazdırırsanız sadece bushel bazında kabak içeren yaklaşık 415 satırı aldığınızı göreceksiniz.
Ama durun! Daha yapılacak bir şey var
Bushel miktarının satır satır değiştiğini fark ettiniz mi? Fiyatlandırmayı normalize etmeniz gerekiyor, böylece fiyatları bushel başına gösterebilirsiniz, bunu standart hale getirmek için biraz matematik yapın.
-
Aşağıdaki satırları new_pumpkins dataframe'i oluşturma bloğunun sonrasına ekleyin:
new_pumpkins.loc[new_pumpkins['Package'].str.contains('1 1/9'), 'Price'] = price/(1 + 1/9) new_pumpkins.loc[new_pumpkins['Package'].str.contains('1/2'), 'Price'] = price/(1/2)
✅ The Spruce Eats sitesine göre, bir bushelin ağırlığı ürün türüne bağlıdır çünkü bu bir hacim ölçüsüdür. "Örneğin bir bushel domatesin ağırlığı 56 pound olmalıdır... Yapraklar ve yeşillikler daha az ağırlıkla daha fazla yer kaplar, bu yüzden bir bushel ıspanak sadece 20 pounddur." Bu iş oldukça karmaşık! Bushel'den pound'a dönüşüm yapmaya çalışma, bunun yerine bushel bazında fiyatlandır. Yine de bu kabak bushel çalışması, verinizin doğasını anlamanın ne kadar önemli olduğunu gösterir!
Artık bushel ölçümüne göre birim fiyatlandırmayı analiz edebilirsiniz. Veriyi yeniden yazdırdığınızda nasıl standart hale geldiğini görebilirsiniz.
✅ Yarım bushel ile satılan kabakların çok pahalı olduğunu fark ettiniz mi? Nedenini çözebilir misiniz? İpucu: Küçük kabaklar büyük olanlardan çok daha pahalı, muhtemelen bushel başına çok daha fazla olmalarından dolayı, çünkü büyük boşluklu bir kabak bushel'ü kullanışsız hale getiriyor.
Görselleştirme Stratejileri
Veri bilimcisinin görevlerinden biri, üzerinde çalıştığı verilerin kalitesini ve doğasını göstermektir. Bunu yapmak için genellikle verinin farklı yönlerini gösteren ilginç görselleştirmeler, grafikler ve çizelgeler oluştururlar. Bu yolla, görsel olarak başka türlü keşfedilmesi zor olan ilişkileri ve boşlukları gösterebilirler.
🎥 Bu ders için veriyi görselleştirmeyi anlatan kısa video için yukarıdaki resme tıklayın.
Görselleştirmeler ayrıca veriye en uygun makine öğrenimi tekniğini belirlemeye yardımcı olabilir. Örneğin bir dağılım grafiğinin bir çizgiyi takip ediyormuş gibi görünmesi, verinin doğrusal regresyon için iyi bir aday olduğunu gösterir.
Jupyter notebok'larında iyi çalışan veri görselleştirme kütüphanelerinden biri Matplotlib'dir (önceki derslerde de gördünüz).
Veri görselleştirme konusunda daha fazla deneyim kazanmak için bu öğreticilere bakın.
Alıştırma - Matplotlib ile denemeler yapın
Az önce oluşturduğunuz yeni dataframe'i göstermek için bazı temel grafikler oluşturmaya çalışın. Basit bir çizgi grafiği ne gösterirdi?
-
Dosyanın başında, Pandas importundan sonra Matplotlib'i içe aktarın:
import matplotlib.pyplot as plt -
Tüm not defterini tekrar çalıştırarak yenileyin.
-
Not defterinin en altına, veriyi bir kutu grafiği olarak çizdirmek için bir hücre ekleyin:
price = new_pumpkins.Price month = new_pumpkins.Month plt.scatter(price, month) plt.show()Bu kullanışlı bir grafik mi? Size şaşırtıcı gelen herhangi bir şey var mı?
Bu çok kullanışlı değil çünkü sadece verilerinizin belirli ayda yayılmış noktalar olarak gösterilmesini sağlıyor.
Daha kullanışlı hale getirin
Grafiklerde faydalı veri göstermek için genellikle verileri bir şekilde gruplamanız gerekir. Y ekseninde ayların gösterildiği ve verilerin dağılımını ortaya koyan bir grafik oluşturalım.
-
Gruplandırılmış bir çubuk grafik oluşturmak için bir hücre ekleyin:
new_pumpkins.groupby(['Month'])['Price'].mean().plot(kind='bar') plt.ylabel("Pumpkin Price")Bu daha faydalı bir veri görselleştirmesi! Kabak fiyatlarının en yüksek olduğu ayların Eylül ve Ekim gibi görünüyor. Bu beklediğinizle uyuşuyor mu? Neden ya da neden değil?
Alıştırma - Seaborn ile denemeler yapın
Matplotlib güçlüdür, ancak şık grafikler oluşturmak için çok kod gerekebilir. Seaborn, Matplotlib üzerine inşa edilmiş istatistiksel veri görselleştirme için tasarlanmış bir kütüphanedir. Pandas dataframe'leriyle doğrudan çalışır, çekici varsayılan stiller uygular ve çok daha az kodla bilgilendirici grafikler oluşturmanızı sağlar. Seaborn Matplotlib nesneleri döndürdüğü için Matplotlib ile bildiğiniz her şeyi sonuçları ince ayar yapmak için hala kullanabilirsiniz.
Eğer henüz Seaborn yüklü değilse,
pip install seabornkomutuyla yükleyin.
-
Not defterinin başında, diğer importların altına Seaborn'u import edin. Geleneksel olarak
snsolarak import edilir:import seaborn as sns
İlişkileri göstermek için dağılım grafikleri
Model oluşturmadan önce veriyi keşfetmenin önemli bir parçası değişkenler arasındaki ilişkileri aramaktır. Dağılım grafiği bunun en iyi araçlarından biridir: eğer noktalar bir çizgiyi takip ediyorsa, iki değişken korele olabilir ve bu, doğrusal regresyon modeli çalıştırmaya uygun bir işarettir.
-
Önceden oluşturduğunuz ay-fiyat dağılım grafiğini bu kez Seaborn'un dataframe sütunlarıyla direkt çalışan
relplot()(ilişkisel grafik) fonksiyonunu kullanarak yeniden oluşturun:sns.relplot(x="Price", y="Month", data=new_pumpkins)Sütun adlarını ve dataframe'i nasıl verdiğinize dikkat edin, Seaborn eksen etiketlerini sizin için otomatik ayarlıyor.
-
kind="line"parametresi vererek çizgi grafik geçişi yapabilirsiniz. Seaborn ayrıca çizginin etrafında güven aralığını gösteren gölgeli bir bant çizer:sns.relplot(x="Price", y="Month", kind="line", data=new_pumpkins)Bu veri biraz gürültülü olduğu için çizgi grafik en net tercih değil — ancak Seaborn'da grafik türlerini ne kadar kolay değiştirebileceğinizi gösteriyor.
Dağılımları göstermek için çubuk grafikler
Önceden Matplotlib ile bir çubuk grafik oluşturmak için verileri elle gruplayıp toplamıştınız. Seaborn'un catplot() (kategorik grafik) fonksiyonu gruplama ve toplama işlemlerini sizin için yapabilir. Varsayılan olarak kind="bar" her kategorinin ortalamasını gösterirken, güven aralığını belirten siyah bir çizgi de yer alır.
-
Aylık ortalama fiyatın çubuk grafiğini oluşturun:
sns.catplot(x="Month", y="Price", data=new_pumpkins, kind="bar")Bu, Matplotlib ile gördüğünüzü doğrular — fiyatlar Eylül ve Ekim civarında zirve yapar — ancak Seaborn ayrıca her ay içindeki fiyat değişkenliğini görselleştirir.
Korelasyonları göstermek için Isı Haritaları
Serpilmiş grafikler aynı anda iki değişkeni karşılaştırır. Birden fazla sayısal sütun olduğunda, bir ısı haritası aynı anda her sütun çiftinin ilişkisini görmenizi sağlar. Bu, modele hangi sütunların besleneceğine karar verirken en çok ilişkilendirilen özellikleri bulmak için yaygın bir yöntemdir (ayrıca benzer bir grafik sınıflandırmada karışıklık matrislerini göstermek için kullanılır).
-
Pandas ile bir korelasyon matrisi oluşturun, sonra Seaborn'un
heatmap()fonksiyonuyla çizin.annot=Trueseçeneği her hücreye korelasyon değerlerini yazdırır:correlations = new_pumpkins[['Month', 'Low Price', 'High Price', 'Price']].corr() sns.heatmap(correlations, annot=True, cmap="coolwarm")1(veya-1) değerine yakın olanlar, sütunların güçlü doğrusal ilişki içinde olduğunu gösterir.Low PriceveHigh Priceneredeyse mükemmel şekilde korelasyonludur. Öte yandan,Month, fiyat ile ancak zayıf bir doğrusal ilişkiye sahiptir — üstteki çubuk grafik Eylül ve Ekim’de belirgin bir mevsimlik zirveyi ortaya koysa da. Bu önemli bir derstir: korelasyon katsayısı yalnızca düz çizgi ilişkilerini ölçer, bu yüzden mevsimsel ya da doğrusal olmayan desenleri kaçırabilir. ✅ Hangi sütunların kullanılacağına karar vermeden önce hem ısı haritasına hem çubuk grafik gibi görsellere bakmak neden faydalıdır?
Matplotlib mi Seaborn mu?
İki kütüphane de bilinmeye değerdir:
- Matplotlib her grafik elemanını ince detaylı kontrol etmenizi sağlar ve neredeyse diğer tüm Python grafik kütüphanelerinin temelidir.
- Seaborn istatistiksel grafikler için daha üst seviye fonksiyonlar ve çekici varsayılanlar sunar, doğrudan dataframe'lerle çalışır ve keşifsel veri analizinde genellikle daha hızlıdır.
Yaygın bir iş akışı, verinizi hızlıca keşfetmek için Seaborn'u kullanmak, sonra detayları özelleştirmek gerektiğinde Matplotlib'e geçmektir.
🚀Zorluk
Matplotlib ve Seaborn’un sunduğu farklı görselleştirme türlerini keşfedin. Regresyon problemleri için hangi türler daha uygundur?
Ders sonrası quiz
Gözden Geçirme & Kendi Kendine Çalışma
Veriyi görselleştirmenin pek çok yoluna bir bakın. Kullanılabilir çeşitli kütüphanelerin bir listesini yapın ve belirli görevler için (örneğin 2D görselleştirmeler vs 3D görselleştirmeler) hangilerinin en uygun olduğunu not edin. Neler keşfediyorsunuz?
Ödev
Feragatname: Bu belge, AI çeviri hizmeti Co-op Translator kullanılarak çevrilmiştir. Doğruluk için çaba sarf etsek de, otomatik çevirilerin hata veya yanlışlık içerebileceğini lütfen unutmayınız. Orijinal belge, kendi dilinde yetkili kaynak olarak kabul edilmelidir. Kritik bilgiler için profesyonel insan çevirisi önerilir. Bu çevirinin kullanımı sonucu ortaya çıkabilecek yanlış anlamalardan veya yanlış yorumlamalardan sorumlu değiliz.








