過学習とアンサンブル

Python による金融のための Machine Learning

Nathan George

Data Science Professor

過学習

Python による金融のための Machine Learning

モデルの簡略化

シンプルなネットワーク

Python による金融のための Machine Learning

ニューラルネットワークの対策

過学習への対策:

  • ノード数の削減
  • L1/L2正則化の使用
  • ドロップアウト
  • オートエンコーダ構造
  • 早期停止
  • データへのノイズ追加
  • 最大ノルム制約
  • アンサンブル
Python による金融のための Machine Learning

ドロップアウト

ドロップアウト

Python による金融のための Machine Learning

Kerasでのドロップアウト

from keras.layers import Dense, Dropout

model = Sequential() model.add(Dense(500, input_dim=scaled_train_features.shape[1], activation='relu')) model.add(Dropout(0.5)) model.add(Dense(100, activation='relu')) model.add(Dense(1, activation='linear'))
Python による金融のための Machine Learning

テストセットの比較

ドロップアウトなし(AMD)のR$^2$値:

  • 訓練:0.91
  • テスト:-0.72

ドロップアウトあり:

  • 訓練:0.46
  • テスト:-0.22
Python による金融のための Machine Learning

アンサンブル

ランダムフォレスト

Python による金融のための Machine Learning

アンサンブルの実装

# make predictions from 2 neural net models
test_pred1 = model_1.predict(scaled_test_features)
test_pred2 = model_2.predict(scaled_test_features)

# horizontally stack predictions and take the average across rows test_preds = np.mean(np.hstack((test_pred1, test_pred2)), axis=1)
Python による金融のための Machine Learning

アンサンブルの比較

モデル1のテストセットR$^2$スコア:

  • -0.179

モデル2:

  • -0.148

アンサンブル(予測値の平均):

  • -0.146
Python による金融のための Machine Learning

ドロップアウトとアンサンブル!

Python による金融のための Machine Learning

Preparing Video For Download...