CommencerCommencer gratuitement

Tout rassembler

En plus du pipeline de détection d’anomalies par apprentissage à base de distances que vous avez créé dans le précédent exercice, vous souhaitez également prendre en charge une approche à base de caractéristiques avec un SVM à une classe. Vous décidez d’extraire deux caractéristiques : d’abord, la longueur de la chaîne de caractères, puis un encodage numérique de la première lettre de la chaîne, obtenu à l’aide de la fonction LabelEncoder() décrite au chapitre 1. Pour garantir une comparaison équitable, vous transmettrez les scores d’outliers à un calcul d’AUC. Les éléments suivants ont été importés : LabelEncoder(), roc_auc_score() sous le nom auc() et OneClassSVM. Les données sont disponibles sous la forme d’un data frame pandas appelé proteins avec deux colonnes, label et seq, et deux classes, IMMUNE SYSTEM et VIRUS. Un détecteur LoF entraîné est disponible sous le nom lof_detector.

Cet exercice fait partie du cours

Concevoir des workflows de Machine Learning en Python

Afficher le cours

Instructions

  • Pour une chaîne s, len(s) renvoie sa longueur. Appliquez cela à la colonne seq pour obtenir une nouvelle colonne len.
  • Pour une chaîne s, list(s) renvoie la liste de ses caractères. Utilisez-la pour extraire la première lettre de chaque séquence, puis encodez-la avec LabelEncoder().
  • Les scores LoF se trouvent dans l’attribut negative_outlier_factor_. Calculez leur AUC.
  • Entraînez un SVM à une classe sur un data frame ne contenant que les colonnes len et first. Extrayez les scores et évaluez à la fois les scores LoF et les scores SVM à l’aide de l’AUC.

Exercice interactif pratique

Essayez cet exercice en complétant cet exemple de code.

# 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))
Modifier et exécuter le code