Собираем всё вместе
В дополнение к конвейеру обнаружения аномалий на основе расстояний, созданному в предыдущем упражнении, вы хотите также добавить конвейер на основе признаков с одноклассовым 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))