Máquina de Vectores de Soporte con Muestras Ponderadas

Machine LearningMachine LearningBeginner
Practicar Ahora

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

💡 Este tutorial está traducido por IA desde la versión en inglés. Para ver la versión original, puedes hacer clic aquí

Introducción

En este laboratorio, aprenderemos a trazar una función de decisión de un conjunto de datos ponderado en SVM. Crearemos un modelo que tome en cuenta los pesos de las muestras y otro modelo que no los tenga en cuenta. Luego, compararemos los dos modelos trazando sus funciones de decisión.

Consejos sobre la VM

Una vez finalizada la inicialización de la VM, haga clic en la esquina superior izquierda para cambiar a la pestaña Cuaderno y acceder a Jupyter Notebook para practicar.

A veces, es posible que tenga que esperar unos segundos a que Jupyter Notebook termine de cargarse. La validación de las operaciones no se puede automatizar debido a las limitaciones de Jupyter Notebook.

Si tiene problemas durante el aprendizaje, no dude en preguntar a Labby. Deje sus comentarios después de la sesión y lo resolveremos rápidamente para usted.


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL ml(("Machine Learning")) -.-> ml/FrameworkandSoftwareGroup(["Framework and Software"]) ml/FrameworkandSoftwareGroup -.-> ml/sklearn("scikit-learn") subgraph Lab Skills ml/sklearn -.-> lab-49332{{"Máquina de Vectores de Soporte con Muestras Ponderadas"}} end

Importar bibliotecas

Comenzaremos importando las bibliotecas necesarias.

import numpy as np
import matplotlib.pyplot as plt
from sklearn import svm

Crear datos

Crearemos un conjunto de datos de 20 puntos, donde los primeros 10 puntos pertenecen a la clase 1 y los últimos 10 puntos pertenecen a la clase -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

Crear pesos de muestra

Crearemos dos conjuntos de pesos de muestra. El primer conjunto de pesos de muestra será constante para todos los puntos, y el segundo conjunto de pesos de muestra será mayor para algunos valores atípicos.

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

Entrenar modelos

Crearemos dos modelos de SVM. El primer modelo no tomará en cuenta los pesos de muestra, y el segundo modelo tomará en cuenta los pesos de muestra que acabamos de crear.

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)

Graficar funciones de decisión

Graficaremos las funciones de decisión de los dos modelos que acabamos de crear. Graficaremos la función de decisión del primer modelo a la izquierda y la función de decisión del segundo modelo a la derecha. El tamaño de los puntos será proporcional a su 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()

Resumen

En este laboratorio, aprendimos cómo graficar una función de decisión de un conjunto de datos con pesos en SVM. Creamos dos modelos, uno que toma en cuenta los pesos de muestra y otro que no los toma en cuenta. Luego, comparamos los dos modelos graficando sus funciones de decisión.