Ридж-регрессия в 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, использованный в этом примере, вы можете найти здесь .