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
Instructions
- Pour une chaîne
s,len(s)renvoie sa longueur. Appliquez cela à la colonneseqpour obtenir une nouvelle colonnelen. - 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 avecLabelEncoder(). - 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
lenetfirst. 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))