Alles samenbrengen
Naast de anomaly detection-pijplijn op basis van afstand die je in de vorige oefening hebt gemaakt, wil je ook een feature-based aanpak ondersteunen met een one-class SVM. Je besluit twee features te extraheren: ten eerste de lengte van de string, en ten tweede een numerieke codering van de eerste letter van de string, verkregen met de functie LabelEncoder() uit hoofdstuk 1. Om eerlijk te kunnen vergelijken, voer je de outlierscores in een AUC-berekening. Het volgende is geïmporteerd: LabelEncoder(), roc_auc_score() als auc() en OneClassSVM. De data is beschikbaar als een pandas-dataframe proteins met twee kolommen, label en seq, en twee klassen, IMMUNE SYSTEM en VIRUS. Een getrainde LoF-detector is beschikbaar als lof_detector.
Deze oefening maakt deel uit van de cursus
Machine Learning-workflows ontwerpen in Python
Oefeninstructies
- Voor een string
sgeeftlen(s)de lengte terug. Pas dat toe op de kolomseqom een nieuwe kolomlente verkrijgen. - Voor een string
sgeeftlist(s)een lijst van de karakters terug. Gebruik dit om de eerste letter van elke sequentie te extraheren en codeer die metLabelEncoder(). - LoF-scores staan in het attribuut
negative_outlier_factor_. Bereken daarvan de AUC. - Train een 1-class SVM op een dataframe met alleen
lenenfirstals kolommen. Haal de scores op en beoordeel zowel de LoF-scores als de SVM-scores met AUC.
Praktische interactieve oefening
Probeer deze oefening eens door deze voorbeeldcode in te vullen.
# 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))