分子設計・材料設計・プロセス設計・プロセス制御設計 (ソフトセンサーなど) といった、いろいろな研究をする中で、たくさんの回帰モデルやクラス分類モデルなどを構築したり、構築したモデルを使ったりしています。モデルを扱う中で最も重要なことの一つは、モデルの検証 (バリデーション) です。つまり、モデルを評価して、どのモデルが (一番) よいの??、このモデルは使って大丈夫なの??、ということに適切に答える必要があります。
今日は 2019年3月10日時点で、モデルの検証 (バリデーション) について考えていることのメモ、というか疑問、を 2 つ残しておきます。いつか解決されていることを期待しています。
1. テストデータで何個までのモデルを比較してよいのか?
こちらに書いたとおり、
トレーニングデータとテストデータとに分けて、トレーニングデータを用いたクロスバリデーションにより、あるモデルにおいてどのハイパーパラメータの値が優れているかを決めて、テストデータの推定性能でどの手法によって構築されたモデルが優れているのかを決めます。
いくつか候補のモデルがあるときに、テストデータにおける推定性能が最も高いモデルを使おう!、というわけです。では、いくつのモデルがあるときまで、この方法が使えるのでしょうか?
なぜモデルの個数が重要かというと、モデルの推定性能を評価したつもりでも、その結果で最適化してしまったら、評価にならないためです。
たとえば、PLS モデル、SVR モデル、、、、と 1000 個のモデルがあったときに、テストデータにおける推定性能が一番高いモデルを選んだとすると、テストデータに(たまたま)オーバーフィットしたモデルが選ばれてしまう危険があります。別の例を出せば、PLS でも SVR でもクロスバリデーションでハイパーパラメータを決めずに、すべてのハイパーパラメータの候補のモデルの中から、テストデータの推定性能の最も高いモデルを選ぶと、どうなるのでしょうか。テストデータにオーバーフィットしたモデルが選ばれてしまいます。
では何個までならモデルの推定性能を比較してよいのでしょうか?
もちろん、一つのモデルを選ぶのではなく、アンサンブル学習的に、すべてのモデルを統合して用いるのがよいとも考えられます。では、統合された “モデル” はどのように評価すればよいのでしょうか?他の統合されたモデルとの比較は行わなくてよいのでしょうか?
サンプル数や記述子 (説明変数) の数などによって変わると思いますし、確率的な表現のほうが適切かと思います。あとモデルの適用範囲も一緒に考えないと、です。
2. テストデータを用いたモデルの評価と同様にして、クロスバリデーションでモデルを評価できないか?
特にサンプル数が小さいとき、トレーニングデータとテストデータとにサンプルを分けると、モデルを構築するためのサンプルがより少なくなってしまいます。テストデータのサンプルも少なく、たまたまテストデータの誤差が小さくなった、といったことの起こる可能性が高くなってしまいます。
クロスバリデーションにより、あるモデルにおいてどのハイパーパラメータの値が優れているかを決めて、テストデータの推定性能でどの手法で構築されたモデルが優れているのかを決めます。クロスバリデーションの推定性能で、手法の比較までできないのは、ハイパーパラメータの最適化をしてしまっているからです。ざっくりいうと、ハイパーパラメータの候補の数が多いほど、クロスバリデーションの推定性能が高くなる傾向があり、その推定性能はモデル本来の推定性能を表しているとはいえません。
もちろんダブルクロスバリデーションを用いれば、手法間の比較をすることができます。
ただし、ダブルクロスバリデーションの外側のクロスバリデーションでは、ハイパーパラメータは異なるため、最終的に用いるハイパーパラメータでの推定性能を本当に表現しているの??と疑問も残ります。
クロスバリデーションでも、異なる fold 数や異なる分割の仕方 (異なる乱数のシード) でハイパーパラメータの決定と、手法間の比較ができないか考えています。もしくは、クロスバリデーション以外の方法、たとえば中点を用いたバリデーションでハイパーパラメータを決定して、クロスバリデーションで手法間の比較ができないか、考えています。
モデルの検証 (バリデーション) について以上のようなことを考えています。
質問やコメントなどありましたら、twitter, facebook, メールなどでご連絡いただけるとうれしいです。