LoslegenKostenlos loslegen

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

Kurs anzeigen

Anleitung zur Übung

  • Für einen String s gibt len(s) seine Länge zurück. Wende das auf die Spalte seq an, um eine neue Spalte len zu erhalten.
  • Für einen String s liefert list(s) eine Liste seiner Zeichen. Nutze das, um den ersten Buchstaben jeder Sequenz zu extrahieren, und kodiere ihn mit LabelEncoder().
  • LoF-Scores stehen im Attribut negative_outlier_factor_. Berechne daraus die AUC.
  • Trainiere eine One-Class SVM auf einem DataFrame mit nur den Spalten len und first. 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))
Code bearbeiten und ausführen