遺伝的アルゴリズム (Genetic Algorithm, GA) などの最適化アルゴリズムを駆使して、何らかの問題における最適解を探索することが行われます。例えば変数選択もしくは特徴量選択において GA を用いるときには、GA の染色体で、各特徴量を用いる (1) か用いない (0) かを表現し、適合度としてモデルの予測精度、例えばクロスバリデーション後の r2 とすることで、適合度が大きくなる、すなわち予測精度が高くなるように特徴量を選択できます。
GA はその他にも、モデルの逆解析における目的変数 y の予測値やベイズ最適化の獲得関数の値が良好な値になるような解を探索したり、分子シミュレーションやプロセスシミュレーションの結果が良くなるような分子やプロセス条件等のパラメータの値を最適化したりすることにも使われます。
GA は乱数に基づくことから、実行するごとに最終的な解が変わることがあります。特に、特徴量の数が大きいときの特徴量選択のように、解の候補が膨大なときには実行ごとの結果は変わりやすいです。実際、特徴量の相関関係において、相関係数が高い特徴量の組があるときなど、どちら特徴量が選ばれても問題ないときには、GA において結果は変わりやすくなります。
また特徴量選択において、GA で予測精度が高くなるように特徴量を選択しているとはいえ、クロスバリデーションをしても代わりにテストデータの予測結果を使用しても、結局は内部バリデーション、つまり今ある (使用できる) データに対しての当てはめを良くしているだけであるため、オーバーフィッティングが起こりやすいです。
以上より、GA を一回だけ実行して得られた結果のみ使用する、ということは危険と思います。また、このような意識で、GA の実行結果を解釈するとよいでしょう。
さらに言えば、特徴量選択においてその後モデルを構築するとき、そのモデルはオーバーフィッティングをしている可能性があるため、一つのモデルで予測するのではなく複数のモデルで予測する、つまりアンサンブル学習をするとよいです。GA を複数回実行し、それぞれで得られた特徴量のセットでモデルを構築し (GA の実行回数の数のモデルが得られます)、それらのモデルをすべて使用して総合的に予測します。
このように、GA による一つの結果のみ使用するのではなく、複数の実行結果をふまえて最終的な解を検討するとよいと思います。
以上です。
質問やコメントなどありましたら、twitter, facebook, メールなどでご連絡いただけるとうれしいです。