Gráfico de la función de decisión de un conjunto de datos con pesos

Beginner

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

Introducción

En este tutorial, aprenderemos cómo trazar una función de decisión de un conjunto de datos con pesos utilizando scikit-learn. También aprenderemos cómo asignar diferentes pesos a las muestras en el conjunto de datos para mostrar cómo los pesos afectan a la función 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 su retroalimentación después de la sesión y resolveremos rápidamente el problema para usted.

Importar las bibliotecas necesarias

Comenzamos importando las bibliotecas necesarias para nuestro proyecto.

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

Crear un conjunto de datos con pesos

Creamos un conjunto de datos con pesos utilizando la biblioteca numpy. Generamos 20 puntos con valores aleatorios y asignamos un peso mayor a las últimas 10 muestras.

np.random.seed(0)
X = np.r_[np.random.randn(10, 2) + [1, 1], np.random.randn(10, 2)]
y = [1] * 10 + [-1] * 10
sample_weight = 100 * np.abs(np.random.randn(20))
sample_weight[:10] *= 10

Graficar el conjunto de datos con pesos

Graficamos el conjunto de datos con pesos utilizando la biblioteca matplotlib. El tamaño de los puntos es proporcional a su peso.

xx, yy = np.meshgrid(np.linspace(-4, 5, 500), np.linspace(-4, 5, 500))
fig, ax = plt.subplots()
ax.scatter(
    X[:, 0],
    X[:, 1],
    c=y,
    s=sample_weight,
    alpha=0.9,
    cmap=plt.cm.bone,
    edgecolor="black",
)

Ajustar el modelo sin pesos

Ajustamos un modelo sin pesos utilizando el algoritmo SGDClassifier de la biblioteca scikit-learn. Luego graficamos la función de decisión del modelo sin pesos.

clf = linear_model.SGDClassifier(alpha=0.01, max_iter=100)
clf.fit(X, y)
Z = clf.decision_function(np.c_[xx.ravel(), yy.ravel()])
Z = Z.reshape(xx.shape)
no_weights = ax.contour(xx, yy, Z, levels=[0], linestyles=["solid"])

Ajustar el modelo con pesos

Ajustamos un modelo con pesos utilizando el mismo algoritmo que en el Paso 4, pero esta vez pasamos el argumento sample_weight al método fit. Luego graficamos la función de decisión del modelo con pesos.

clf = linear_model.SGDClassifier(alpha=0.01, max_iter=100)
clf.fit(X, y, sample_weight=sample_weight)
Z = clf.decision_function(np.c_[xx.ravel(), yy.ravel()])
Z = Z.reshape(xx.shape)
samples_weights = ax.contour(xx, yy, Z, levels=[0], linestyles=["dashed"])

Agregar leyenda y mostrar la gráfica

Agregamos una leyenda a la gráfica para diferenciar entre los modelos sin pesos y con pesos. Luego mostramos la gráfica.

no_weights_handles, _ = no_weights.legend_elements()
weights_handles, _ = samples_weights.legend_elements()
ax.legend(
    [no_weights_handles[0], weights_handles[0]],
    ["no weights", "with weights"],
    loc="lower left",
)

ax.set(xticks=(), yticks=())
plt.show()

Resumen

En este tutorial, aprendimos cómo graficar una función de decisión de un conjunto de datos con pesos utilizando scikit-learn. También aprendimos cómo asignar diferentes pesos a las muestras en el conjunto de datos para mostrar cómo los pesos afectan a la función de decisión.