Menu
CoddyTech

k'yi Seçmek

Coddy'nin Machine Learning Journey'sinin Denetimli Öğrenme bölümünün bir parçası. Ders 7 / 58.

Biberlere hangi k değeri uygun? Birkaç değer dene ve her modeli iki kez puanla: modelin öğrendiği satırlarda, eğitim doğruluğu; gizli satırlarda ise test doğruluğu.

Biberler için k değerine göre doğruluk, iki çizgi. Eğitim doğruluğu k = 1 için 1.0'dan başlar ve düşer. Test doğruluğu 0.8'den başlar, k = 13 için 0.92'de zirve yapar ve k > 80 olduğunda her iki çizgi de yaklaşık 0.7'ye düşer

k = 1 olduğunda her bir biber kendi en yakın komşusudur; bu yüzden model ezberler: kendi satırlarında mükemmeldir, yeni satırlarda ise daha kötü sonuç verir. Çok büyük bir k, grupları belirsizleştirir.

ks = range(1, 120, 6)
train_acc = []
test_acc = []
for k in ks:
    model = KNeighborsClassifier(n_neighbors=k)
    model.fit(X_train, y_train)
    train_acc.append(model.score(X_train, y_train))
    test_acc.append(model.score(X_test, y_test))

Şimdilik, test doğruluğunun en yüksek olduğu k değerini seçin: 7. bölüm daha adil bir değerlendirici gösteriyor.

challenge icon

Görev

Kolay

Bir futbol kulübü şutları shots.csv dosyasına kaydeder: mesafe, açı ve goal ya da miss. Hangi k en iyi tahmini yapar? Başlangıç kodu verileri böler, ks listesini oluşturur ve grafiği etiketler.

  1. Her k için bir model eğit ve eğitim ile test doğruluğunu kaydet.
  2. Aşağıdaki gibi, test doğruluğuna göre en iyi k değerini yazdır.
  3. Her iki listeyi de ks değerlerine karşı, train ve test etiketleriyle ve bir açıklama kutusuyla çiz.

Başka bir kulüp için:

Best k: 9 (test accuracy 0.783)

Başka bir kulübün şutları: k = 1 ile 41 arasında k değerine göre doğruluk. Eğitim doğruluğu k = 1'de 0.99'dan yaklaşık 0.71'e düşüyor. Test doğruluğu 0.68'den yükselerek k = 9'da 0.78 ile zirve yapıyor, ardından 0.7'ye geriliyor

Coddy daha sonra grafiğini açıklıyor.

Kendin dene

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from sklearn.model_selection import train_test_split
from sklearn.neighbors import KNeighborsClassifier

# Her şut için bir satır: kaleye uzaklık (m), kale ağzına göre açı (derece), gol veya kaçan şut
shots = pd.read_csv("shots.csv")
X = shots[["distance_m", "angle_deg"]]
y = shots["result"]
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.25, random_state=0)
ks = range(1, 42, 4)  # k = 1, 5, 9, ..., 41

fig, ax = plt.subplots()
ax.set_title("Shots: Accuracy by k")
ax.set_xlabel("k (neighbors)")
ax.set_ylabel("Accuracy")

# 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