CodeBlanks Logo Icon CodeBlanks

Model eğitimi

KNN tembel (lazy) bir algoritmadır; eğitim verisini olduğu gibi saklar.

Ölçekle, sonra eğit

Mesafe tabanlı KNN, ölçeklenmemiş veride büyük birimli özelliğe göre karar verir. Önce StandardScaler ile her özellik ortalama 0, standart sapma 1 yapılır:

from sklearn.preprocessing import StandardScaler
sc = StandardScaler().fit(X_train)
m = KNeighborsClassifier(5).fit(sc.transform(X_train), y_train)
print(m.score(sc.transform(X_test), y_test))

Ölçekleyici yalnızca eğitim verisiyle fit edilir ve aynı dönüşüm test verisine uygulanır.

Iris veri seti

scikit-learn küçük örnek veri setleriyle gelir. Iris, 3 çiçek türünün 150 örneğini 4 ölçümle anlatır ve KNN için klasik bir deneme alanıdır:

from sklearn.datasets import load_iris
X, y = load_iris(return_X_y=True)
print(X.shape, set(y))   # (150, 4) {0, 1, 2}

return_X_y=True doğrudan X ve y dizilerini döndürür.

Uygulama Iris üzerinde KNN

Iris'i yükle, test_size=0.3, random_state=1, stratify=y ile böl. StandardScaler'ı eğitim verisinde fit et, KNeighborsClassifier(n_neighbors=5) eğit ve test doğruluğunu round(..., 3) ile yazdır.

Başlangıç kodu

model.py
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
from sklearn.neighbors import KNeighborsClassifier

X, y = load_iris(return_X_y=True)

# buraya yaz

Örnek çözüm

model.py
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
from sklearn.neighbors import KNeighborsClassifier

X, y = load_iris(return_X_y=True)

X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=1, stratify=y)
sc = StandardScaler().fit(X_train)
m = KNeighborsClassifier(n_neighbors=5).fit(sc.transform(X_train), y_train)
print(round(m.score(sc.transform(X_test), y_test), 3))

Beklenen çıktı

0.933

Soru ve cevaplar

Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.

1 Yaş (20-60) ve maaş (10 000-90 000) özellikleriyle ölçeksiz KNN neye bakar?

  • Hiçbirine
  • Neredeyse yalnızca maaşa Doğru cevap
  • Yalnızca yaşa
  • İkisine eşit

Açıklama: Maaş farkları binlerce birimdir; yaş farkları mesafeye neredeyse hiç katkı vermez.

2 Test verisine eğitimde öğrenilen ölçeklemeyi uygula.

Soru
X_test_s = sc.____(X_test)
Cevap
X_test_s = sc.transform(X_test)

Açıklama: Test verisinde yeniden fit yapılmaz.

3 Adımları eşleştir.

Kavram Anlamı
load_iris Örnek veri
StandardScaler Ortalama 0, std 1
sc.fit(X_train) Ölçeği öğren
m.score(X_test_s, y_test) Test doğruluğu

Başlangıç bölümündeki tüm dersler