Introdução
Este laboratório demonstra o uso do algoritmo de regressão Lasso do Scikit-learn em dados densos e esparsos. O algoritmo Lasso é um método de regressão linear que adiciona uma penalidade aos coeficientes de regressão. Esta penalidade incentiva o modelo a produzir coeficientes esparsos. O algoritmo Lasso é útil em situações onde o número de características é grande em comparação com o número de amostras.
Dicas da Máquina Virtual
Após o arranque da VM, clique no canto superior esquerdo para mudar para a aba Notebook para aceder ao Jupyter Notebook para a prática.
Por vezes, pode ser necessário esperar alguns segundos para o Jupyter Notebook terminar de carregar. A validação das operações não pode ser automatizada devido a limitações no Jupyter Notebook.
Se tiver problemas durante a aprendizagem, não hesite em contactar o Labby. Forneça feedback após a sessão e resolveremos prontamente o problema para si.
Importar Bibliotecas
Começamos importando as bibliotecas necessárias. Precisamos do Scikit-learn, NumPy e SciPy.
from time import time
from scipy import sparse
from scipy import linalg
from sklearn.datasets import make_regression
from sklearn.linear_model import Lasso
Gerar Dados Densos
Em seguida, geramos alguns dados densos que usaremos para a regressão Lasso. Usamos a função make_regression do Scikit-learn para gerar 200 amostras com 5000 características.
X, y = make_regression(n_samples=200, n_features=5000, random_state=0)
Treinar Lasso em Dados Densos
Agora, treinamos dois modelos de regressão Lasso, um nos dados densos e outro nos dados esparsos. Definimos o parâmetro alpha para 1 e o número máximo de iterações para 1000.
alpha = 1
sparse_lasso = Lasso(alpha=alpha, fit_intercept=False, max_iter=1000)
dense_lasso = Lasso(alpha=alpha, fit_intercept=False, max_iter=1000)
Ajustar Lasso a Dados Densos
Ajustamos os modelos de regressão Lasso aos dados densos usando a função fit do Scikit-learn. Também medimos o tempo do processo de ajuste e imprimimos o tempo para cada modelo Lasso.
t0 = time()
sparse_lasso.fit(X_sp, y)
print(f"Sparse Lasso concluído em {(time() - t0):.3f}s")
t0 = time()
dense_lasso.fit(X, y)
print(f"Dense Lasso concluído em {(time() - t0):.3f}s")
Comparar Coeficientes de Lasso Denso e Lasso Esparso
Comparamos os coeficientes do modelo Lasso denso e do modelo Lasso esparso para garantir que estejam produzindo os mesmos resultados. Calculamos a norma euclidiana da diferença entre os coeficientes.
coeff_diff = linalg.norm(sparse_lasso.coef_ - dense_lasso.coef_)
print(f"Distância entre coeficientes: {coeff_diff:.2e}")
Gerar Dados Esparsos
Em seguida, geramos alguns dados esparsos que usaremos para a regressão Lasso. Copiamos os dados densos da etapa anterior e substituímos todos os valores menores que 2,5 por 0. Também convertemos os dados esparsos para o formato Compressed Sparse Column do Scipy.
Xs = X.copy()
Xs[Xs < 2.5] = 0.0
Xs_sp = sparse.coo_matrix(Xs)
Xs_sp = Xs_sp.tocsc()
Treinar Lasso em Dados Esparsos
Agora, treinamos dois modelos de regressão Lasso, um nos dados densos e outro nos dados esparsos. Definimos o parâmetro alpha para 0,1 e o número máximo de iterações para 10000.
alpha = 0.1
sparse_lasso = Lasso(alpha=alpha, fit_intercept=False, max_iter=10000)
dense_lasso = Lasso(alpha=alpha, fit_intercept=False, max_iter=10000)
Ajustar Lasso a Dados Esparsos
Ajustamos os modelos de regressão Lasso aos dados esparsos usando a função fit do Scikit-learn. Também medimos o tempo do processo de ajuste e imprimimos o tempo para cada modelo Lasso.
t0 = time()
sparse_lasso.fit(Xs_sp, y)
print(f"Sparse Lasso concluído em {(time() - t0):.3f}s")
t0 = time()
dense_lasso.fit(Xs, y)
print(f"Dense Lasso concluído em {(time() - t0):.3f}s")
Comparar Coeficientes de Lasso Denso e Lasso Esparso
Comparamos os coeficientes do modelo Lasso denso e do modelo Lasso esparso para garantir que estão produzindo os mesmos resultados. Calculamos a norma euclidiana da diferença entre os coeficientes.
coeff_diff = linalg.norm(sparse_lasso.coef_ - dense_lasso.coef_)
print(f"Distância entre coeficientes : {coeff_diff:.2e}")
Resumo
Neste laboratório, demonstramos o uso do algoritmo de regressão Lasso do Scikit-learn em dados densos e esparsos. Mostramos que o algoritmo Lasso fornece os mesmos resultados para dados densos e esparsos e que, no caso de dados esparsos, o algoritmo é mais rápido.