Збираємо все докупи
На додачу до конвеєра виявлення аномалій на основі відстаней, який ви створили у попередній вправі, ви також хочете підтримати підхід навчання за ознаками з одно-класовим SVM. Ви вирішуєте видобути дві ознаки: по-перше, довжину рядка, а по-друге — числове кодування першої літери рядка, отримане за допомогою функції LabelEncoder(), описаної в Розділі 1. Щоб забезпечити коректне порівняння, ви передасте оцінки викидів до обчислення AUC. Імпортовано таке: LabelEncoder(), roc_auc_score() як auc() і OneClassSVM. Дані доступні як датафрейм pandas під назвою proteins з двома стовпцями — label і seq — та двома класами: IMMUNE SYSTEM і VIRUS. Навчений детектор LoF доступний як lof_detector.
Ця вправа є частиною курсу
Проєктування робочих процесів машинного навчання в Python
Інструкції до вправи
- Для рядка
sвиразlen(s)повертає його довжину. Застосуйте це до стовпцяseq, щоб отримати новий стовпецьlen. - Для рядка
sвиразlist(s)повертає список його символів. Скористайтеся цим, щоб видобути першу літеру кожної послідовності та закодувати її за допомогоюLabelEncoder(). - Оцінки LoF містяться в атрибуті
negative_outlier_factor_. Обчисліть їхній AUC. - Навчіть одно-класовий SVM на датафреймі, який містить лише стовпці
lenіfirst. Видобудьте оцінки та оцініть як оцінки LoF, так і оцінки SVM за допомогою AUC.
Інтерактивна практична вправа
Спробуйте виконати цю вправу, доповнивши цей зразок коду.
# 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))