Mettere tutto insieme
Oltre alla pipeline di rilevamento anomalie basata sulle distanze che hai creato nell'esercizio precedente, vuoi supportarne anche una basata sulle feature con una one-class SVM. Decidi di estrarre due feature: primo, la lunghezza della stringa e, secondo, una codifica numerica della prima lettera della stringa, ottenuta usando la funzione LabelEncoder() descritta nel Capitolo 1. Per garantire un confronto equo, inserirai i punteggi di outlier in un calcolo di AUC. Sono già stati importati: LabelEncoder(), roc_auc_score() come auc() e OneClassSVM. I dati sono disponibili come pandas DataFrame chiamato proteins con due colonne, label e seq, e due classi, IMMUNE SYSTEM e VIRUS. Un rilevatore LoF già addestrato è disponibile come lof_detector.
Questo esercizio fa parte del corso
Progettare workflow di Machine Learning in Python
Istruzioni dell'esercizio
- Per una stringa
s,len(s)restituisce la sua lunghezza. Applicalo alla colonnaseqper ottenere una nuova colonnalen. - Per una stringa
s,list(s)restituisce l'elenco dei suoi caratteri. Usalo per estrarre la prima lettera di ciascuna sequenza e codificala usandoLabelEncoder(). - I punteggi LoF sono nell'attributo
negative_outlier_factor_. Calcolane l'AUC. - Addestra una 1-class SVM su un DataFrame con sole colonne
lenefirst. Estrai i punteggi e valuta sia i punteggi LoF sia quelli della SVM usando l'AUC.
Esercizio pratico interattivo
Prova a risolvere questo esercizio completando il codice di esempio.
# 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))