GroupKFoldを使う理由
なんで書いたのか
upuraさんblog記事やscikit-learnのドキュメントを読んでもどういう場合に使えばよいかわからなかったから
上の内容を受けて、upuraさんblog記事に付随されていたリンク、iwiwiさんのスライドや動画を見てなぜ使うのかを調べた内容をまとめる
iwiwiさんのスライドや動画での説明
https://www.youtube.com/watch?v=7389fOxgBz8&feature=youtu.be
11:00 - 12:00あたりの説明
Kaggle - state-farm-distracted-driver-detectioに参加した際の話
ドライバーがtrain/testで異なるドライバーである、評価の方法としてtrain/validationも同様の評価が行われるべき
そうすると異なるドライバーがtrain/validationにいてほしいとなるはず
ドライバーの動作のラベリングをしたいとなった場合、ドライバーが誰であるという情報がなくても正しく予測されてほしいとなるはず
またドライバー毎の画像をつなげると動画になってしまう、これら画像はドライバーの動作を動画で撮影して時系列毎にラベリングしてある
したがって、同じドライバーの動作の推定は簡単にできてしまう
https://www.kaggle.com/titericz/just-relax-and-watch-some-cool-movies
疑問点
Group-KFoldの分割方法説明画像を見るとFold毎、あるラベルがtrain_idx/test_idxどちらかにしか出現する場合がある。特定のラベルの評価がうまくいかなくなるのではという疑問。そのためにStratifiedKFoldを使うのではと思っている。
Kaggle - state-farm-distracted-driver-detectioでの場合、異なるドライバーでかつ同じラベル、ドライバーの動作毎に分割してほしいとなるのかなと思った
参考
https://upura.hatenablog.com/entry/2018/12/04/224436#GroupKFold
https://speakerdeck.com/iwiwi/kaggle-state-farm-distracted-driver-detection?slide=22
https://youtu.be/7389fOxgBz8