Menu
CoddyTech

Регуляризация

Часть раздела Обучение с учителем путешествия по Machine Learning на Coddy. Урок 34 из 58.

Переобученная линейная модель полагается на большие веса, чтобы подстроиться под каждую зашумлённую строку. Регрессия Ridge накладывает штраф за большие веса, а alpha задаёт его величину.

Вот 20 подержанных гитар и шесть масштабированных признаков, предсказывающих цену:

Шесть линий, по одному весу на признак гитары, в зависимости от alpha от 0.01 до 1000. Значение для состояния начинается с 116, для бренда — с 104, для возраста — с минус 83; все они стремятся к 0 по мере роста alpha

Это единственная замена для 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.]

Чем больше альфа, тем меньше веса и тем слабее переобучение. Если альфа слишком велика, модель недообучается.

challenge icon

Задание

Средне

Сайт бронирования жилья предсказывает стоимость аренды коттеджей за ночь по 8 признакам, используя всего 16 коттеджей. Программа считывает alpha; начальный код разделяет данные на выборки и масштабирует их.

  1. Обучи модели LinearRegression и Ridge с этим значением alpha.
  2. Выведи общую величину весов каждой модели: сложи абсолютные значения весов и округли результат.
  3. Выведи значение 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)

# Напишите свой код ниже
quiz iconПроверьте себя

В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.

Все уроки раздела Обучение с учителем

Потренируйтесь самостоятельно: Онлайн-компилятор Python