始める無料で始める

グループ化データでの特徴量エンジニアリング

前の演習を発展させ、追加の特徴量として「各送信元コンピュータで使用されたプロトコルの一意数」を考えます。グループ化されたデータでは、このように特徴量を作ることが常に可能です。出発点として、すべてのカテゴリ列には一意要素数を、すべての数値列には平均を取る、といった方法が使えます。これまでと同様に、flows は読み込み済みで、精度評価のための cross_val_score()AdaBoostClassifier()pandaspdnumpynp として利用できます。

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

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

コースを見る

演習の手順

  • 提供されたグループイテレータに lambda 関数を適用し、各送信元コンピュータで使用されたプロトコルの一意数を計算します。protocol 列を一意値の集合にするには set() を使えます。
  • インデックスを指定し、列名を protocol にして、結果を正しい形状のデータフレームに変換します。
  • 新しいデータフレームを、既存の X として利用可能なものに連結します。
  • cross_val_score() を使って、この新しいデータセットに対する AdaBoostClassifier() の精度を評価します。

実践的なインタラクティブ演習

このサンプルコードを完成させて、この演習に挑戦してみましょう。

# Create a feature counting unique protocols per source
protocols = flows.groupby('source_computer').apply(
  lambda df: ____)

# Convert this feature into a dataframe, naming the column
protocols_DF = pd.DataFrame(
  protocols, index=____, columns=____)

# Now concatenate this feature with the previous dataset, X
X_more = pd.concat([X, ____], axis=____)

# Refit the classifier and report its accuracy
print(____(____(
  AdaBoostClassifier(), ____, y)))
コードを編集して実行