Desempate en el modelo de SVM

Beginner

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

Introducción

Esta práctica introduce el desempate en SVM y su efecto en el límite de decisión. En SVM, el desempate es el mecanismo utilizado para resolver los conflictos entre dos o más clases cuando sus distancias son iguales. No está habilitado por defecto cuando decision_function_shape='ovr' porque es costoso. Por lo tanto, esta práctica ilustra el efecto del parámetro break_ties para un problema de clasificación multiclase y decision_function_shape='ovr'.

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 cargar. 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.

Importar las bibliotecas necesarias

En este paso, importaremos las bibliotecas necesarias para SVM y la visualización.

import numpy as np
import matplotlib.pyplot as plt
from sklearn.svm import SVC
from sklearn.datasets import make_blobs

Crear datos de muestra

En este paso, crearemos un conjunto de datos de muestra utilizando la función make_blobs de scikit-learn. Este conjunto de datos contiene 3 clases y 2 características.

X, y = make_blobs(random_state=27)

Crear un modelo de SVM con y sin desempate

En este paso, crearemos dos modelos de SVM: uno con el desempate deshabilitado y otro con el desempate habilitado. Utilizaremos la clase SVC de scikit-learn para crear estos modelos. El parámetro break_ties se establece en False y True para los dos modelos, respectivamente.

for break_ties, title, ax in zip((False, True), titles, sub.flatten()):
    svm = SVC(
        kernel="linear", C=1, break_ties=break_ties, decision_function_shape="ovr"
    ).fit(X, y)

Crear el límite de decisión

En este paso, crearemos el límite de decisión para los dos modelos. Utilizaremos la función predict para predecir las clases de los puntos de datos de muestra y trazar el límite de decisión.

    xs = np.linspace(xlim[0], xlim[1], 1000)
    ys = np.linspace(ylim[0], ylim[1], 1000)
    xx, yy = np.meshgrid(xs, ys)

    pred = svm.predict(np.c_[xx.ravel(), yy.ravel()])

    colors = [plt.cm.Accent(i) for i in [0, 4, 7]]

    points = ax.scatter(X[:, 0], X[:, 1], c=y, cmap="Accent")
    classes = [(0, 1), (0, 2), (1, 2)]
    line = np.linspace(X[:, 1].min() - 5, X[:, 1].max() + 5)
    ax.imshow(
        -pred.reshape(xx.shape),
        cmap="Accent",
        alpha=0.2,
        extent=(xlim[0], xlim[1], ylim[1], ylim[0]),
    )

Graficar el límite de decisión

En este paso, graficaremos el límite de decisión creado en el paso anterior. Utilizaremos los atributos coef_ e intercept_ del modelo de SVM para graficar el límite de decisión.

    for coef, intercept, col in zip(svm.coef_, svm.intercept_, classes):
        line2 = -(line * coef[1] + intercept) / coef[0]
        ax.plot(line2, line, "-", c=colors[col[0]])
        ax.plot(line2, line, "--", c=colors[col[1]])
    ax.set_xlim(xlim)
    ax.set_ylim(ylim)
    ax.set_title(title)
    ax.set_aspect("equal")

Mostrar la gráfica

En este paso, mostraremos la gráfica que contiene el límite de decisión para ambos modelos.

plt.show()

Resumen

Esta práctica ilustró el efecto del desempate en el modelo de SVM sobre el límite de decisión. Creamos dos modelos de SVM: uno con el desempate deshabilitado y otro con el desempate habilitado. Luego graficamos el límite de decisión para ambos modelos. El límite de decisión del modelo con el desempate habilitado era no convexo en la área donde las clases estaban empatadas.