Aplicando Técnicas de Regularização com SGD

Beginner

This tutorial is from open-source community. Access the source code

Introdução

Neste laboratório, aprenderemos sobre o SGDClassifier e o SGDRegressor no scikit-learn e como utilizá-los para aplicar penalidades L1, L2 e elastic-net em dados.

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 o problema rapidamente para si.

Importando Bibliotecas

O primeiro passo é importar as bibliotecas necessárias. Usaremos numpy, matplotlib e scikit-learn.

import numpy as np
import matplotlib.pyplot as plt
from sklearn.linear_model import SGDClassifier, SGDRegressor

Gerando Dados

Vamos gerar alguns dados de amostra para aplicar nossas penalidades. Neste exemplo, geraremos duas classes de dados com 100 amostras cada.

np.random.seed(42)

## Gerar duas classes de dados
X = np.random.randn(200, 2)
y = np.repeat([1, -1], 100)

Aplicando Penalidade L1

Agora aplicaremos a penalidade L1 aos nossos dados usando o SGDClassifier.

## Criar um classificador com penalidade L1
clf = SGDClassifier(loss='hinge', penalty='l1', alpha=0.05, max_iter=1000, tol=1e-3)

## Ajustar o modelo
clf.fit(X, y)

## Plotar o limite de decisão
plt.scatter(X[:, 0], X[:, 1], c=y)
ax = plt.gca()
xlim = ax.get_xlim()
ylim = ax.get_ylim()
xx, yy = np.meshgrid(np.linspace(xlim[0], xlim[1], 201), np.linspace(ylim[0], ylim[1], 201))
Z = clf.decision_function(np.c_[xx.ravel(), yy.ravel()])
Z = Z.reshape(xx.shape)
ax.contour(xx, yy, Z, colors='k', levels=[-1, 0, 1], alpha=0.5, linestyles=['--', '-', '--'])
ax.set_xlim(xlim)
ax.set_ylim(ylim)
plt.title('Penalidade L1')
plt.show()

Aplicando Penalidade L2

Agora aplicaremos a penalidade L2 aos nossos dados usando o SGDClassifier.

## Criar um classificador com penalidade L2
clf = SGDClassifier(loss='hinge', penalty='l2', alpha=0.05, max_iter=1000, tol=1e-3)

## Ajustar o modelo
clf.fit(X, y)

## Plotar o limite de decisão
plt.scatter(X[:, 0], X[:, 1], c=y)
ax = plt.gca()
xlim = ax.get_xlim()
ylim = ax.get_ylim()
xx, yy = np.meshgrid(np.linspace(xlim[0], xlim[1], 201), np.linspace(ylim[0], ylim[1], 201))
Z = clf.decision_function(np.c_[xx.ravel(), yy.ravel()])
Z = Z.reshape(xx.shape)
ax.contour(xx, yy, Z, colors='k', levels=[-1, 0, 1], alpha=0.5, linestyles=['--', '-', '--'])
ax.set_xlim(xlim)
ax.set_ylim(ylim)
plt.title('Penalidade L2')
plt.show()

Aplicando Penalidade Elastic-Net

Agora aplicaremos a penalidade elastic-net aos nossos dados usando o SGDClassifier.

## Criar um classificador com penalidade elastic-net
clf = SGDClassifier(loss='hinge', penalty='elasticnet', alpha=0.05, l1_ratio=0.15, max_iter=1000, tol=1e-3)

## Ajustar o modelo
clf.fit(X, y)

## Plotar o limite de decisão
plt.scatter(X[:, 0], X[:, 1], c=y)
ax = plt.gca()
xlim = ax.get_xlim()
ylim = ax.get_ylim()
xx, yy = np.meshgrid(np.linspace(xlim[0], xlim[1], 201), np.linspace(ylim[0], ylim[1], 201))
Z = clf.decision_function(np.c_[xx.ravel(), yy.ravel()])
Z = Z.reshape(xx.shape)
ax.contour(xx, yy, Z, colors='k', levels=[-1, 0, 1], alpha=0.5, linestyles=['--', '-', '--'])
ax.set_xlim(xlim)
ax.set_ylim(ylim)
plt.title('Penalidade Elastic-Net')
plt.show()

Resumo

Neste laboratório, aprendemos como aplicar penalidades L1, L2 e elastic-net em dados utilizando o SGDClassifier no scikit-learn. Geramos dados de amostra, aplicamos as penalidades e plotamos os limites de decisão. Esta é uma ferramenta útil para regularização em modelos de machine learning, especialmente para prevenir o overfitting.