2016-11-24_9-43-53_No-00

こんにちは、ねこし@大学教員ブロガー です。

今回はクロスバリデーションについて誤解されやすいことを書きます。

先日、こちらにこんな質問をいただきました (質問なさった方に深謝です!)。

クロスバリデーション(笑)の記事について質問なのですが、一般的なK分割クロスバリデーションにおいても、K分割したサンプルそれぞれについての推定を行ってその平均値を算出していませんか?つまり、大学教授さんが言っている「ダブルクロスバリデーション(クロスモデルバリデーション)」というのは一般的なクロスバリデーションのことだと思うのですが、いかがでしょうか。何卒不勉強なもので、自分には理解不足があると思いますから、どうかお手柔らかにお教えいただけると幸いです。

クロスバリデーション(笑)の記事というのはこちらです。

クロスバリデーションでは予測性能を評価できない!ダブルクロスバリデーション(クロスモデルバリデーション)のススメ : 大学教授のブログ (データ分析相談所)

以下はわたしの回答の抜粋です。

「一般的なクロスバリデーション」と「ダブルクロスバリデーション(クロスモデルバリデーション)」とは異なります。少しややこしいところですので、言葉の定義から丁寧に回答致します。

まず「クロスバリデーション」です。これは、一つのデータセットをモデル構築用データセットとモデル検証用データセットに分け、モデル構築用データセットを用いてモデルを構築してモデル検証用データセットの推定を行う、ということを繰り返し行うことです。つまり、一つのサンプルは、モデル構築用データセットになるときもあれば、モデル検証用データセットになることもあります。

次に「K分割クロスバリデーション」です。これはクロスバリデーションの一つです。データセットをK個のグループに分割し、(K-1)個のグループをモデル構築用データセット、1個のグループをモデル検証用データセットにします。モデル構築用データセットを用いてモデルを構築してモデル検証用データセットの推定を行います。これを、K個のグループそれぞれが一度モデル検証用データセットになるまで、つまりK回繰り返すわけです。

最後に「ダブルクロスバリデーション(クロスモデルバリデーション)」です。これは、「K分割クロスバリデーション」が入れ子構造になっているとお考えください。つまり、データセットをK個のグループに分割し、(K-1)個のグループをモデル構築用データセット、1個のグループをモデル検証用データセットにしたあとに、その(K-1)個のグループ(モデル構築用データセット)をK個のグループに分割します。たとえばK=5で100サンプルのデータセットであるとすると、80サンプルのモデル構築用データセットと20個のモデル検証用データセットに分けたあとに、80サンプルを16サンプル × 5個のグループに分けます。

そして内側の「K分割クロスバリデーション」(サンプル数が少ない方、例でいうと64個のモデル構築用データセット・16個のモデル検証用データセットに分けた方)において、PLSの成分数・LASSOのλなどのパラメータを最適化します。外側の「K分割クロスバリデーション」(サンプル数が多い方、例でいうと80個のモデル構築用データセット・20個のモデル検証用データセットに分けた方)では、すでに内側のクロスバリデーションでパラメータが最適化されていますので、最適化されたパラメータを使ったモデルでモデル検証用データの推定だけ行います。

なぜクロスバリデーションが誤解されやすいのか?

クロスバリデーションについて誤解されている方は意外に多いです。どうして誤解されてしまうのでしょうか。

クロスバリデーションの種類が多い

その理由の一つにクロスバリデーションの種類が多いことがあげられます。

たとえばleave-one-out クロスバリデーション、leave-some-out クロスバリデーション、k-fold クロスバリデーション、repeated k-fold クロスバリデーションです。「クロスバリデーション」という、一つのデータセットをモデル構築用データセットとモデル検証用データセットに分け、モデル構築用データセットを用いてモデルを構築してモデル検証用データセットの推定を行う、ことを繰り返し行うということは同じですが、モデル構築用データセットとモデル検証用データセットの分け方が異なります。

まずleave-one-out クロスバリデーションについてはこちらを参照ください。

Leave-one-outクロスバリデーションの2つのデメリット、からの解決方法 : 大学教授のブログ (データ分析相談所)

次にleave-some-out クロスバリデーションは、1つのサンプルをモデル検証用データセットとすることを繰り返すのではなく、2つとか3つとか複数のサンプルをモデル検証用データセットとすることを繰り返します。これにより、上の記事でもleave-one-out クロスバリデーションの問題点として指摘している、「クロスバリデーション推定値が計算値とほとんど同じになる」、つまり与えられたデータセットにモデルがオーバーフィットすることを緩和することができます。

k-fold クロスバリデーションはデータセットをk個のグループに分割し、(k-1)個のグループをモデル構築用データセット、1個のグループをモデル検証用データセットにします。これも「クロスバリデーション推定値が計算値とほとんど同じになる」ことを防ぐための方法です。

さらにオーバーフィッティングを防ぐために、repeated k-fold クロスバリデーションを行います。一度k-fold クロスバリデーションを行なっただけだと、モデルの性能がk個のグループの分け方に依存したり、たまたま結果がよくなることが起こったりします。そのため繰り返しk-fold クロスバリデーションを行ない、それぞれのk-fold クロスバリデーションの評価値の平均を用いたり、もっとも悪いときの値を用いたりすることで、オーバーフィッティングを防ぎます。

クロスバリデーションの評価値の種類が多い

たとえばk-fold クロスバリデーションを行なったときでも、そのあとの評価値もいくつか種類があります。一般的には、クロスバリデーション後の推定値をまとめて準備しておき、実測値との間でr2(r2CV)やRMSE(RMSECV)やMAE(MAECV)を計算します。

他にも、k個の分割ごとにモデル検証用データセットでr2やRMSEやMAEを計算し、k個の値の平均値を用いる方法もあります。

日本語↔英語の変換がややこしい

クロスバリデーション (cross validation) を日本語にすると、内部バリデーションとか交差検定法とかになります。ちなみにexternal validationが外部バリデーションです。たまにクロスバリデーションのことを外部バリデーションといっている人もいて、クロスバリデーションをややこしくしています。

ここまでお読みくださりありがとうございます。

ではでは!

データ解析の質問 募集中!

こちらへお願いします!

ご案内。

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

twitterでも発信中。

この記事に興味を持っていただけましたら、ぜひフォローをお願いします!


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

データ解析・分析に興味がありましたらぜひ登録をお願いします!
無料メルマガの登録はこちら