Menu
CoddyTech

Doğrulama Kümeleri

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

k ve Ağaç Derinliğini Seçme bölümünde, en iyi test puanına sahip k değerini veya derinliği korudun. Bu puan yanıltıcı olabilir: yüksek çıktığı için onu seçtin.

Bu yüzden seçim yapmak için üçüncü bir küme ayırın: doğrulama kümesi:

Üç parçaya bölünmüş bir çubuk: eğitim satırları %60, her adayı eğitmek için kullanılır; doğrulama %20, seçim yapmak için kullanılır; test %20, bir kez raporlamak için kullanılır

İki bölme bunu sağlar. Kalan %80'in 0.25'i %20'dir:

X_rest, X_test, y_rest, y_test = train_test_split(X, y, test_size=0.2, random_state=0)
X_train, X_val, y_train, y_val = train_test_split(X_rest, y_rest, test_size=0.25, random_state=0)
print(len(X_train), len(X_val), len(X_test))

500 satır için şunu yazdırır:

300 100 100

Doğrulamaya göre seçim yapın. Test kümesine yalnızca en sonunda bir kez dokunun.

challenge icon

Görev

Orta

Bir bağ, Ridge ile sıra başına üzüm verimini tahmin ediyor. Başlangıç kodu, test skoruna göre alpha'yı seçiyor ve aynı skoru bildiriyor. Bunu düzelt.

  1. X_rest ve y_rest'i eğitim ve doğrulama satırlarına böl (test_size=0.25, random_state=0).
  2. Alfa'yı doğrulama R kare değerine göre seç ve bu skorla birlikte yazdır.
  3. Seçilen alfayı eğitim satırlarıyla eğit ve test R kare değerini yazdır.

Başka bir bağ için:

Chosen alpha: 1 (validation R squared 0.787)
Test R squared: 0.726

Dürüst skor çoğu zaman başlangıç kodunun skorundan daha düşüktür. Doğru olan skor budur.

Kendin dene

import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
from sklearn.linear_model import Ridge


# İlk satır kümesine ölçeklendirilmiş bir Ridge(alpha) modeli uyarlar, ikinci kümedeki R kare değerini döndürür
def ridge_r2(alpha, X_fit, y_fit, X_check, y_check):
    scaler = StandardScaler()
    model = Ridge(alpha=alpha)
    model.fit(scaler.fit_transform(X_fit), y_fit)
    return model.score(scaler.transform(X_check), y_check)


# 90 bağ satırı: her birinde 10 ölçüm ve kg cinsinden üzüm verimi bulunur
rows = pd.read_csv("vineyard.csv")
features = ["sun_hours", "rain_mm", "soil_ph", "slope_deg", "vine_age",
            "row_length_m", "buds_per_vine", "frost_days", "wind_kmh", "clay_pct"]
X = rows[features]
y = rows["yield_kg"]
alphas = [0.1, 1, 10, 100]
X_rest, X_test, y_rest, y_test = train_test_split(X, y, test_size=0.2, random_state=0)

# Bu, alpha değerini test puanına göre seçip ardından aynı puanı raporlar: bunu düzelt
best_alpha = 0
best_r2 = -1
for alpha in alphas:
    r2 = ridge_r2(alpha, X_rest, y_rest, X_test, y_test)
    if r2 > best_r2:
        best_alpha = alpha
        best_r2 = r2
print(f"Chosen alpha: {best_alpha}")
print(f"Test R squared: {best_r2:.3f}")
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