Регуляризация
Часть раздела Обучение с учителем путешествия по Machine Learning на Coddy. Урок 34 из 58.
Переобученная линейная модель полагается на большие веса, чтобы подстроиться под каждую зашумлённую строку. Регрессия Ridge накладывает штраф за большие веса, а alpha задаёт его величину.
Вот 20 подержанных гитар и шесть масштабированных признаков, предсказывающих цену:
Это единственная замена для LinearRegression, веса которого были [-83. 116. 104. 27. 17. 15.]:
from sklearn.linear_model import Ridge
ridge = Ridge(alpha=100)
ridge.fit(X_train, y_train)
print(np.round(ridge.coef_))Это выводит:
[-14. 18. 16. 10. 5. 8.]Чем больше альфа, тем меньше веса и тем слабее переобучение. Если альфа слишком велика, модель недообучается.
Задание
СреднеСайт бронирования жилья предсказывает стоимость аренды коттеджей за ночь по 8 признакам, используя всего 16 коттеджей. Программа считывает alpha; начальный код разделяет данные на выборки и масштабирует их.
- Обучи модели
LinearRegressionиRidgeс этим значениемalpha. - Выведи общую величину весов каждой модели: сложи абсолютные значения весов и округли результат.
- Выведи значение R² для тестовой выборки (с точностью до 3 знаков после запятой) и лучшую модель, как показано ниже.
Для другого региона и значения 5:
Total weight size: plain 90, ridge 53
Test R squared: plain -0.471, ridge 0.642
Better on new cottages: ridgeПопробуйте сами
import numpy as np
import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
from sklearn.linear_model import LinearRegression, Ridge
from sklearn.metrics import r2_score
alpha = float(input())
# Не изменяйте строки ниже: 28 коттеджей для отдыха, 8 признаков и цена за ночь в евро
cottages = pd.read_csv("cottages.csv")
features = ["size_m2", "bedrooms", "lake_m", "age_years", "town_km", "sauna", "road_noise_db", "forest_m"]
X = cottages[features]
y = cottages["price"]
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.4, random_state=0)
scaler = StandardScaler()
X_train = scaler.fit_transform(X_train)
X_test = scaler.transform(X_test)
# Напишите свой код ниже
В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.
Все уроки раздела Обучение с учителем
1Ваша первая модель
Обучение на примерахОбучающая и тестовая выборкиОбучение и предсказаниеОценка моделиПовторение: сортировщик семян4Логистическая регрессия
Предсказания «да» или «нет»Порог принятия решенияВеса как свидетельстваНесколько классовПовторение: спам-фильтр7Переобучение
Недообучение и переобучениеКривые обученияРегуляризацияПроверочные выборкиПовторение: настройка дерева2Метод ближайших соседей
Как работает k-NNВыбор kГраницы принятия решенийМасштабирование признаков для поиска соседейПовторение: соседи для вин5Оценка классификаторов
Матрица ошибокТочность и полнотаF1-мераНесбалансированные классыROC-кривыеПовторение: скрининговый тест8Кросс-валидация
K-блочная проверкаСправедливое сравнение моделейПоиск по сеткеПовторение: ремонт скейтбордов11Проект: виды пингвинов
Знакомство с пингвинамиПодготовка данныхВыбор моделиНастройка лучшей моделиЗапуск моделиПотренируйтесь самостоятельно: Онлайн-компилятор Python