Mettre le tout ensemble
En plus du pipeline de détection d'anomalies basé sur la distance que vous avez créé au dernier exercice, vous souhaitez aussi prendre en charge une approche basée sur des 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 et, ensuite, 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 assurer une comparaison équitable, vous transmettrez les scores d'éléments aberrants à 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 dans une trame de données pandas appelée 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.
Cette activité fait partie du cours
Concevoir des flux de travail Machine Learning en Python
Instructions de l’exercice
- Pour une chaîne
s,len(s)retourne sa longueur. Appliquez cela à la colonneseqpour obtenir une nouvelle colonnelen. - Pour une chaîne
s,list(s)retourne la liste de ses caractères. Servez-vous-en 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 une trame de données ne contenant que les colonnes
lenetfirst. Extrayez les scores et évaluez à la fois les scores du LoF et ceux du SVM à l'aide de l'AUC.
Exercice interactif pratique
Essayez cet exercice en complétant ce code d’exemple.
# 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))