2016-7-8_21-13-27_No-00

PLSの成分数・SVMのC・LASSOのγなどのハイパーパラメータの値を決めるとき、基本的にクロスバリデーションを用います。クロスバリデーションの推定結果が最も良くなるようなハイパーパラメータの値にするわけです。たとえば、r2CVが最大になったり、RMSECVが最小になるようにハイパーパラメータの値を設定します。

このクロスバリデーションに、leave-one-out (LOO) クロスバリデーションを使っている方、いませんか?LOOクロスバリデーションには2つのデメリットがあるため注意が必要です。そのデメリットとは、

  • 時間がかかる
  • クロスバリデーション推定値が計算値とほとんど同じになる

です。順に説明します。

時間がかかる

たとえば10000サンプルのデータセットがあったとしましょう。LOOクロスバリデーションでは、1サンプル除いて他の9999サンプルでモデルを作って除いた1サンプルの目的変数の値を推定することを、10000回繰り返します。特に9999サンプルでモデルを作るには結構な計算時間が必要ですので、それを10000回も行うとものすごい時間がかかります。

クロスバリデーション推定値が計算値とほとんど同じになる

10000サンプルあったときに、LOOクロスバリデーションすると、9999サンプルでモデルを作るわけです。10000サンプル全部使ってモデルを作った場合とほとんど変わらないですよね。なので、特にサンプル数が多いときは、全サンプル使ってモデルを構築した目的変数の計算値と、クロスバリデーション推定値がほとんど同じになってしまいます。

これの何が問題かというと、モデル構築用データセットにだけ合うようなモデルを作るハイパーパラメータの値が選ばれてしまうんです。もともとはこのオーバーフィッティングを防ぐことがクロスバリデーションの目的だったのですが、サンプル数が多いときにLOOクロスバリデーションをやってしまうと、役に立ちません。

ではどうすればよいのでしょうか?

基本的にクロスバリデーションは 2-fold か 5-fold にしましょう。モデル構築用データセットを2つや5つに分けて、一部だけ除いて他のデータセットでモデル構築して除いた一部の目的変数の値を推定する、ということを繰り返します。サンプル数がどんなに多いときでも、2-foldなら2回、5-foldなら5回で終わります。LOOクロスバリデーションで10000回も行う場合と比べるとかなり時間短縮になります。さらに、LOOと違ってざっくりとサンプルを分割しているので、オーバーフィッティングも防ぎやすくなります。

まとめ

LOOクロスバリデーションには上のように2つのデメリットがありますので、2-foldか5-foldクロスバリデーションがよいです。なお、今回はハイパーパラメータを決めるときの話です。モデルの予測性能を評価するときは、クロスバリデーションではなくダブルクロスバリデーションを用いましょう。詳細は以下の記事をご覧ください。

クロスバリデーションでは予測性能を評価できない!ダブルクロスバリデーション(クロスモデルバリデーション)のススメ

ご案内。

オススメ記事セレクション。

twitterでも発信中。

フォローしていただけると嬉しいです。


無料メルマガでブログにない情報を配信中。

無料メルマガの登録はこちら