IniziaInizia gratis

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

Visualizza il corso

Istruzioni dell'esercizio

  • Per una stringa s, len(s) restituisce la sua lunghezza. Applicalo alla colonna seq per ottenere una nuova colonna len.
  • Per una stringa s, list(s) restituisce l'elenco dei suoi caratteri. Usalo per estrarre la prima lettera di ciascuna sequenza e codificala usando LabelEncoder().
  • I punteggi LoF sono nell'attributo negative_outlier_factor_. Calcolane l'AUC.
  • Addestra una 1-class SVM su un DataFrame con sole colonne len e first. 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))
Modifica ed esegui il codice