分割交差検定

今日の M1 向け勉強会では分割交差検定(cross validation)の話で議論に。これって訓練に使えるデータ数が少ないときに training set と validation(development) set を分けると development set のデータが訓練に使えなくなってしまうので、development set のデータも効率的に使うためにするものだと思っていたのだけど、違うのか? training set, validation set, test set と3つ出てくるのでややこしい。

他の M1 の人は「分割交差検定しないと客観的な評価にならないから」なんていう説明で自分ほど文句言ってない(気持ち悪くない)みたいなのだけど、「客観的」ってのも訳分からないだし「評価」というのもなにを評価したいのか分からない。評価はタスクに依存する、タスクに依存すると繰り返し言われるのだけど、そのタスク(CRL の固有表現抽出)自体の内容を知らないので平行線。まあでもお互い言いたいことは言ったので、自分でまずそのタスクの内容調べるしかないか。

あとなんか k-fold cross validation (k分割交差検定)で計算量を無視すると leave-one-out (つまり1つの事例を validation に使って残り全部で訓練する)が一番性能がいい、と takahi-i さんが言っていたが、これもなんか納得がいかないことの一つ。leave-one-out だと与えられたデータに過適応する(これが「しない」という話)ので、最適な分割数 k の値も推定しないといけないと思うのだけど……。

と思って松本研にある事典を次々当たってみたのだが、どうもそれっぽいのが載っていない。半分寝ていた yotaro-w くんも後ろでばたばたしていて目が覚めたようで、cross validation の話につき合ってくれる。でも結論分からず。客観的とか言うならそもそも分割の仕方(ランダムに事例を選択するとか、先頭から順番に各グループに振り分けるとか)とか分割数とか全部同じにしないと比較できないし。煮詰まった。明日新保さんに聞いてみるかなー

(28日追記) takahi-i さんに補足で説明してもらった。つまり学習器によっては held out データが存在しない、訓練データとテストデータしか存在しない状況が存在し、そのときには訓練データの情報を最大限利用するためには k = n となる leave-one-out がもっとも訓練データの情報を損なわず使うことができる(性能を上げるわけではなく)、という話だった。特にデータとして使える事例が少ない場合、学習器の性能を議論したいときは、データが少ないという理由で性能が上がらないという可能性を排除するためには、leave-one-out のような方法でデータの少なさをできるだけカバーしたほうがいい、ということであった。性能を上げるという話は別件で taku さんが書いたような話があるらしい。こちらは納得。明日の勉強会でみんなにフィードバックしよう。