Перетворення евристики на класифікатор
Вас здивувало, що евристики можуть бути такими корисними. Тож ви вирішили трактувати евристику «надто багато унікальних портів — це підозріло» як окремий класифікатор. Ви реалізуєте це, встановивши поріг за кількістю унікальних портів на джерело на рівні середнього значення для «поганих» вихідних комп'ютерів — тих, для яких мітка дорівнює 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, ____))