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 .

Add a Comment

O seu endereço de email não será publicado. Campos obrigatórios marcados com *