変数選択・特徴量選択のときの意識は、モデルの予測精度を上げることより、不要な変数・特徴量を削除することです

回帰モデルやクラス分類モデルの予測精度を上げるためモデルを解釈するため色々な目的で変数選択 (特徴量選択) をしていると思います。相関係数に基づく削除Stepwise法LASSOGAPLS, GASVRBoruta とかですね。変数選択の注意点はこちらに書いた通りです。

変数選択・特徴量選択のときに注意すること
変数選択・特徴量選択の手法はいろいろあります。同じ値をもつサンプルの割合が大きい特徴量を削除したりとか、相関係数の絶対値が大きい特徴量の組の一つを削除したりとか、 モデルの予測精度を高めるように特徴量を選択したりとか、 乱数の特徴量のような...

 

やっぱり、予測精度の高いモデルを構築できると嬉しいですので、モデルの予測精度が向上するように変数選択を行いたくなると思います。ただ、注意にも関連するのですが、特にサンプル数が小さい場合に、変数選択するときの意識としては、モデルの予測精度を向上することより、不要な変数 (特徴量) を削除することにあります。

変数選択で向上できる予測精度は、結局は内部バリデーションの結果としての予測精度です。まず、クロスバリデーションはもちろん内部バリデーションです。また、バリデーションデータやテストデータを用いたとしても、それらのデータは、もともとは最初のデータセットにあるものです。モデルの目的としては、最初のデータセットにおけるサンプルの目的変数 Y の値を精度よく予測することではなく、新しいサンプルの Y の値を精度よく予測することです。バリデーションデータやテストデータを精度よく予測できるように変数を選択できたとしても、それ以外のサンプルを予測できるかどうかは、また別の話です。変数選択では、自由度が非常に高いため、バリデーションデータやテストデータにオーバーフィットする可能性が高いのです。

モデルの予測精度が向上するように変数選択しようとしても、結局は今あるデータセットにあうような変数が選択されてしまうことが、少なからずあるわけです。そのため、選択された変数のみを用いて構築されるモデルは、オーバーフィッティングしていること前提として、アンサンブル学習でそれを軽減することがあります。

一方で、今あるデータセットを用いて Y を説明するために不要な変数がわかれば、そのような変数はモデル構築のときにノイズとして作用するため、あらかじめ削除する方が望ましいです。もちろん、今あるデータセットでは不要な変数ですが、データセットが増えたときに重要な変数となる可能性はあります。しかし、今のデータセットでモデルを構築するわけですから、変数選択する前でもした後でも、その変数の Y への寄与を検討することはできません。ただ、データセットが変わったときに、改めて変数選択することは重要です。

もちろん、不要な変数を見つけることも難しいです。一つの変数だけでは Y と関係がなさそうに見えても、複数の説明で Y に関係している可能性もあります。また、変数が不要かどうかは確率的な問題です。100% 不要とか 100% 必要とかで判断できるものではなく、たとえば 95% の確率で不要、といったように与えられますので、一意的に変数を削除することは難しいです。

変数選択は、以上のような問題があることを考えながら行うようにしています。

 

以上です。

質問やコメントなどありましたら、twitter, facebook, メールなどでご連絡いただけるとうれしいです。

タイトルとURLをコピーしました