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