Introdução
O modelo de Regressão Logística L1 é um método de classificação binária que utiliza a regularização L1 para induzir esparcidade no modelo. O caminho de regularização deste modelo mostra os coeficientes do modelo à medida que a força de regularização aumenta. Neste laboratório, utilizaremos o conjunto de dados Iris para treinar modelos de regressão logística penalizados por L1 e traçar seus caminhos de regularização.
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 o aprendizado, não hesite em contactar o Labby. Forneça feedback após a sessão e resolveremos prontamente o problema para si.
Carregar o conjunto de dados Iris
Vamos carregar o conjunto de dados Iris da biblioteca scikit-learn. O conjunto de dados contém quatro características: Comprimento da sépala, Largura da sépala, Comprimento da pétala e Largura da pétala. Usaremos apenas as duas primeiras características para classificação binária.
from sklearn import datasets
iris = datasets.load_iris()
X = iris.data
y = iris.target
X = X[y != 2] ## Use only first two features for binary classification
y = y[y != 2]
X /= X.max() ## Normalize X to speed-up convergence
Calcular o caminho de regularização
Vamos calcular o caminho de regularização treinando modelos de regressão logística penalizados por L1 com diferentes níveis de força de regularização. Usaremos o solucionador liblinear, que pode otimizar eficientemente a perda de Regressão Logística com uma penalidade L1. Definiremos um valor baixo para a tolerância para garantir que o modelo tenha convergido antes de coletar os coeficientes. Também usaremos warm_start=True, o que significa que os coeficientes dos modelos são reutilizados para inicializar o ajuste do próximo modelo, acelerando o cálculo do caminho completo.
import numpy as np
from sklearn import linear_model
from sklearn.svm import l1_min_c
cs = l1_min_c(X, y, loss="log") * np.logspace(0, 10, 16)
clf = linear_model.LogisticRegression(
penalty="l1",
solver="liblinear",
tol=1e-6,
max_iter=int(1e6),
warm_start=True,
intercept_scaling=10000.0,
)
coefs_ = []
for c in cs:
clf.set_params(C=c)
clf.fit(X, y)
coefs_.append(clf.coef_.ravel().copy())
coefs_ = np.array(coefs_)
Plotar o caminho de regularização
Vamos plotar o caminho de regularização usando os coeficientes dos modelos treinados. Os coeficientes serão plotados contra o logaritmo da força de regularização. No lado esquerdo do gráfico (regularizadores fortes), todos os coeficientes são exatamente 0. À medida que a regularização se torna progressivamente menos restritiva, os coeficientes podem assumir valores não nulos um após o outro.
import matplotlib.pyplot as plt
plt.plot(np.log10(cs), coefs_, marker="o")
ymin, ymax = plt.ylim()
plt.xlabel("log(C)")
plt.ylabel("Coeficientes")
plt.title("Caminho da Regressão Logística")
plt.axis("tight")
plt.show()
Resumo
Neste laboratório, aprendemos como treinar modelos de regressão logística penalizados por L1 no conjunto de dados Iris e plotar seus caminhos de regularização. O caminho de regularização demonstra como os coeficientes do modelo mudam com diferentes níveis de força de regularização. Este método é útil na seleção de recursos, pois pode identificar quais recursos têm o impacto mais significativo no modelo.