scikit-learn ile İlk Modelinizi Kurun: Bölme, Eğitim, Değerlendirme
scikit-learn'ün tutarlı arayüzü sayesinde farklı algoritmalar aynı birkaç komutla kurulur. İlk modelin adımlarını, pipeline ile veri sızıntısının nasıl önlendiğini ve çapraz doğrulamayla sonucun nasıl sağlamlaştırıldığını öğrenirsiniz.
Bir bakışta
- Her tahmin edici aynı iki komutla çalışır: fit ve predict. Algoritmayı değiştirmek çoğu zaman tek satırı değiştirmek demektir; veri hazırlığı ve değerlendirme aynı kalır.
- Modeli görmediği veriyle değerlendirin. Veriyi önce eğitim ve test olarak ayırmak, modelin ezberlediğini değil öğrendiğini ölçmenin ilk şartıdır.
- Pipeline, veri sızıntısını önler. Ölçekleme gibi dönüşümler yalnız eğitim verisinden öğrenilirse test bilgisi eğitime karışmaz.
- Tek bir bölme şansa bağlı olabilir. Çapraz doğrulama sonucu birden çok bölmede sınayarak daha güvenilir bir tahmin sunar.
- Doğruluk her zaman yeterli ölçü değildir. Sınıflar dengesizse ya da hata maliyetleri farklıysa başka ölçüler birlikte okunmalıdır.
scikit-learn'ün ortak arayüzü
scikit-learn'ün en büyük kolaylığı, tüm algoritmaların aynı arayüzü paylaşmasıdır. Öğrenen nesnelere tahmin edici denir ve her biri fit yöntemiyle veriden öğrenir. Girdi, satırları örnekler ve sütunları özellikler olan bir tablodur; hedef ise her örneğin sınıfını ya da değerini taşıyan tek boyutlu bir dizidir. Eğitimden sonra predict yöntemi yeni örnekler için tahmin üretir.
Ön işlem yapan nesneler dönüştürücüdür. Bunlar da fit ile veriden gerekli değerleri öğrenir, transform ile veriyi değiştirir. Örneğin StandardScaler, özelliklerin ortalamasını ve yayılımını öğrenir, sonra her sütunu bu değerlere göre ölçekler.
Bu tutarlılığın pratik sonucu şudur: bir sınıflandırıcıyı başka bir sınıflandırıcıyla değiştirmek, veri hazırlığını ve değerlendirmeyi bozmaz. Ekip önce basit bir temel model kurar, sonra karmaşık algoritmaları aynı hat üzerinde dener. Algoritma seçimi ayrı bir karardır; hangi algoritma seçilirse seçilsin kurulum ve değerlendirme düzeni aynı kalır.
İlk model: bölme, eğitim, tahmin, değerlendirme
Örnek, scikit-learn ile gelen küçük bir çiçek veri setinde bir sınıflandırma modeli kurar; ölçekleyici ve sınıflandırıcı bir pipeline içinde birleşir:
from sklearn.preprocessing import StandardScaler from sklearn.linear_model import LogisticRegression from sklearn.pipeline import make_pipeline from sklearn.datasets import load_iris from sklearn.model_selection import train_test_split from sklearn.metrics import accuracy_score
X, y = load_iris(return_X_y=True) X_egitim, X_test, y_egitim, y_test = train_test_split(X, y, random_state=0)
model = make_pipeline(StandardScaler(), LogisticRegression()) model.fit(X_egitim, y_egitim)
tahmin = model.predict(X_test) print(accuracy_score(y_test, tahmin))
Satır satır şunlar olur. load_iris özellikleri ve sınıfları döndürür. train_test_split veriyi eğitim ve test olarak ayırır; random_state, bölmenin her çalıştırmada aynı olmasını sağlar. make_pipeline ölçekleyiciyi ve lojistik regresyonu tek nesne yapar. fit çağrısı, pipeline içindeki bütün adımları eğitim verisiyle sırayla öğretir. predict ise test örneklerini önce ölçekleyip sonra sınıflandırır. Son satır doğruluğu, yani doğru tahmin oranını verir.
Kendi verinizde değişen tek şey veri yüklemedir. Tablo verisini pandas ile okur, özellik sütunlarını X'e, hedef sütunu y'ye ayırırsınız.
Pipeline'da veri adım adım dönüşür, son adım tahmini üretir
Pipeline içinde verinin yolu
- Ham özelliklerEğitim ve test örnekleri tablo olarak girer.
- DönüştürücüStandardScaler ölçeği eğitim verisinden öğrenir ve uygular.
- Tahmin ediciLojistik regresyon dönüşmüş veriden sınıfı öğrenir.
- TahminYeni örnekler için sınıf tahmini üretilir.
Veri sızıntısı ve pipeline
Yeni başlayanların sık düştüğü bir tuzak, ön işlemi tüm veriye uygulayıp sonra bölmektir. Ölçekleyici tüm verinin ortalamasını öğrendiğinde, test örneklerinin bilgisi de bu ortalamaya karışmış olur. Model teknik olarak test verisini hiç görmemiştir, ama ona dolaylı biçimde bakmıştır. Sonuç, gerçekte olacağından iyimser bir başarı ölçüsüdür.
Scikit-learn belgeleri bu sorunu açıkça belirtir: tüm veri üzerinde ön işlem yapıp sonra çapraz doğrulama uygulamak, test bilgisini eğitime sızdırır ve genelleme başarısını olduğundan yüksek gösterir. Pipeline bu sorunu yapısıyla çözer. Çapraz doğrulamada her tur için ön işlem adımları yalnızca o turun eğitim parçasından öğrenilir, test parçası yalnızca dönüştürülür.
Bu nedenle kural basittir: ön işlem içeren her modeli pipeline içinde kurun. Hiperparametre aramasını da tek bir tahmin edici yerine pipeline üzerinde yapın; böylece arama sırasında da sızıntı olmaz.
Ön işlemi bölmeden önce yapmak başarıyı olduğundan iyi gösterir
Veri sızıntısı ve çözümü
Çapraz doğrulama ve parametre arama
Tek bir eğitim ve test bölmesi, şansa bağlı olarak iyi ya da kötü çıkabilir. Çapraz doğrulama, veriyi parçalara böler ve her parçayı sırayla test, kalanını eğitim olarak kullanır. Sonuç, birden çok değerlendirme skorudur; ortalaması ve dağılımı modelin ne kadar kararlı olduğunu gösterir. scikit-learn'de cross_validate işlevi bunu yapar; varsayılan olarak veriyi katlara böler.
from sklearn.model_selection import cross_validate
sonuc = cross_validate(model, X, y) print(sonuc["test_score"])
Bu kodda model, ilk örnekteki pipeline'dır; böylece her turda ölçekleme yeniden öğrenilir. Skorlar birbirine yakınsa model kararlıdır. Aralarında büyük fark varsa model veri parçasına duyarlıdır ve bu, daha fazla veri ya da daha basit bir model gerektiğini düşündürebilir.
Hiperparametreleri, yani eğitimle öğrenilmeyen ayarları denemek için arama sınıfları vardır. RandomizedSearchCV, parametre uzayından örnek alıp her birini çapraz doğrulamayla değerlendirir ve en iyisini seçer. Arama bittiğinde nesne, en iyi parametrelerle eğitilmiş bir tahmin edici gibi davranır. Yalnız ayar sayısı arttıkça aşırı uyum riski de büyür; aramayı test verisinden bağımsız tutmak gerekir.
Sonucu doğru okumak
Doğruluk, doğru tahmin edilen örneklerin oranıdır ve en kolay anlaşılan ölçüdür. Ancak sınıflar dengesizse yanıltıcı olur. Örneğin örneklerin büyük çoğunluğu tek sınıfa aitse, her zaman o sınıfı tahmin eden model yüksek doğruluk alır ama işe yaramaz. Böyle durumlarda hassasiyet, duyarlılık ve bunların birleşimi gibi ölçüler birlikte okunur.
Hata türlerinin maliyeti de ölçü seçimini belirler. Bir sahtekârlık tespitinde kaçırılan sahtekârlık, yanlış alarmdan çok daha pahalıya mal olabilir; model buna göre değerlendirilmelidir. Karışıklık matrisi hangi sınıfların birbirine karıştırıldığını görmek için iyi bir araçtır.
Eğitim ve test skorlarını karşılaştırmak da bilgi verir. Eğitimde çok iyi, testte kötü bir sonuç aşırı uyuma işaret eder; model veriyi öğrenmek yerine ezberlemiştir. İkisi de düşükse model yetersizdir ve daha güçlü bir algoritma ya da daha iyi özellikler gerekir. Önce basit bir temel model kurup sonuçları onunla kıyaslamak, karmaşık modelin gerçekten değer katıp katmadığını gösterir.
Sık hatalar ve kontrol listesi
scikit-learn kullanırken tekrarlayan hatalar şunlardır.
- Ön işlemi bölmeden önce tüm veriye uygulamak.
- Modeli eğitim verisiyle değerlendirmek.
- Test verisini hiperparametre seçerken kullanıp sonra aynı veriyle başarı raporlamak.
- Dengesiz sınıflarda yalnız doğruluğa bakmak.
- Kategorik sütunları sayısal sıra gibi kodlamak.
- random_state vermeyip sonuçları tekrar üretememek.
- Eksik değerleri işlemeyi unutmak; birçok tahmin edici eksik değer içeren girdide hata verir.
- İlk denemede karmaşık bir model kurmak ve temel modelle kıyaslamamak.
Kısa kontrol listesi: veri bölündü mü, ön işlem pipeline içinde mi, değerlendirme test ya da çapraz doğrulamayla mı yapıldı, doğrulukla birlikte başka ölçüye de bakıldı mı, sonuç temel modelle kıyaslandı mı, sonuçlar tekrarlanabilir mi?
Bu beceriyi Mindset programlarında nerede çalışırsınız?
Data Science Uzmanlığı Sertifika Programı, makine öğrenmesi temelleri ile ileri makine öğrenmesi ve model optimizasyonu başlıklarını kapsar. Veri Bilimi Sertifika Programı ise denetimli öğrenim ve model değerlendirmeyi ayrı bir başlık olarak işler. Veri analistleri, yazılımcılar ve yeni başlayan veri bilimciler için modelin kurulumu kadar doğru değerlendirilmesi de bu programların ortak vurgusudur.
İlgili Mindset programı
Data Science Uzmanlığı Sertifika Programı
Sık sorulan sorular
fit ve transform arasındaki fark nedir?
fit, veriden gerekli değerleri öğrenir: ölçekleyicide ortalama ve yayılım, model için katsayılar. transform ise bu değerlerle veriyi değiştirir. Test verisinde yalnızca transform çağrılır; çünkü test verisinden bir şey öğrenilmemelidir. Pipeline bu sırayı kendiliğinden doğru uygular.
Pipeline kullanmak zorunlu mudur?
Zorunlu değil, ama ön işlem varsa güçlü biçimde önerilir. Sızıntıyı önler, kodu sadeleştirir ve eğitilmiş tüm süreci tek nesne olarak kaydetmeyi mümkün kılar. Farklı sütunlara farklı dönüşüm uygulamak için ColumnTransformer ile birlikte kullanılır.
random_state ne işe yarar?
Rastgele işlemlerde, örneğin veri bölmede ya da orman modelinde, aynı sonucu tekrar alabilmenizi sağlar. Sabit bir değer verirseniz her çalıştırmada aynı bölme oluşur; böylece iki modeli adil biçimde kıyaslayabilir, hataları yeniden üretebilirsiniz.
Doğruluk yüksek ama model kötü çalışıyor, neden?
Sınıflar dengesiz olabilir. Örneklerin çoğu tek sınıfa aitse çoğunluğu tahmin eden model yüksek doğruluk alır. Karışıklık matrisine, hassasiyet ve duyarlılığa bakın. Ayrıca veri sızıntısı olup olmadığını kontrol edin; olduğundan iyi görünen bir skorun olası nedenlerinden biri budur.
Eksik değerleri nasıl ele alırım?
Birçok tahmin edici eksik değer içeren girdiyle çalışmaz; eksik değeri doğrudan destekleyen modeller de vardır. Eksikleri doldurmak için ön işlem adımı, örneğin SimpleImputer, pipeline'ın başına eklenir. Doldurma değeri yalnız eğitim verisinden öğrenilmelidir; pipeline içinde olması bunu otomatik sağlar.