Totul laolaltă
Pe lângă pipeline-ul de detectare a anomaliilor bazat pe învățare după distanță, creat în exercițiul anterior, vrei să adaugi și unul bazat pe învățare după caracteristici, folosind un SVM cu o singură clasă. Decizi să extragi două caracteristici: lungimea șirului de caractere și o codificare numerică a primei litere din șir, obținută cu funcția LabelEncoder() descrisă în Capitolul 1. Pentru o comparație corectă, vei introduce scorurile de outlieri într-un calcul AUC. Au fost importate: LabelEncoder(), roc_auc_score() ca auc() și OneClassSVM. Datele sunt disponibile ca un DataFrame pandas numit proteins, cu două coloane, label și seq, și două clase: IMMUNE SYSTEM și VIRUS. Un detector LoF antrenat este disponibil ca lof_detector.
Acest exercițiu face parte din cursul
Proiectarea fluxurilor de lucru pentru Machine Learning în Python
Instrucțiuni pentru exercițiu
- Pentru un șir de caractere
s,len(s)returnează lungimea acestuia. Aplică această funcție pe coloanaseqpentru a obține o nouă coloanălen. - Pentru un șir de caractere
s,list(s)returnează o listă cu caracterele sale. Folosește aceasta pentru a extrage prima literă a fiecărei secvențe și codific-o cuLabelEncoder(). - Scorurile LoF se află în atributul
negative_outlier_factor_. Calculează AUC-ul acestora. - Antrenează un SVM cu o singură clasă pe un DataFrame care conține doar coloanele
lenșifirst. Extrage scorurile și evaluează atât scorurile LoF, cât și scorurile SVM folosind AUC.
Exercițiu interactiv practic
Încearcă acest exercițiu completând acest cod de exemplu.
# 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))