Ридж-регрессия в 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 в качестве переменной ответа и следующие переменные в качестве предикторов:

  • миль на галлон
  • масса
  • дерьмо
  • qsec

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

 #define URL where data is located
url = "https://raw.githubusercontent.com/Statorials/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() по умолчанию проверяет только альфа-значения 0,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

Значение лямбда, которое минимизирует MSE теста, оказывается равным 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, использованный в этом примере, вы можете найти здесь .

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *