Regressão lasso em python (passo a passo)
A regressão laço é um método que podemos usar para ajustar um modelo de regressão quando a multicolinearidade está presente nos dados.
Resumindo, a regressão de mínimos quadrados tenta encontrar estimativas de coeficientes que minimizem a soma residual dos quadrados (RSS):
RSS = Σ(y i – ŷ i )2
Ouro:
- Σ : Um símbolo grego que significa soma
- y i : o valor real da resposta para a i-ésima observação
- ŷ i : O valor da resposta prevista com base no modelo de regressão linear múltipla
Por outro lado, a regressão laço procura minimizar o seguinte:
RSS + λΣ|β j |
onde j vai de 1 a p variáveis preditoras e λ ≥ 0.
Este segundo termo da equação é conhecido como penalidade de retirada . Na regressão laço, selecionamos um valor para λ que produz o teste MSE (erro quadrático médio) mais baixo possível.
Este tutorial fornece um exemplo passo a passo de como realizar a regressão laço em Python.
Passo 1: Importe os pacotes necessários
Primeiro, importaremos os pacotes necessários para realizar a regressão laço em Python:
import pandas as pd
from numpy import arange
from sklearn. linear_model import LassoCV
from sklearn. model_selection import RepeatedKFold
Etapa 2: carregar dados
Neste exemplo, usaremos um conjunto de dados chamado mtcars , que contém informações sobre 33 carros diferentes. Usaremos hp como variável de resposta e as seguintes variáveis como preditores:
- mpg
- peso
- merda
- qsec
O código a seguir mostra como carregar e exibir esse conjunto de dados:
#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
Etapa 3: ajustar o modelo de regressão Lasso
A seguir, usaremos a função LassoCV() do sklearn para ajustar o modelo de regressão lasso e usaremos a função RepeatedKFold() para realizar a validação cruzada k-fold para encontrar o valor alfa ideal a ser usado para o termo de penalidade.
Nota: O termo “alpha” é usado em vez de “lambda” em Python.
Para este exemplo, escolheremos k = 10 dobras e repetiremos o processo de validação cruzada 3 vezes.
Observe também que LassoCV() testa apenas os valores alfa 0,1, 1 e 10 por padrão. No entanto, podemos definir nosso próprio intervalo alfa de 0 a 1 em incrementos de 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
O valor lambda que minimiza o MSE do teste é 0,99 .
Etapa 4: use o modelo para fazer previsões
Finalmente, podemos usar o modelo final de regressão laço para fazer previsões sobre novas observações. Por exemplo, o código a seguir mostra como definir um carro novo com os seguintes atributos:
- mpg: 24
- peso: 2,5
- preço: 3,5
- qseg: 18,5
O código a seguir mostra como usar o modelo de regressão laço ajustado para prever o valor hp desta nova observação:
#define new observation
new = [24, 2.5, 3.5, 18.5]
#predict hp value using lasso regression model
model. predict ([new])
array([105.63442071])
Com base nos valores inseridos, o modelo prevê que este carro terá um valor de cv de 105,63442071 .
Você pode encontrar o código Python completo usado neste exemplo aqui .