码迷,mamicode.com
首页 > 其他好文 > 详细

梯度下降法

时间:2014-05-01 03:14:54      阅读:267      评论:0      收藏:0      [点我收藏+]

标签:des   com   http   blog   style   class   div   img   code   c   java   

梯度下降法是求解无约束最优化问题的一种常用方法。实现简单,代码如下。

mamicode.com,码迷
 1 # -*- coding: utf8 -*-
 2 
 3 delta = 0.00001
 4 
 5 # f = x^2 + y^2
 6 my_function = lambda point : point[0] ** 2 + point[1] ** 2
 7 
 8 # 计算梯度
 9 def gradient(f, point):
10     global delta
11     grad = [0.0] * len(point)
12     for i in xrange(len(point)):
13         point_ = list(point)
14         point_[i] += delta
15         grad[i] = (f(point_) - f(point)) / delta
16     return grad
17 
18 # 梯度下降法
19 def graddesc(f, initpoint, step, epsilon):
20     curpoint = initpoint
21     while True:
22         ng = map(lambda x : -x, gradient(f, curpoint))          # 负梯度
23         nextpoint = map(lambda x,g : x+step*g, curpoint, ng)    # 下一个试探点
24         if abs(f(nextpoint) - f(curpoint)) < epsilon:           # 迭代终止
25             break
26         curpoint = nextpoint
27     return curpoint
28 
29 print my_function(graddesc(my_function, [-5, 4], 0.1, 0.000001))
mamicode.com,码迷

 

梯度下降法,码迷,mamicode.com

梯度下降法

标签:des   com   http   blog   style   class   div   img   code   c   java   

原文地址:http://www.cnblogs.com/fyho2012/p/3702142.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!