最適化とは
•関数・プログラム・製造物などを最適な状態に近づけること
最適化問題=
今回の場合、ある制約条件のもとで関数を最大または最小にする解を探すこと
引用:wikipedia
さっそくRに用意されている関数を使って最適化をしてみよう!
optimize(optimise)関数
•一変数関数の最大、最小値を求めることができる
• maximum=TRUE で最大化(デフォルトはFALSE)
•黄金分割探索と逐次放物線補間の組み合わせ
•多変数関数の最大、最小値を求めることができる
• control=list( fnscale=(負の値) ) で最大化
• Nelder-Mead、BFGS、CG、L-BFGS-B、SANN法が使える
•一変数に対しても使えなくはないが、既定の手法はうまく動作しない
optim関数BFGS法は準ニュートン法CG法は共役勾配法(メモリー使用量が少ないため、大規模最適化に使える可能性がある)L-BFGS-B法は制約条件を許す準ニュートン法SANN法はシュミレーテッド・アニーリング法(あまり一般的ではない)
さっきのoptimizeの初期値を推定できるのでは?
多変数の最適化ができるなら
• Nelder-mead、SANN法は、微分できない関数にも使用でき、初期値にそこまで敏感ではない
•上記の手法で得られた値を使用して、BFGS、CG法を使ってみるのも有
optim関数
•ニュートン法タイプのアルゴリズムを用いて関数を最小化
•最大化したい場合は 関数の戻り値 ×(−1)
• r-help記事によるとoptim関数より、しばしば良い結果を与えるらしい
nlm関数
-40 -20 0 20 40
80100
120
140
160
x
fw (x
)
どうもnlm関数は初期値周りの最小値を探しているみたい
まとめ
•非線形関数の最適化を行ってきた
•用途に応じて最適化関数は使い分ける必要有
•初期値選びで最適化が左右される
•関数が動いたからと言ってそれが最適解とは限らない
参考文献
• RjpWiki - 関数の最大・最小化
• http://www.okada.jp.org/RWiki/?%B4%D8%BF%F4%A4%CE%BA%C7%C2%E7%A1%A6%BA%C7%BE%AE%B2%BD
• R基本統計関数マニュアル
• http://cran.r-project.org/doc/contrib/manuals-jp/Mase-Rstatman.pdf
• Stefano M. Iacus (2011) - Option Pricing and Estimation of Financial Models with R