Лассо-регрессия — это метод, который мы можем использовать для подбора модели регрессии, когда в данных присутствует мультиколлинеарность .
В двух словах, регрессия методом наименьших квадратов пытается найти оценки коэффициентов, которые минимизируют сумму квадратов остатков (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 в качестве переменной ответа и следующие переменные в качестве предикторов:
- миль на галлон
- вес
- дрянь
- 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: Подберите модель регрессии Лассо
Затем мы будем использовать функцию 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
Значение лямбда, которое минимизирует СКО теста, оказывается равным 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, использованный в этом примере, вы можете найти здесь .