Python / ディープラーニング初心者です。
ニューラルネットワーク実装時に調べた汎化性能の検証法について、
以下の通りメモを残します。
疑問に感じたこと
- k分割交差検証法( k-fold cross-validation / kCV)という汎化性能の検証方法がある(参考1)
- 学習用のデータをk個に分割し、k-1個を学習用、1個を性能評価用に用いるという学習をk回繰り返す方法
- sklearn.modelselection.traintest_split(TTS)を用いて、手元のデータを学習用データとテスト用データに分けて汎化性能を検証することがあるのをもともと知っていた
- a.基本的にTTSを複数回繰り返したものがkCVという認識で良いか?
- b.TTSよりもkCVのほうがモデルの汎化性を正確に評価できるという認識でよいか?
回答
- a.そう思われる。加えて、kCV時にはもれなくすべてのk個分割を検証用に用いることができる。
- b.そのように思われる。
- TTSを1回だけすると、検証用に用いるデータは学習データとして絶対に用いることができなくなるために、検証用データの選択方法次第では学習に不要な偏りが生じてしまう可能性がある。kCVならそれを克服できる(参考2)。
- kCVにも、「k個の各分割内にデータの偏りがあった場合に学習結果にバイアスがかかってしまう(犬のデータしか入っていない分割と、猫のデータデータしか入ってない分割に分けられているなど)」デメリットが指摘されている。これに対する対抗策としては、層化k分割交差検証(Stratified kCV)などが挙げられる(参考1)。
まとめ
めっさ当たり前のことなんでしょうけどメモとして残します。