Превращаем эвристику в классификатор
Вы удивлены тем, насколько полезными могут быть эвристики. Поэтому вы решаете использовать эвристику «слишком много уникальных портов — подозрительный признак» как самостоятельный классификатор. Для этого вы определяете пороговое значение количества уникальных портов на источник, равное среднему числу портов у «плохих» исходных компьютеров — то есть тех, для которых метка равна True. Набор данных уже загружен и разбит на обучающую и тестовую части: в памяти доступны объекты X_train, X_test, y_train и y_test. Импорты включают accuracy_score() и numpy как np. Обратите внимание: в этом упражнении вы не будете обучать классификатор из scikit-learn — вместо этого вы явно определите собственное правило классификации!
Это упражнение является частью курса
Проектирование рабочих процессов машинного обучения на Python
Инструкции к упражнению
- Выберите из
X_trainвсе плохие хосты и сформируйте новый набор данныхX_train_bad. Учтите, чтоy_train— это булев массив. - Вычислите среднее значение столбца
unique_portsдля плохих хостов и сохраните его в переменнуюavg_bad_ports. - Теперь рассмотрите классификатор, который предсказывает положительный класс для каждого примера, у которого
unique_portsпревышаетavg_bad_ports. Сохраните предсказания этого классификатора на тестовых данных в новую переменнуюpred_port. - Вычислите точность этого классификатора на тестовых данных с помощью
accuracy_score().
Интерактивное практическое упражнение
Попробуйте выполнить это упражнение, дополнив этот пример кода.
# Create a new dataset X_train_bad by subselecting bad hosts
X_train_bad = ____[____]
# Calculate the average of unique_ports in bad examples
avg_bad_ports = np.____(____['unique_ports'])
# Label as positive sources that use more ports than that
pred_port = ____['unique_ports'] > ____
# Print the accuracy of the heuristic
print(____(y_test, ____))