この質問は、相互検証の背後にある理論に関連していると思います。ここに私の経験的発見を示し、そこで交差検証の理論に関連する質問を書きました。
2つのモデルM1とM2があります。同じデータセットを使用してそれらをトレーニングし、同じデータセットを使用して交差検証を実行して、各モデルの最適なパラメーターを見つけます。最終的に、最適パラメーターの下でのM1は、10倍の交差検証スコアの点で、最適パラメーターの下でのM2よりもパフォーマンスが良いことがわかりました。次に、予測子とラベルの両方を含む別の独立したテストデータセットがあり、このテストデータセットがトレーニングデータセットの同じ分布から生成された場合、これらの2つの十分に調整されたモデルをその新しいテストデータセットに適用する前に、主張したり、新しいテストデータセットよりもM1の方がM2よりもパフォーマンスが優れていることを期待できますか?
私はカグルタイタニックの例を演奏していました。2つのxgboostモデルがあり、M1は十分にチューニングされており、M1はトレーニングデータセットに対して10倍の交差検証を実行するという点であまりチューニングされていません。しかし、両方を送信すると、調整が不十分なモデルの方が実際にテストデータセットのスコアが優れていることがわかりました。それはどうでしょうか?そして、それが真実である場合、データを異なるモデルに適合させ、モデルパラメータを調整するときに何を探す必要がありますか?
これが私の具体的な提出結果です:ランダムグリッド検索を行いました
params_fixed = {'silent': 1,'base_score': 0.5,'reg_lambda': 1,
'max_delta_step': 0,'scale_pos_weight':1,'nthread': 4,
'objective': 'binary:logistic'}
params_grid = {'max_depth': list(np.arange(1,10)),
'gamma': [0,0.05,0.1,0.3, 0.5,0.7,0.9],
'n_estimators':[1,2,5,7,10,15,19,25,30,50],
'learning_rate': [0.01,0.03,0.05,0.1,0.3,0.5,0.7,0.9,1],
'subsample': [0.5,0.7,0.9], 'colsample_bytree': [0.5,0.7,0.9],
'min_child_weight': [1,2,3,5], 'reg_alpha': [1e-5, 1e-2, 0.1, 0.5,1,10]
}
rs_grid = RandomizedSearchCV(
estimator=XGBClassifier(**params_fixed, seed=seed),
param_distributions=params_grid,
n_iter=5000,
cv=10,
scoring='accuracy',
random_state=seed
)
変数を変更するたびにn_iter
。まず、を設定しますn_iter=10
。これにより、これらのハイパーパラメーターの値のセットが得られます。このベクトルをと呼び、cvスコア(精度率)が0.83389の場合、を使用してモデルをトレーニングし、独立したテストで予測を生成しますデータセット、およびKaggleに送信すると、テストデータセット0.79426で真の精度が生成されますα 1
次に、を設定するとn_iter=100
、が得られ、cvスコアは0.83614、つまり最初のスコアよりも高くなりますが、Kaggleに送信すると0.78469となり、最初のスコアよりも低くなります。
3番目に、を設定するとn_iter = 1000
、が得られ、cvスコアは0.83951、つまり2番目のスコアよりも高くなりますが、Kaggleに送信すると0.77990 が2番目のスコアよりも低くなります。
4番目に、を設定するとn_iter = 5000
、が得られ、cvスコアは0.84512、つまり3番目のスコアよりも高くなりますが、Kaggleに送信すると0.72249 が3番目のスコアよりも低くなります。
これは本当にイライラしています。モデルは交差検証スコアでどんどん良くなっていますが、実際の独立したデータセットで実行すると、そのパフォーマンスはどんどん悪化しています。CVスコアを正確に逆に解釈しましたか?CVスコアが真のテストスコアを推測するには楽観的すぎる可能性があると述べた論文がいくつかあります。しかし、それが真実であっても、私の4つのモデルすべてのCVスコアは、それら自身の真のテストスコアについてすべて楽観的である必要があります。しかし、実際のテストデータセットに適用すると、順序が逆になります。
私が想像できる唯一の理由は、テストデータセットがトレーニングデータセットとは異なる分布を持っていることです。しかし、もしそうだとすれば、太陽の下でこの問題を解決できる方法はないと思います。