13 KiB
Scikit-learn ile Bir Regresyon Modeli Oluşturma: Veriyi Hazırlama ve Görselleştirme
İnfografik: Dasani Madipalli
Ders Öncesi Test
Bu ders R dilinde de mevcut!
Giriş
Scikit-learn ile makine öğrenimi modeli oluşturmak için gerekli araçları kurduğunuza göre, artık verilerinizle ilgili sorular sormaya hazırsınız. Verilerle çalışırken ve makine öğrenimi çözümleri uygularken, doğru soruları sormanın, veri setinizin potansiyelini doğru bir şekilde ortaya çıkarmak için çok önemli olduğunu anlamak önemlidir.
Bu derste şunları öğreneceksiniz:
- Verilerinizi model oluşturma için nasıl hazırlayacağınızı.
- Matplotlib kullanarak veri görselleştirmeyi.
Verilerinizle Doğru Soruyu Sormak
Cevaplanmasını istediğiniz soru, hangi tür makine öğrenimi algoritmalarını kullanacağınızı belirleyecektir. Aldığınız cevabın kalitesi ise büyük ölçüde verilerinizin doğasına bağlı olacaktır.
Bu ders için sağlanan verilere bir göz atın. Bu .csv dosyasını VS Code'da açabilirsiniz. Hızlı bir inceleme, boşluklar, metin ve sayısal verilerin bir karışımı olduğunu hemen gösteriyor. Ayrıca, 'Package' adında, verilerin 'sacks', 'bins' ve diğer değerlerin bir karışımı olduğu garip bir sütun var. Aslında, bu veri biraz dağınık.
🎥 Yukarıdaki görsele tıklayarak bu ders için veriyi hazırlama sürecini içeren kısa bir videoyu izleyebilirsiniz.
Aslında, kutudan çıktığı gibi bir makine öğrenimi modeli oluşturmak için tamamen hazır bir veri seti elde etmek pek yaygın değildir. Bu derste, standart Python kütüphanelerini kullanarak ham bir veri setini nasıl hazırlayacağınızı öğreneceksiniz. Ayrıca, veriyi görselleştirmek için çeşitli teknikler öğreneceksiniz.
Vaka Çalışması: 'Balkabağı Pazarı'
Bu klasörde, kök data
klasöründe US-pumpkins.csv adlı bir .csv dosyası bulacaksınız. Bu dosya, şehir bazında gruplandırılmış, balkabağı pazarına dair 1757 satır veri içeriyor. Bu, Amerika Birleşik Devletleri Tarım Bakanlığı tarafından dağıtılan Specialty Crops Terminal Markets Standard Reports raporlarından çıkarılmış ham bir veridir.
Veriyi Hazırlama
Bu veri kamuya açık bir alandadır. USDA web sitesinden şehir başına birçok ayrı dosya olarak indirilebilir. Çok fazla ayrı dosyadan kaçınmak için, tüm şehir verilerini tek bir elektronik tabloya birleştirdik, bu nedenle veriyi biraz hazırlamış olduk. Şimdi, veriye daha yakından bakalım.
Balkabağı Verisi - İlk Sonuçlar
Bu veri hakkında ne fark ettiniz? Zaten metin, sayılar, boşluklar ve anlamlandırmanız gereken garip değerlerin bir karışımı olduğunu gördünüz.
Bu veriye bir Regresyon tekniği kullanarak hangi soruyu sorabilirsiniz? Örneğin, "Belirli bir ayda satışa sunulan bir balkabağının fiyatını tahmin et." Veriye tekrar bakıldığında, bu göreve uygun bir veri yapısı oluşturmak için bazı değişiklikler yapmanız gerektiği görülüyor.
Egzersiz - Balkabağı Verisini Analiz Etme
Balkabağı verisini analiz etmek ve hazırlamak için, verileri şekillendirmede çok kullanışlı bir araç olan Pandas kütüphanesini kullanacağız.
İlk Olarak, Eksik Tarihleri Kontrol Edin
Öncelikle eksik tarihleri kontrol etmek için şu adımları izleyin:
- Tarihleri ay formatına dönüştürün (bu tarihler ABD formatında, yani
AA/GG/YYYY
). - Ayı yeni bir sütuna çıkarın.
VS Code içinde notebook.ipynb dosyasını açın ve elektronik tabloyu yeni bir Pandas dataframe'ine aktarın.
-
İlk beş satırı görüntülemek 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örüntülemek için hangi fonksiyonu kullanırdınız?
-
Mevcut dataframe'de eksik veri olup olmadığını kontrol edin:
pumpkins.isnull().sum()
Eksik veri var, ancak bu belki de ele alınan görev için önemli olmayabilir.
-
Dataframe'inizi daha kolay çalışılabilir hale getirmek için, yalnızca ihtiyacınız olan sütunları seçin. Bunun için
loc
fonksiyonunu kullanabilirsiniz. Bu fonksiyon, orijinal dataframe'den bir grup satır (ilk parametre) ve sütun (ikinci parametre) çıkarır. Aşağıdaki durumda:
ifadesi "tüm satırlar" anlamına gelir.columns_to_select = ['Package', 'Low Price', 'High Price', 'Date'] pumpkins = pumpkins.loc[:, columns_to_select]
İkinci Olarak, Balkabağının Ortalama Fiyatını Belirleyin
Belirli bir ayda bir balkabağının ortalama fiyatını belirlemek için hangi sütunları seçerdiniz? İpucu: 3 sütuna ihtiyacınız olacak.
Çözüm: Low Price
ve High Price
sütunlarının ortalamasını alarak yeni bir Price
sütununu doldurun ve Date
sütununu yalnızca ayı gösterecek şekilde dönüştürün. Neyse ki, yukarıdaki kontrol sonucuna göre, tarihler veya fiyatlar için eksik veri yok.
-
Ortalamayı hesaplamak için şu kodu ekleyin:
price = (pumpkins['Low Price'] + pumpkins['High Price']) / 2 month = pd.DatetimeIndex(pumpkins['Date']).month
✅ Kontrol etmek istediğiniz herhangi bir veriyi
print(month)
kullanarak yazdırabilirsiniz. -
Şimdi, dönüştürdüğünüz veriyi 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ırdığınızda, yeni regresyon modelinizi oluşturabileceğiniz temiz ve düzenli bir veri seti göreceksiniz.
Ama Durun! Burada Garip Bir Şey Var
Package
sütununa bakarsanız, balkabaklarının birçok farklı şekilde satıldığını görebilirsiniz. Bazıları '1 1/9 bushel' ölçülerinde, bazıları '1/2 bushel' ölçülerinde, bazıları balkabağı başına, bazıları pound başına ve bazıları da genişlikleri değişen büyük kutularda satılıyor.
Balkabaklarını tutarlı bir şekilde tartmak oldukça zor görünüyor.
Orijinal veriye bakıldığında, Unit of Sale
değeri 'EACH' veya 'PER BIN' olan her şeyin Package
türü de inç başına, kutu başına veya 'her biri' olarak görünüyor. Balkabaklarını tutarlı bir şekilde tartmak oldukça zor görünüyor, bu yüzden Package
sütununda 'bushel' kelimesini içeren balkabaklarını seçerek filtreleme yapalım.
-
Dosyanın başında, ilk .csv içe aktarma işleminin altına bir filtre ekleyin:
pumpkins = pumpkins[pumpkins['Package'].str.contains('bushel', case=True, regex=True)]
Şimdi veriyi yazdırırsanız, yalnızca 'bushel' içeren yaklaşık 415 satır veriyi aldığınızı görebilirsiniz.
Ama Durun! Yapılacak Bir Şey Daha Var
Bushel miktarının satır başına değiştiğini fark ettiniz mi? Fiyatlandırmayı normalize etmeniz ve bushel başına fiyatı göstermeniz gerekiyor, bu yüzden standartlaştırmak için biraz matematik yapın.
-
Yeni dataframe'inizi oluşturduğunuz bloğun altına şu satırları 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 bushel'in 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 pound'dur." Bu oldukça karmaşık! Bushel'den pound'a dönüşüm yapmaya zahmet etmeyelim ve bunun yerine bushel başına fiyatlandırma yapalım. Ancak, tüm bu bushel çalışması, verilerinizin doğasını anlamanın ne kadar önemli olduğunu gösteriyor!
Şimdi, bushel ölçümüne dayalı birim başına fiyatlandırmayı analiz edebilirsiniz. Veriyi bir kez daha yazdırırsanız, nasıl standartlaştırıldığını görebilirsiniz.
✅ Yarım bushel ile satılan balkabaklarının çok pahalı olduğunu fark ettiniz mi? Bunun nedenini anlayabilir misiniz? İpucu: Küçük balkabakları büyük olanlardan çok daha pahalıdır, muhtemelen bir bushel başına çok daha fazla küçük balkabağı sığdığı için.
Görselleştirme Stratejileri
Bir veri bilimcisinin rolü, üzerinde çalıştığı verilerin kalitesini ve doğasını göstermektir. Bunu yapmak için genellikle ilginç görselleştirmeler, yani grafikler, çizimler ve tablolar oluştururlar. Bu şekilde, görsel olarak ilişkileri ve aksi takdirde ortaya çıkması zor olan boşlukları gösterebilirler.
🎥 Yukarıdaki görsele tıklayarak bu ders için veriyi görselleştirme sürecini içeren kısa bir videoyu izleyebilirsiniz.
Görselleştirmeler ayrıca, veri için en uygun makine öğrenimi tekniğini belirlemeye yardımcı olabilir. Örneğin, bir çizgiyi takip ediyor gibi görünen bir dağılım grafiği, verinin doğrusal regresyon çalışması için iyi bir aday olduğunu gösterebilir.
Jupyter defterlerinde iyi çalışan bir veri görselleştirme kütüphanesi Matplotlib (önceki derste de gördüğünüz) kütüphanesidir.
Veri görselleştirme konusunda daha fazla deneyim kazanmak için bu eğitimlere göz atın.
Egzersiz - Matplotlib ile Deney Yapın
Yeni oluşturduğunuz dataframe'i görüntülemek için bazı temel grafikler oluşturmaya çalışın. Basit bir çizgi grafiği ne gösterir?
-
Dosyanın başında, Pandas içe aktarma işleminin altına Matplotlib'i ekleyin:
import matplotlib.pyplot as plt
-
Tüm defteri yeniden çalıştırarak yenileyin.
-
Defterin altına, veriyi bir kutu grafiği olarak çizmek için bir hücre ekleyin:
price = new_pumpkins.Price month = new_pumpkins.Month plt.scatter(price, month) plt.show()
Bu faydalı bir grafik mi? Sizi şaşırtan bir şey var mı?
Bu grafik pek faydalı değil, çünkü yalnızca verilerinizi belirli bir ayda bir dizi nokta olarak gösteriyor.
Daha Faydalı Hale Getirin
Grafiklerin faydalı veriler göstermesi için genellikle verileri bir şekilde gruplamanız gerekir. Y ekseninin ayları gösterdiği ve verilerin dağılımını gösterdiği 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ştirme! Balkabaklarının en yüksek fiyatının Eylül ve Ekim aylarında olduğunu gösteriyor gibi görünüyor. Bu beklentinizi karşılıyor mu? Neden veya neden değil?
🚀Meydan Okuma
Matplotlib'in sunduğu farklı görselleştirme türlerini keşfedin. Hangi türler regresyon problemleri için daha uygundur?
Ders Sonrası Test
Gözden Geçirme ve Kendi Kendine Çalışma
Verileri görselleştirmenin birçok yoluna göz atın. Mevcut çeşitli kütüphanelerin bir listesini yapın ve hangilerinin belirli görev türleri için en iyi olduğunu not edin, örneğin 2D görselleştirmeler ve 3D görselleştirmeler. Ne keşfediyorsunuz?
Ödev
Feragatname:
Bu belge, AI çeviri hizmeti Co-op Translator kullanılarak çevrilmiştir. Doğruluğu sağlamak için çaba göstersek de, otomatik çevirilerin hata veya yanlışlık içerebileceğini lütfen unutmayın. Belgenin orijinal dili, yetkili kaynak olarak kabul edilmelidir. Kritik bilgiler için profesyonel insan çevirisi önerilir. Bu çevirinin kullanımından kaynaklanan yanlış anlamalar veya yanlış yorumlamalar için sorumluluk kabul edilmez.