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