Alles zusammenführen
Zusätzlich zu der distanzbasierten Anomalieerkennungs-Pipeline aus der letzten Übung möchtest du auch eine merkmalsbasierte Variante mit One-Class SVM unterstützen. Du entscheidest dich, zwei Merkmale zu extrahieren: erstens die Länge des Strings und zweitens eine numerische Kodierung des ersten Buchstabens des Strings, gewonnen mit der in Kapitel 1 beschriebenen Funktion LabelEncoder(). Für einen fairen Vergleich gibst du die Ausreißer-Scores in eine AUC-Berechnung. Folgendes wurde importiert: LabelEncoder(), roc_auc_score() als auc() und OneClassSVM. Die Daten liegen als pandas-DataFrame proteins mit zwei Spalten, label und seq, und zwei Klassen, IMMUNE SYSTEM und VIRUS, vor. Ein trainierter LoF-Detektor ist als lof_detector verfügbar.
Diese Übung ist Teil des Kurses
Machine-Learning-Workflows in Python entwerfen
Anleitung zur Übung
- Für einen String
sgibtlen(s)seine Länge zurück. Wende das auf die Spalteseqan, um eine neue Spaltelenzu erhalten. - Für einen String
sliefertlist(s)eine Liste seiner Zeichen. Nutze das, um den ersten Buchstaben jeder Sequenz zu extrahieren, und kodiere ihn mitLabelEncoder(). - LoF-Scores stehen im Attribut
negative_outlier_factor_. Berechne daraus die AUC. - Trainiere eine One-Class SVM auf einem DataFrame mit nur den Spalten
lenundfirst. Extrahiere die Scores und bewerte sowohl die LoF-Scores als auch die SVM-Scores mit AUC.
Interaktive Übung
Vervollständige den Beispielcode, um diese Übung erfolgreich abzuschließen.
# Create a feature that contains the length of the string
proteins['len'] = proteins['seq'].apply(____)
# Create a feature encoding the first letter of the string
proteins['first'] = ____.____(
proteins['seq'].apply(____))
# Extract scores from the fitted LoF object, compute its AUC
scores_lof = lof_detector.____
print(____(proteins['label']==____, scores_lof))
# Fit a 1-class SVM, extract its scores, and compute its AUC
svm = ____.____(proteins[['len', 'first']])
scores_svm = svm.____(proteins[['len', 'first']])
print(____(proteins['label']==____, scores_svm))