2016-7-21_8-36-36_No-00

いろいろな設計をするときに、最適化問題にして、ある目的関数の値が最大もしくは最小になるように設計変数の値を決めることがあります。または、遺伝的アルゴリズムなどのメタヒューリスティックアルゴリズムを用いて、評価関数の値が最大もしくは最小になるように設計変数の値を最適化することもできます。このブログでも遺伝的アルゴリズムによる変数選択を以前に扱いました。

Genetic Algorithm-based Partial Least Squares (GAPLS) による変数選択の実用的かつ実践的な方法 : 大学教授のブログ

ただし、目的関数や評価関数を直感だけで決めてはいけません

最適化した結果、予測と異なる結果になってしまう例

こちらのブログに最適化に関係する面白い話がありました。

ケーキに3回だけ刃を入れてできるだけ公平に分割したい話 - アジマティクス

分かりやすいので読んでいただけると分かると思いますが、簡単にまとめます。ホールケーキを上から3回だけ切って、なるべく均等に7人に分ける話です。「なるべく均等に」ということから、切ったあとの7つの大きさのばらつきが小さくなればよいだろう、ということで、分散が最小になるように切り方を決めます。ここまでは問題なさそうですよね?それで、その結果、分散が最小値になった切り方は、1人は「なし」で残りの6人で6等分するように切るものだったのです。みなさんのイメージとは違いませんか?1人が可哀想ですよね。

つまり、7つのケーキの分散という最小化する目的関数として、直感的に問題なさそうなものでも、設計変数を最適化の結果、適さないものになってしまうこともあるんです。

目的関数や評価関数を複数準備して、結果をみながら試行錯誤する

直感的に目的関数や評価関数を決めて、それだけで進めてはいけません。必ず、複数の目的関数や評価関数を準備して、最適化を複数回行なってください。遺伝的アルゴリズムなどのメタヒューリスティックアルゴリズムでは、評価関数が同じでも乱数を変えると結果が異なりますので、これも複数行いましょう。

何回も計算を行いますので、結果も複数出てきます。それらを見比べて検討するようにしましょう。

まとめ

直感的に問題なさそうでも、実際に行なってみると「あれ?イメージと違うぞ!」といったことが起こります。手間がかかるので面倒ですが、必ず目的関数や評価関数をいくつか変えて、それらの結果を検討するようにしましょう。

ご案内。

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

twitterでも発信中。

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


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

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