Menu
CoddyTech

검증 세트

Coddy Machine Learning 여정의 지도 학습 섹션에 포함된 레슨. 58개 중 35번째.

k와 트리 깊이를 선택할 때, 가장 높은 테스트 점수를 기록한 k 또는 깊이를 선택했습니다. 하지만 그 점수는 실제보다 좋게 보일 수 있습니다. 점수가 높게 나왔기 때문에 그것을 선택한 것이니까요.

따라서 선택을 위해 세 번째 세트인 검증 세트를 남겨 두세요:

세 부분으로 나뉜 막대: 학습 행 60%, 모든 후보를 학습하는 데 사용; 검증 20%, 선택하는 데 사용; 테스트 20%, 한 번 보고하는 데 사용

두 번 분할하면 됩니다. 나머지 80%의 0.25는 20%입니다:

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개의 행에 대해 다음을 출력합니다:

300 100 100

검증 세트로 선택하세요. 테스트 세트는 맨 마지막에 한 번만 사용하세요.

challenge icon

챌린지

중급

포도밭에서는 Ridge를 사용해 각 줄의 포도 수확량을 예측합니다. 시작 코드는 테스트 점수를 기준으로 alpha를 선택하고 같은 점수를 보고합니다. 이를 수정하세요.

  1. X_rest와 y_rest를 학습 행과 검증 행으로 나누세요(test_size=0.25, random_state=0).
  2. 검증 R 제곱 점수를 기준으로 alpha를 선택하고, 그 점수와 함께 출력하세요.
  3. 선택한 alpha로 학습 행을 학습하고 테스트 R 제곱 점수를 출력하세요.

다른 포도밭의 경우:

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

정직한 점수는 시작 코드의 점수보다 낮은 경우가 많습니다. 그 점수가 진짜 점수입니다.

직접 해보기

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


# 첫 번째 행 집합에 스케일링된 Ridge(alpha)를 학습시키고, 두 번째 행 집합에서의 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행: 각 행에는 측정값 10개와 kg 단위의 포도 수확량이 있습니다
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)

# 테스트 점수로 alpha를 선택한 뒤 같은 점수를 보고합니다: 이를 수정하세요
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 icon실력 점검

이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.

지도 학습의 모든 레슨

직접 연습해 보세요: 온라인 Python 컴파일러