こんばんは。今日は、機械学習に関する疑問に答える記事を書きたいと思います。
疑問
交差検証を行ったあと、どのように最終モデルを決定すればよいか?
以下はk-分割交差検証 (k=5)の場合のイメージですが、あるアルゴリズムに対して5つのモデルを作って精度を検証するわけですが、その後予測を行っていく際には、何を最終モデルとすればよいのか、という疑問です。
(ちなみに、この疑問は機械学習初心者にありがちな質問、と以下のブログで紹介されております笑)
調べて分かったこと
*以下、私の解釈が誤っている部分があるかもしれませんので、気付いた方いらっしゃいましたらコメント等でご指摘いただけますと幸いです。
ネットをいろいろと調べてみると、2つの意見が見つかりました。
- 全ての学習データを使って学習しなおしたモデルを最終モデルとする
- k分割交差検証で作った各モデルで予測を行い、その結果を平均する
前者の主張としては、
- 交差検証はあくまで”検証”のための手法であって、モデルをつくる手法ではない。
- 交差検証で算出した評価値は複数アルゴリズム間(あるいはハイパラ)でベストなものを選択することには活用するが、そのアルゴリズムで予測を行う際には、より多くのデータで学習できていた方が好ましいため、すべてのデータを使って再学習すべし。
ということでした。
後者の主張としては、以下のようなものがありました。
- 複数のモデルを平均(アンサンブル)することでBaggingの効果が得られて精度が安定する
https://stackoverflow.com/questions/46860325/k-fold-cross-validation-model-selection-method
特に1つめのリンクの議論が非常に活発なようだったので、是非見てみていただくと良いかともいます。
私が議論を見ていた限りだと、前者の全データで学習しなおす方法の主張の方が多いように見えましたが、その中でも後者の方法を完全に否定している意見は見つけることができませんでした。
特に以下のブログを見ると、「気になるならアンサンブルするのもあり」とも書かれているので、手法の目的からすると前者の方法で最終モデルを構築すべきだけど、後者の方法で工夫しても悪いことはない、というように読み取れました。
ただしこのブログでは、そういった場合はK-Foldの各モデルのアンサンブルではなく、ランダムシードを変えて全データ学習を繰り返す、といったことを書いていたので、確かにそちらの方が学習データ量が多いモデルのアンサンブルができてよさそうだとも思いました。
これはKaggleなどでもよくつかわれている「ランダムシードアベレージ」という技法ですね。
なるほど、大変勉強になりました。
同じ疑問を持たれている方の参考になりましたら幸いです。また、参考になった、という方は下の「いいね」ボタンをポチって頂けると励みになります!
おしまい
コメントを残す