НачатьНачать бесплатно

Собираем всё вместе

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