Modelleri Adil Bir Şekilde Karşılaştırma
Coddy'nin Machine Learning Journey'sinin Denetimli Öğrenme bölümünün bir parçası. Ders 38 / 58.
Modelleri tek bir bölmede karşılaştırmak yazı tura atmaya benzer: biri şanslı bir test kümesine denk gelebilir. Bunun yerine her modele aynı beş katı verin. 150 banknot için, gerçek ya da sahte:
k-NN ve lojistik regresyon, oynaklık payları içinde berabere; k-NN daha istikrarlı. Karar ağacı geride kalıyor.
Bir KFold bölücü, satırları bir kez karıştırır ve her modele aynı katları verir:
from sklearn.model_selection import KFold
folds = KFold(n_splits=5, shuffle=True, random_state=0)
for model in [knn, logistic, tree]:
scores = cross_val_score(model, X, y, cv=folds)
print(f"{scores.mean():.3f} {scores.std():.3f}")Grafikteki sayıları yazdırır:
0.867 0.042
0.873 0.074
0.807 0.077En yüksek ortalamayı seçin; ortalamalar birbirine yakınsa, standart sapması daha küçük olanı seçin.
Görev
OrtaBir yemek sitesi, ziyaretçilerin açtıkları tarifi yapıp yapmayacağını tahmin eder. Başlangıç kodu, üç modeli tek bir bölmede değerlendirir ve ağaç modeli kazanır. Bunu adil bir şekilde kontrol et; program kat sayısını okur.
- Bu sayıda bölme,
shuffle=Trueverandom_state=0ile birKFoldoluştur. - Her modeli bu bölmelerde çapraz doğrula; ortalamasını ve standart sapmasını 3 ondalık basamakla yazdır.
- Ortalaması en yüksek modeli yazdır.
Diğer ziyaretçiler ve 5 için:
One split picks: k-NN
k-NN: mean 0.833, std 0.045
logistic: mean 0.860, std 0.044
tree: mean 0.787, std 0.029
Cross-validation picks: logisticKendin dene
import numpy as np
from sklearn.datasets import make_classification
from sklearn.model_selection import train_test_split, cross_val_score, KFold
from sklearn.neighbors import KNeighborsClassifier
from sklearn.linear_model import LogisticRegression
from sklearn.tree import DecisionTreeClassifier
n_folds = int(input())
# Aşağıdaki satırları değiştirmeyin: 300 ziyaretçi, 6 gezinme alışkanlığı; 1 etiketi, tarifi pişirdikleri anlamına gelir
X, y = make_classification(n_samples=300, n_features=6, n_informative=4, n_redundant=0,
flip_y=0.06, class_sep=0.8, random_state=0)
names = ["k-NN", "logistic", "tree"]
models = [KNeighborsClassifier(), LogisticRegression(max_iter=1000),
DecisionTreeClassifier(max_depth=4, random_state=0)]
# Tek bir veri bölmesi bir kazanan belirler
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.25, random_state=0)
single = []
for model in models:
model.fit(X_train, y_train)
single.append(model.score(X_test, y_test))
print(f"One split picks: {names[np.argmax(single)]}")
# Kodunuzu aşağıya yazın
Bu ders kısa bir quiz içerir. Soruları yanıtlamak ve ilerlemeni kaydetmek için derse başla.
Denetimli Öğrenme bölümündeki tüm dersler
1İlk Modeliniz
Örneklerden ÖğrenmeEğitim ve Test KümeleriUydurma ve Tahmin EtmeBir Modeli PuanlamaÖzet: Tohum Sınıflandırıcı4Lojistik Regresyon
Evet-Hayır TahminleriKarar EşiğiKanıt Olarak AğırlıklarBirden Fazla SınıfÖzet: Spam Filtresi2En Yakın Komşular
k-NN Nasıl Karar Verirk'yi SeçmekKarar SınırlarıKomşular İçin ÖlçeklemeÖzet: Şarap Komşuları5Sınıflandırıcıları Değerlendirme
Karmaşıklık MatrisiKesinlik ve DuyarlılıkF1 SkoruDengesiz SınıflarROC EğrileriÖzet: Tarama Testi8Çapraz Doğrulama
K-Katlı DoğrulamaModelleri Adil Bir Şekilde KarşılaştırmaIzgara AramasıÖzet: Kaykay Tamiri11Proje: Penguen Türleri
Penguenlerle TanışınVerileri HazırlayınBir Model SeçinEn İyisini AyarlayınModeli Yayına AlınKendi başına pratik yap: Online Python derleyicisi