特徴量エンジニアリングと選択

End-to-End Machine Learning

Joshua Stapleton

Machine Learning Engineer

特徴量エンジニアリング

特徴量の作成

  • 問題を単純化
  • モデル効率を向上

手法

  • 既存特徴量を加工
  • 新しい特徴量を設計

利点

  • デプロイ・保守・学習が容易
  • 解釈性の向上

機械学習ライフサイクルの現在の段階: 特徴量エンジニアリング

End-to-End Machine Learning

正規化

  • 数値特徴量を[0, 1]にスケーリング
  • 特徴量の尺度/範囲が異なるときに有効
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import Normalizer

# データ分割
X_train, X_test = train_test_split(df, test_size=0.2, random_state=42)
# Normalizer を作成し、学習データで fit、正規化し、テストに適用
norm = Normalizer()
X_train_norm = norm.fit_transform(X_train)
X_test_norm = norm.transform(X_test)
End-to-End Machine Learning

標準化

  • 平均=0、分散=1にスケーリング
  • 同程度の平均・分散を仮定するアルゴリズムで有効
from sklearn.preprocessing import StandardScaler

# データ分割
X_train, X_test = train_test_split(df, test_size=0.2, random_state=42)
# スケーラを作成し、学習データで標準化
sc = StandardScaler()
X_train_stzd = sc.fit_transform(X_train)
# テストデータは transform のみ
X_test_stzd = sc.transform(X_test)
End-to-End Machine Learning

良い特徴量とは?

  • 関連する特徴量を使う
  • 受診日の天気は診断に無関係

 

特徴量選択における関連性の原則を示す荒天の写真

  • 互いに非類似(直交)な特徴量を使う
  • 月齢と年齢(年)の両方は有益ではない

 

特徴量選択における直交性の原則を示す図

End-to-End Machine Learning

sklearn.feature_selection

 

from sklearn.ensemble import RandomForestClassifier
from sklearn.feature_selection import SelectFromModel
from sklearn.model_selection import train_test_split

# データ漏えいを避けるため、まず学習・テストに分割 X_train, X_test, y_train, y_test = train_test_split( heart_disease_df_X, heart_disease_df_y, test_size=0.2, random_state=42)
End-to-End Machine Learning

sklearn.feature_selection(続き)

 

# ランダムフォレストを定義して学習
rf = RandomForestClassifier(n_jobs=-1, class_weight='balanced', max_depth=5)
rf.fit(X_train, y_train)

# 特徴量選択を定義して実行 model = SelectFromModel(rf, prefit=True) features_bool = model.get_support() features = heart_disease_df.columns[features_bool]
End-to-End Machine Learning

Ayo berlatih!

End-to-End Machine Learning

Preparing Video For Download...