Introduction
Ce laboratoire présente le tri en cas d'égalité dans les SVM et son impact sur la frontière de décision. En SVM, le tri en cas d'égalité est le mécanisme utilisé pour résoudre les conflits entre deux ou plusieurs classes lorsque leurs distances sont égales. Il n'est pas activé par défaut lorsque decision_function_shape='ovr' car cela est coûteux. Par conséquent, ce laboratoire illustre l'effet du paramètre break_ties pour un problème de classification multiclasse avec decision_function_shape='ovr'.
Conseils sur la machine virtuelle
Une fois le démarrage de la machine virtuelle terminé, cliquez dans le coin supérieur gauche pour basculer vers l'onglet Notebook pour accéder à Jupyter Notebook pour la pratique.
Parfois, vous devrez peut-être attendre quelques secondes pour que Jupyter Notebook ait fini de charger. La validation des opérations ne peut pas être automatisée en raison des limitations de Jupyter Notebook.
Si vous rencontrez des problèmes pendant l'apprentissage, n'hésitez pas à demander à Labby. Donnez votre feedback après la session et nous réglerons rapidement le problème pour vous.
Importation des bibliothèques requises
Dans cette étape, nous allons importer les bibliothèques requises pour les SVM et la visualisation.
import numpy as np
import matplotlib.pyplot as plt
from sklearn.svm import SVC
from sklearn.datasets import make_blobs
Création de données d'échantillonnage
Dans cette étape, nous allons créer un ensemble de données d'échantillonnage à l'aide de la fonction make_blobs de scikit-learn. Cet ensemble de données contient 3 classes et 2 caractéristiques.
X, y = make_blobs(random_state=27)
Création d'un modèle SVM avec et sans tri en cas d'égalité
Dans cette étape, nous allons créer deux modèles SVM - l'un avec le tri en cas d'égalité désactivé et l'autre avec le tri en cas d'égalité activé. Nous allons utiliser la classe SVC de scikit-learn pour créer ces modèles. Le paramètre break_ties est défini sur False et True pour les deux modèles, respectivement.
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)
Création de la frontière de décision
Dans cette étape, nous allons créer la frontière de décision pour les deux modèles. Nous utiliserons la fonction predict pour prédire les classes pour les points de données d'échantillonnage et tracer la frontière de décision.
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]),
)
Tracer la frontière de décision
Dans cette étape, nous allons tracer la frontière de décision créée dans l'étape précédente. Nous utiliserons les attributs coef_ et intercept_ du modèle SVM pour tracer la frontière de décision.
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")
Afficher le graphique
Dans cette étape, nous allons afficher le graphique contenant la frontière de décision pour les deux modèles.
plt.show()
Sommaire
Ce laboratoire a illustré l'effet du tri en cas d'égalité dans l'algorithme SVM sur la frontière de décision. Nous avons créé deux modèles SVM - l'un avec le tri en cas d'égalité désactivé et l'autre avec le tri en cas d'égalité activé. Nous avons ensuite tracé la frontière de décision pour les deux modèles. La frontière de décision du modèle avec le tri en cas d'égalité activé était non convexe dans la zone où les classes étaient liées.