Einführung
In diesem Lab führen wir Sie durch ein Beispiel der Verwendung von One-Class SVM zur Neuerungsdetektion. One-Class SVM ist ein unüberwachtes Verfahren, das eine Entscheidungsfunktion zur Neuerungsdetektion lernt: neue Daten werden als ähnlich oder unterschiedlich zum Trainingsset klassifiziert.
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.
Importieren von erforderlichen Bibliotheken und Generieren von Daten
Der erste Schritt besteht darin, die erforderlichen Bibliotheken zu importieren und Daten zu generieren. Wir werden numpy und matplotlib verwenden, um Daten zu generieren und zu visualisieren, und scikit-learn, um das One-Class SVM-Modell zu erstellen.
import numpy as np
import matplotlib.pyplot as plt
from sklearn import svm
## Generiere Trainingsdaten
X = 0.3 * np.random.randn(100, 2)
X_train = np.r_[X + 2, X - 2]
## Generiere einige reguläre neuartige Beobachtungen
X = 0.3 * np.random.randn(20, 2)
X_test = np.r_[X + 2, X - 2]
## Generiere einige abnorme neuartige Beobachtungen
X_outliers = np.random.uniform(low=-4, high=4, size=(20, 2))
Anpassen des One-Class SVM-Modells
Als nächstes werden wir das One-Class SVM-Modell an den generierten Daten anpassen.
## Anpassen des Modells
clf = svm.OneClassSVM(nu=0.1, kernel="rbf", gamma=0.1)
clf.fit(X_train)
## Vorhersagen der Labels für die Trainingsdaten, die regulären neuartigen Beobachtungen und die abnormen neuartigen Beobachtungen
y_pred_train = clf.predict(X_train)
y_pred_test = clf.predict(X_test)
y_pred_outliers = clf.predict(X_outliers)
Berechne die Anzahl der Fehler
Wir werden die Anzahl der Fehler berechnen, die das Modell bei den Trainingsdaten, den regulären neuartigen Beobachtungen und den abnormen neuartigen Beobachtungen macht.
## Zähle die Anzahl der Fehler
n_error_train = y_pred_train[y_pred_train == -1].size
n_error_test = y_pred_test[y_pred_test == -1].size
n_error_outliers = y_pred_outliers[y_pred_outliers == 1].size
Visualisiere die Ergebnisse
Schließlich werden wir die Ergebnisse des One-Class SVM-Modells visualisieren. Wir werden die Entscheidungsgrenze, die Trainingsdaten, die regulären neuartigen Beobachtungen und die abnormen neuartigen Beobachtungen plotten.
## Visualisiere die Ergebnisse
xx, yy = np.meshgrid(np.linspace(-5, 5, 500), np.linspace(-5, 5, 500))
Z = clf.decision_function(np.c_[xx.ravel(), yy.ravel()])
Z = Z.reshape(xx.shape)
plt.title("Novelty Detection")
plt.contourf(xx, yy, Z, levels=np.linspace(Z.min(), 0, 7), cmap=plt.cm.PuBu)
a = plt.contour(xx, yy, Z, levels=[0], linewidths=2, colors="darkred")
plt.contourf(xx, yy, Z, levels=[0, Z.max()], colors="palevioletred")
s = 40
b1 = plt.scatter(X_train[:, 0], X_train[:, 1], c="white", s=s, edgecolors="k")
b2 = plt.scatter(X_test[:, 0], X_test[:, 1], c="blueviolet", s=s, edgecolors="k")
c = plt.scatter(X_outliers[:, 0], X_outliers[:, 1], c="gold", s=s, edgecolors="k")
plt.axis("tight")
plt.xlim((-5, 5))
plt.ylim((-5, 5))
plt.legend(
[a.collections[0], b1, b2, c],
[
"learned frontier",
"training observations",
"new regular observations",
"new abnormal observations",
],
loc="upper left",
prop=matplotlib.font_manager.FontProperties(size=11),
)
plt.xlabel(
"error train: %d/200 ; errors novel regular: %d/40 ; errors novel abnormal: %d/40"
% (n_error_train, n_error_test, n_error_outliers)
)
plt.show()
Zusammenfassung
In diesem Lab haben wir gelernt, wie man One-Class SVM zur Novelty Detection verwendet. Wir haben Daten generiert, das One-Class SVM-Modell angepasst, die Anzahl der Fehler berechnet und die Ergebnisse visualisiert. One-Class SVM ist ein nützliches Algorithmus zur Detektion von Anomalien in Daten und kann auf eine Vielzahl von Anwendungen angewendet werden.