Проверочные выборки
Часть раздела Обучение с учителем путешествия по Machine Learning на Coddy. Урок 35 из 58.
В разделе «Выбор k и глубины дерева» ты оставил k или глубину с наилучшей оценкой на тестовой выборке. Эта оценка льстит: ты оставил их, потому что она оказалась высокой.
Поэтому оставьте третью выборку для выбора — валидационную выборку:
Два разделения дают нужный результат. 0.25 от оставшихся 80% — это 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Выбирайте на валидационной выборке. Обращайтесь к тестовой выборке только один раз, в самом конце.
Задание
СреднеВиноградник прогнозирует урожайность винограда с каждой строки с помощью Ridge. Стартовый код выбирает alpha по результату на тестовой выборке и сообщает тот же результат. Исправь это.
- Раздели
X_restиy_restна обучающие и проверочные строки (test_size=0.25,random_state=0). - Выбери alpha по коэффициенту детерминации R² на проверочной выборке и выведи его вместе с этим результатом.
- Обучи модель с выбранным 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}")
В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.
Все уроки раздела Обучение с учителем
1Ваша первая модель
Обучение на примерахОбучающая и тестовая выборкиОбучение и предсказаниеОценка моделиПовторение: сортировщик семян4Логистическая регрессия
Предсказания «да» или «нет»Порог принятия решенияВеса как свидетельстваНесколько классовПовторение: спам-фильтр7Переобучение
Недообучение и переобучениеКривые обученияРегуляризацияПроверочные выборкиПовторение: настройка дерева2Метод ближайших соседей
Как работает k-NNВыбор kГраницы принятия решенийМасштабирование признаков для поиска соседейПовторение: соседи для вин5Оценка классификаторов
Матрица ошибокТочность и полнотаF1-мераНесбалансированные классыROC-кривыеПовторение: скрининговый тест8Кросс-валидация
K-блочная проверкаСправедливое сравнение моделейПоиск по сеткеПовторение: ремонт скейтбордов11Проект: виды пингвинов
Знакомство с пингвинамиПодготовка данныхВыбор моделиНастройка лучшей моделиЗапуск моделиПотренируйтесь самостоятельно: Онлайн-компилятор Python