ヒューリスティックを分類器にする
ヒューリスティックがここまで役立つことに驚いたあなたは、「ユニークなポート数が多すぎると不審」というヒューリスティック自体を、ひとつの分類器として扱ってみることにします。そのために、送信元ごとのユニークなポート数にしきい値を設けます。しきい値は、不正な送信元コンピュータ(ラベルが True のもの)が使用したユニークポート数の平均です。データセットはすでに読み込まれ、学習用とテスト用に分割済みで、X_train、X_test、y_train、y_test がメモリに用意されています。インポートには accuracy_score() と、numpy を np として含んでいます。念のため補足すると、この演習では scikit-learn の分類器を学習するのではなく、自分で分類ルールを明示的に定義します。
この演習はコースの一部です
Python で設計する Machine Learning ワークフロー
演習の手順
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, ____))