最急降下法をPythonで実装した
関数x2 + xは、どうやら最小値がひとつだけ存在するらしい。どうしてもその値を知りたくなったので、最急降下法を使ってPythonでその値を求めてみた。
#!/usr/bin/env python # -*- coding: utf-8 -*- import random learning_late = 0.01 loop_max = 1000 def main(): initial = random.uniform(-10, 10) old = initial new = 0.0 for _ in range(1000): # 更新式 new = old - learning_late * diff_func(old) # 目的関数の値を確認 y = object_func(new) print(y) # 値を更新 old = new print(new, y) # 目的関数 def object_func(x): return x * x + x # x ^ 2 + x の微分 def diff_func(x): return 2 * x + 1 if __name__=='__main__': main()
これを実行すると、
# x、y (-0.5000000145792641, -0.24999999999999978)
と、xが-0.5付近の時に目的の関数が最小値となることがわかった。なるほどというかんじ。
- 作者: 中井悦司
- 出版社/メーカー: 技術評論社
- 発売日: 2015/10/17
- メディア: 単行本(ソフトカバー)
- この商品を含むブログ (1件) を見る
- 作者: 高村大也,奥村学
- 出版社/メーカー: コロナ社
- 発売日: 2010/07
- メディア: 単行本
- 購入: 13人 クリック: 235回
- この商品を含むブログ (41件) を見る