Ридж-регрессия в Python (шаг за шагом)


Ридж-регрессия — это метод, который мы можем использовать для подбора модели регрессии, когда в данных присутствует мультиколлинеарность .

В двух словах, регрессия методом наименьших квадратов пытается найти оценки коэффициентов, которые минимизируют сумму квадратов остатков (RSS):

RSS = Σ(y i – ŷ i )2

куда:

  • Σ : греческий символ, означающий сумму
  • y i : Фактическое значение отклика для i -го наблюдения
  • ŷ i : прогнозируемое значение отклика на основе модели множественной линейной регрессии.

И наоборот, гребневая регрессия стремится минимизировать следующее:

RSS + λΣβ j 2

где j находится в диапазоне от 1 до p переменных-предикторов и λ ≥ 0.

Этот второй член уравнения известен как штраф за усадку.В гребневой регрессии мы выбираем значение λ, которое дает наименьшую возможную тестовую MSE (среднеквадратическую ошибку).

В этом руководстве представлен пошаговый пример выполнения гребневой регрессии в Python.

Шаг 1: Импортируйте необходимые пакеты

Во-первых, мы импортируем необходимые пакеты для выполнения гребневой регрессии в Python:

import pandas as pd
from numpy import arange
from sklearn. linear_model import Ridge
from sklearn. linear_model import RidgeCV
from sklearn. model_selection import RepeatedKFold

Шаг 2: Загрузите данные

В этом примере мы будем использовать набор данных под названием mtcars , который содержит информацию о 33 различных автомобилях. Мы будем использовать hp в качестве переменной ответа и следующие переменные в качестве предикторов:

  • миль на галлон
  • вес
  • дрянь
  • qсек

Следующий код показывает, как загрузить и просмотреть этот набор данных:

#define URL where data is located
url = "https://raw.githubusercontent.com/Statology/Python-Guides/main/mtcars.csv"

#read in data
data_full = pd.read_csv (url)

#select subset of data
data = data_full[["mpg", "wt", "drat", "qsec", "hp"]]

#view first six rows of data
data[0:6]

 mpg wt drat qsec hp
0 21.0 2.620 3.90 16.46 110
1 21.0 2.875 3.90 17.02 110
2 22.8 2.320 3.85 18.61 93
3 21.4 3.215 3.08 19.44 110
4 18.7 3.440 3.15 17.02 175
5 18.1 3.460 2.76 20.22 105

Шаг 3: Подберите модель регрессии хребта

Затем мы будем использовать функцию RidgeCV() из sklearn, чтобы соответствовать модели регрессии хребта, и мы будем использовать функцию RepeatedKFold () для выполнения k-кратной перекрестной проверки, чтобы найти оптимальное значение альфа для использования в качестве наказания.

Примечание.Термин «альфа» используется вместо «лямбда» в Python.

Для этого примера мы выберем k = 10 раз и повторим процесс перекрестной проверки 3 раза.

Также обратите внимание, что RidgeCV() по умолчанию проверяет только альфа-значения .1, 1 и 10. Однако мы можем определить собственный альфа-диапазон от 0 до 1 с шагом 0,01:

#define predictor and response variables
X = data[["mpg", "wt", "drat", "qsec"]]
y = data["hp"]

#define cross-validation method to evaluate model
cv = RepeatedKFold(n_splits= 10 , n_repeats= 3 , random_state= 1 )

#define model
model = RidgeCV(alphas= arange (0, 1, 0.01), cv=cv, scoring='neg_mean_absolute_error')

#fit model
model. fit (X, y)

#display lambda that produced the lowest test MSE
print(model. alpha_ )

0.99

Значение лямбда, которое минимизирует СКО теста, оказывается равным 0,99 .

Шаг 4: Используйте модель для прогнозирования

Наконец, мы можем использовать окончательную модель гребневой регрессии, чтобы делать прогнозы на основе новых наблюдений. Например, следующий код показывает, как определить новый автомобиль со следующими атрибутами:

  • миль на галлон: 24
  • вес: 2,5
  • Драт: 3,5
  • qсек: 18,5

В следующем коде показано, как использовать регрессионную модель подогнанного хребта для прогнозирования значения hp этого нового наблюдения:

#define new observation
new = [24, 2.5, 3.5, 18.5]

#predict hp value using ridge regression model
model. predict([new])

array([104.16398018])

Основываясь на входных значениях, модель предсказывает, что этот автомобиль будет иметь значение 104,16398018 л.с.

Полный код Python, использованный в этом примере, вы можете найти здесь .

Замечательно! Вы успешно подписались.
Добро пожаловать обратно! Вы успешно вошли
Вы успешно подписались на кодкамп.
Срок действия вашей ссылки истек.
Ура! Проверьте свою электронную почту на наличие волшебной ссылки для входа.
Успех! Ваша платежная информация обновлена.
Ваша платежная информация не была обновлена.