Лассо-регрессия в python (шаг за шагом)


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

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

RSS = Σ(y i – ŷ i )2

Золото:

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

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

RSS + λΣ|β j |

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

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

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

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

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

 import pandas as pd
from numpy import arange
from sklearn. linear_model import LassoCV
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. Подберите модель регрессии Лассо

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

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

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

Также обратите внимание, что LassoCV() по умолчанию проверяет только альфа-значения 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 = LassoCV(alphas= arange (0, 1, 0.01), cv=cv, n_jobs= -1 )

#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 lasso regression model
model. predict ([new])

array([105.63442071])

На основании введенных значений модель прогнозирует, что мощность этого автомобиля будет равна 105,63442071 .

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

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

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