Introdução
Neste laboratório, aprenderemos a traçar uma função de decisão de um conjunto de dados ponderado em SVM. Criaremos um modelo que considera os pesos das amostras e outro modelo que não considera os pesos das amostras. Em seguida, compararemos os dois modelos traçando suas funções de decisã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, sinta-se à vontade para perguntar ao Labby. Forneça feedback após a sessão e resolveremos prontamente o problema para si.
Importar Bibliotecas
Começaremos importando as bibliotecas necessárias.
import numpy as np
import matplotlib.pyplot as plt
from sklearn import svm
Criar Dados
Criaremos um conjunto de dados com 20 pontos, onde os primeiros 10 pontos pertencem à classe 1 e os últimos 10 pontos pertencem à classe -1.
np.random.seed(0)
X = np.r_[np.random.randn(10, 2) + [1, 1], np.random.randn(10, 2)]
y = [1] * 10 + [-1] * 10
Criar Pesos de Amostra
Criaremos dois conjuntos de pesos de amostra. O primeiro conjunto de pesos de amostra será constante para todos os pontos, e o segundo conjunto de pesos de amostra será maior para alguns valores discrepantes.
sample_weight_last_ten = abs(np.random.randn(len(X)))
sample_weight_constant = np.ones(len(X))
sample_weight_last_ten[15:] *= 5
sample_weight_last_ten[9] *= 15
Treinar Modelos
Criaremos dois modelos SVM. O primeiro modelo não levará em consideração os pesos de amostra, e o segundo modelo levará em consideração os pesos de amostra que acabamos de criar.
clf_no_weights = svm.SVC(gamma=1)
clf_no_weights.fit(X, y)
clf_weights = svm.SVC(gamma=1)
clf_weights.fit(X, y, sample_weight=sample_weight_last_ten)
Plotar Funções de Decisão
Plotaremos as funções de decisão dos dois modelos que acabamos de criar. Plotaremos a função de decisão do primeiro modelo à esquerda e a função de decisão do segundo modelo à direita. O tamanho dos pontos será proporcional ao seu peso.
fig, axes = plt.subplots(1, 2, figsize=(14, 6))
xx, yy = np.meshgrid(np.linspace(-4, 5, 500), np.linspace(-4, 5, 500))
Z = clf_no_weights.decision_function(np.c_[xx.ravel(), yy.ravel()])
Z = Z.reshape(xx.shape)
axes[0].contourf(xx, yy, Z, alpha=0.75, cmap=plt.cm.bone)
axes[0].scatter(X[:, 0], X[:, 1], c=y, s=100 * sample_weight_constant, alpha=0.9, cmap=plt.cm.bone, edgecolors="black")
axes[0].axis("off")
axes[0].set_title("Pesos Constantes")
Z = clf_weights.decision_function(np.c_[xx.ravel(), yy.ravel()])
Z = Z.reshape(xx.shape)
axes[1].contourf(xx, yy, Z, alpha=0.75, cmap=plt.cm.bone)
axes[1].scatter(X[:, 0], X[:, 1], c=y, s=100 * sample_weight_last_ten, alpha=0.9, cmap=plt.cm.bone, edgecolors="black")
axes[1].axis("off")
axes[1].set_title("Pesos Modificados")
plt.show()
Resumo
Neste laboratório, aprendemos como plotar uma função de decisão de um conjunto de dados ponderado em SVM. Criamos dois modelos: um que considera os pesos das amostras e outro que não os considera. Em seguida, comparamos os dois modelos plotando suas funções de decisão.