Menu
CoddyTech

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:

Her model için beş kat puanı noktalarla gösterilmiştir; her ortalamada siyah bir çizgi bulunur. k-NN noktaları 0.867 civarında birbirine yakındır; lojistik model 0.873 civarında 0.73 ile 0.93 arasında dağılmıştır; ağaç modeli 0.807 ile geride kalır

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.077

En yüksek ortalamayı seçin; ortalamalar birbirine yakınsa, standart sapması daha küçük olanı seçin.

challenge icon

Görev

Orta

Bir 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.

  1. Bu sayıda bölme, shuffle=True ve random_state=0 ile bir KFold oluştur.
  2. Her modeli bu bölmelerde çapraz doğrula; ortalamasını ve standart sapmasını 3 ondalık basamakla yazdır.
  3. 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: logistic

Kendin 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
quiz iconKendini test et

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

Kendi başına pratik yap: Online Python derleyicisi