Einführung
In diesem Lab werden wir lernen, wie Support Vector Machines (SVM) für unbalancierte Klassen verwendet werden. Wir werden zunächst die Trennebene mit einer einfachen SVM finden und anschließend die getrennte Hyperebene (gestrichelt) mit automatischer Korrektur für unbalancierte Klassen plotten. Wir werden die make_blobs-Funktion verwenden, um zwei Cluster von zufälligen Punkten zu erstellen.
Tipps für die VM
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 nutzen.
Manchmal müssen Sie einige Sekunden warten, bis Jupyter Notebook vollständig geladen ist. Die Validierung von Vorgängen kann aufgrund von Einschränkungen in Jupyter Notebook nicht automatisiert werden.
Wenn Sie bei der Lernphase Probleme haben, können Sie Labby gerne fragen. Geben Sie nach der Sitzung Feedback, und wir werden das Problem für Sie prompt beheben.
Bibliotheken importieren
Wir beginnen mit dem Import der erforderlichen Bibliotheken für das Lab: matplotlib.pyplot, svm, make_blobs und DecisionBoundaryDisplay.
import matplotlib.pyplot as plt
from sklearn import svm
from sklearn.datasets import make_blobs
from sklearn.inspection import DecisionBoundaryDisplay
Daten erstellen
Wir werden zwei Cluster von zufälligen Punkten mit der make_blobs-Funktion erstellen. Wir werden einen Cluster mit 1000 Punkten und einen anderen mit 100 Punkten erstellen. Die Mittelpunkte der Cluster werden jeweils [0.0, 0.0] und [2.0, 2.0] sein. Der Parameter clusters_std steuert die Standardabweichung der Cluster.
n_samples_1 = 1000
n_samples_2 = 100
centers = [[0.0, 0.0], [2.0, 2.0]]
clusters_std = [1.5, 0.5]
X, y = make_blobs(
n_samples=[n_samples_1, n_samples_2],
centers=centers,
cluster_std=clusters_std,
random_state=0,
shuffle=False,
)
Modell anpassen
Wir werden das Modell anpassen und die getrennte Hyperebene mit der SVC-Funktion aus der svm-Bibliothek erhalten. Wir werden einen linearen Kernel verwenden und C auf 1.0 setzen.
clf = svm.SVC(kernel="linear", C=1.0)
clf.fit(X, y)
Modell mit gewichteten Klassen anpassen
Wir werden das Modell anpassen und die getrennte Hyperebene mit der SVC-Funktion aus der svm-Bibliothek erhalten. Wir werden einen linearen Kernel verwenden und class_weight auf {1: 10} setzen. Dadurch wird der kleineren Klasse mehr Gewicht verliehen.
wclf = svm.SVC(kernel="linear", class_weight={1: 10})
wclf.fit(X, y)
Die Proben plotten
Wir werden die Proben mit der scatter-Funktion aus matplotlib.pyplot plotten.
plt.scatter(X[:, 0], X[:, 1], c=y, cmap=plt.cm.Paired, edgecolors="k")
Die Entscheidungsfunktionen beider Klassifizierer plotten
Wir werden die Entscheidungsfunktionen beider Klassifizierer mit der DecisionBoundaryDisplay-Funktion aus der sklearn.inspection-Bibliothek plotten. Wir werden plot_method auf "contour" setzen, colors auf "k" für den einfachen SVM und "r" für den gewichteten SVM, levels auf [0], alpha auf 0.5 und linestyles auf ["-"]. Wir werden auch ax auf plt.gca() setzen.
ax = plt.gca()
disp = DecisionBoundaryDisplay.from_estimator(
clf,
X,
plot_method="contour",
colors="k",
levels=[0],
alpha=0.5,
linestyles=["-"],
ax=ax,
)
wdisp = DecisionBoundaryDisplay.from_estimator(
wclf,
X,
plot_method="contour",
colors="r",
levels=[0],
alpha=0.5,
linestyles=["-"],
ax=ax,
)
Legende hinzufügen
Wir werden der Grafik eine Legende hinzufügen, indem wir die legend-Funktion aus matplotlib.pyplot verwenden. Wir werden die Beschriftungen auf "nicht gewichtet" und "gewichtet" setzen.
plt.legend(
[disp.surface_.collections[0], wdisp.surface_.collections[0]],
["non weighted", "weighted"],
loc="upper right",
)
Zeige den Plot an
Schließlich werden wir den Plot mit der show-Funktion aus matplotlib.pyplot anzeigen.
plt.show()
Zusammenfassung
In diesem Lab haben wir gelernt, wie man Support Vector Machines (SVM) für unausgewogene Klassen verwendet. Wir haben die make_blobs-Funktion verwendet, um zwei Cluster von zufälligen Punkten zu erstellen, und zwei SVM-Modelle erstellt, eines mit einfachem SVM und einem anderen mit automatischer Korrektur für unausgewogene Klassen. Wir haben die Proben und die Entscheidungsfunktionen für beide Klassifizierer geplottet und der Grafik eine Legende hinzugefügt.