Máquinas de Vetores de Suporte com Amostras Ponderadas

Beginner

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

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.