平均・加重平均・ランク平均・blending
最も手軽なアンサンブルである各種平均と blending の使い分けと、重みの決め方を学びます。
単純平均#
最もシンプルなアンサンブルは、複数モデルの予測の単純平均です。実装が容易で過学習しにくいのが利点です。
import numpy as np
pred = (pred_lgbm + pred_xgb + pred_linear) / 3加重平均#
モデルの強さに応じて重みを変えます。重みは 交差検証 の OOF 予測で決めると過学習しにくくなります。
# OOF でスコアが最大になる重みを探索(簡易グリッド)
best = None
for w1 in np.linspace(0, 1, 21):
for w2 in np.linspace(0, 1 - w1, 21):
w3 = 1 - w1 - w2
blend = w1 * oof_lgbm + w2 * oof_xgb + w3 * oof_linear
score = roc_auc_score(y, blend)
if best is None or score > best[0]:
best = (score, (w1, w2, w3))注意
重みは必ず OOF(検証側) で最適化します。テストの Public LB を見ながら重みを合わせ込むと、 LB へ過学習してシェイクアップを招きます。
ランク平均#
評価指標が AUC のように順位で決まる場合、確率の平均より順位の平均が有効なことがあります。 スケールの異なるモデル出力をそろえる効果もあります。
from scipy.stats import rankdata
rank = (rankdata(pred_lgbm) + rankdata(pred_xgb)) / 2blending とは#
ここまでの「予測値を後段で混ぜる」手法を総称して ブレンディング と呼びます。 学習済みモデルの出力だけを使うため手軽で、コンペ終盤の定番です。
ヒント
まずは単純平均から試し、OOF で改善するなら加重・ランク平均へ。指標が順位ベースなら ランク平均、確率の質が重要なら確率平均、と評価指標に合わせて選びます。
理解度チェック#
次のステップ#
次は、より強力な stacking(out-of-fold 予測をメタモデルで統合)を学びます。