Kontamination, noch einmal
Du stellst fest, dass der One-Class SVM keinen contamination-Parameter hat. Mittlerweile weißt du aber, dass du eine Möglichkeit brauchst, den Anteil der als Novitäten gelabelten Beispiele zu steuern, um deine False-Positive-Rate zu kontrollieren. Also entscheidest du dich, mit einem Schwellenwert auf den Scores zu experimentieren. Der Detektor wurde als onesvm importiert; außerdem stehen dir die Daten X_train, X_test, y_train, y_test, numpy als np sowie confusion_matrix() zur Verfügung.
Diese Übung ist Teil des Kurses
Machine-Learning-Workflows in Python entwerfen
Anleitung zur Übung
- Trainiere die 1-Class SVM und bewerte die Testdaten.
- Berechne den beobachteten Anteil an Ausreißern in den Testdaten.
- Nutze
np.quantile(), um den Schwellenwert der Scores so zu bestimmen, dass genau dieser Anteil erreicht wird. - Verwende diesen Schwellenwert, um die Testdaten zu labeln. Gib die Confusion-Matrix aus.
Interaktive Übung
Vervollständige den Beispielcode, um diese Übung erfolgreich abzuschließen.
# Fit a one-class SVM detector and score the test data
nov_det = ____(X_train)
scores = ____(X_test)
# Find the observed proportion of outliers in the test data
prop = np.____(y_test==____)
# Compute the appropriate threshold
threshold = np.____(____, ____)
# Print the confusion matrix for the thresholded scores
print(confusion_matrix(y_test, ____ > ____))