SVM Tie Breaking

Machine LearningMachine LearningBeginner
Jetzt üben

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

💡 Dieser Artikel wurde von AI-Assistenten übersetzt. Um die englische Version anzuzeigen, können Sie hier klicken

Einführung

In diesem Lab wird das SVM-Tie-Breaking und seine Auswirkungen auf die Entscheidungsgrenze vorgestellt. Im SVM ist das Tie-Breaking der Mechanismus, der verwendet wird, um Konflikte zwischen zwei oder mehr Klassen zu lösen, wenn ihre Distanzen gleich sind. Es ist standardmäßig nicht aktiviert, wenn decision_function_shape='ovr', da dies aufwendig ist. Daher zeigt dieses Lab die Auswirkungen des Parameters break_ties für ein Mehrklassenklassifizierungsproblem und decision_function_shape='ovr'.

VM-Tipps

Nachdem der VM-Start abgeschlossen ist, klicken Sie in der oberen linken Ecke, um zur Registerkarte Notebook zu wechseln und Jupyter Notebook für die Übung zu öffnen.

Manchmal müssen Sie einige Sekunden warten, bis Jupyter Notebook vollständig geladen ist. Die Validierung von Vorgängen kann aufgrund der Einschränkungen in Jupyter Notebook nicht automatisiert werden.

Wenn Sie während des Lernens Probleme haben, können Sie Labby gerne fragen. Geben Sie nach der Sitzung Feedback, und wir werden das Problem für Sie prompt beheben.


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL sklearn(("Sklearn")) -.-> sklearn/UtilitiesandDatasetsGroup(["Utilities and Datasets"]) ml(("Machine Learning")) -.-> ml/FrameworkandSoftwareGroup(["Framework and Software"]) sklearn(("Sklearn")) -.-> sklearn/CoreModelsandAlgorithmsGroup(["Core Models and Algorithms"]) sklearn/CoreModelsandAlgorithmsGroup -.-> sklearn/svm("Support Vector Machines") sklearn/UtilitiesandDatasetsGroup -.-> sklearn/datasets("Datasets") ml/FrameworkandSoftwareGroup -.-> ml/sklearn("scikit-learn") subgraph Lab Skills sklearn/svm -.-> lab-49312{{"SVM Tie Breaking"}} sklearn/datasets -.-> lab-49312{{"SVM Tie Breaking"}} ml/sklearn -.-> lab-49312{{"SVM Tie Breaking"}} end

Importieren der erforderlichen Bibliotheken

In diesem Schritt importieren wir die erforderlichen Bibliotheken für SVM und Visualisierung.

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

Erstellen von Beispiel-Daten

In diesem Schritt erstellen wir einen Beispiel-Datensatz mit der Funktion make_blobs aus scikit-learn. Dieser Datensatz enthält 3 Klassen und 2 Merkmale.

X, y = make_blobs(random_state=27)

Erstellen von SVM-Modellen mit und ohne Tie-Breaking

In diesem Schritt erstellen wir zwei SVM-Modelle - eines mit deaktiviertem Tie-Breaking und eines mit aktiviertem Tie-Breaking. Wir verwenden die Klasse SVC aus scikit-learn, um diese Modelle zu erstellen. Der Parameter break_ties wird für die beiden Modelle auf False und True festgelegt.

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)

Erstellen der Entscheidungsgrenze

In diesem Schritt erstellen wir die Entscheidungsgrenze für die beiden Modelle. Wir verwenden die predict-Funktion, um die Klassen für die Beispiel-Datenpunkte vorherzusagen und die Entscheidungsgrenze zu plotten.

    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]),
    )

Plotten der Entscheidungsgrenze

In diesem Schritt werden wir die in dem vorherigen Schritt erstellte Entscheidungsgrenze plotten. Wir werden die Attribute coef_ und intercept_ des SVM-Modells verwenden, um die Entscheidungsgrenze zu plotten.

    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")

Zeige das Diagramm an

In diesem Schritt werden wir das Diagramm anzeigen, das die Entscheidungsgrenze für beide Modelle enthält.

plt.show()

Zusammenfassung

In diesem Lab wurde der Effekt von SVM-Tie-Breaking auf die Entscheidungsgrenze veranschaulicht. Wir haben zwei SVM-Modelle erstellt - eines mit deaktiviertem Tie-Breaking und eines mit aktiviertem Tie-Breaking. Anschließend haben wir die Entscheidungsgrenze für beide Modelle geplottet. Die Entscheidungsgrenze für das Modell mit aktiviertem Tie-Breaking war in der Bereich, in dem die Klassen gleich standen, nicht konvex.