始める無料で始める

ヒューリスティックを分類器にする

ヒューリスティックがここまで役立つことに驚いたあなたは、「ユニークなポート数が多すぎると不審」というヒューリスティック自体を、ひとつの分類器として扱ってみることにします。そのために、送信元ごとのユニークなポート数にしきい値を設けます。しきい値は、不正な送信元コンピュータ(ラベルが True のもの)が使用したユニークポート数の平均です。データセットはすでに読み込まれ、学習用とテスト用に分割済みで、X_trainX_testy_trainy_test がメモリに用意されています。インポートには accuracy_score() と、numpynp として含んでいます。念のため補足すると、この演習では scikit-learn の分類器を学習するのではなく、自分で分類ルールを明示的に定義します。

この演習はコースの一部です

Python で設計する Machine Learning ワークフロー

コースを見る

演習の手順

  • X_train から不正ホストだけを抽出して、新しいデータセット X_train_bad を作成します。y_train はブール配列である点に注意してください。
  • 不正ホストに対する unique_ports 列の平均を計算し、avg_bad_ports に保存します。
  • つぎに、unique_portsavg_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, ____))
コードを編集して実行