梯度下降实现求助

Easy_ray 阜阳起源置业有限公司 2017-11-02 12:16:02
学习梯度下降的时候,自己随机写了一组数据X,Y想用梯度下降的算法拟合一下,可是最终plot的图上什么都没有,拟合失败了,求大神教一下我这个菜鸟,谢谢!

import matplotlib.pyplot as plt
x = [100,80,120,75,60,43,140,132,63,55,74,44,88]
y = [120,92,143,87,60,50,167,147,80,60,90,57,99]
alpha = 0.01
diff = [0,0]
cnt = 0
m = len(x)
#init the parameters to zero
theta0 = 0
theta1 = 0
def h(x):
return theta1*x+theta0
while 1:
cnt=cnt+1
diff = [0,0]
for i in range(m):
diff[0]+=h(x[i])-y[i]
diff[1]+=(h(x[i])-y[i])*x[i]
theta0=theta0-alpha/m*diff[0]
theta1=theta1-alpha/m*diff[1]
if cnt>20000:
print 'cnt>20000'
break
plt.plot([h(x) for x in x])
plt.show()
...全文
861 5 点赞 打赏 收藏 举报
写回复
5 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
Easy_ray 2017-11-02
引用 1 楼 u012947309 的回复:
看了半天卧槽while没end 才注意到python 看样子是没收敛 gain是+上去还是-上去注意是不是符号反了?
符号应该没错啊
  • 打赏
  • 举报
回复
NoEdUl 2017-11-02
看了半天卧槽while没end 才注意到python 看样子是没收敛 gain是+上去还是-上去注意是不是符号反了?
  • 打赏
  • 举报
回复
NoEdUl 2017-11-02
引用 4 楼 u012947309 的回复:
我怀疑是这样 x作为input y是output 一个input没办法同时约束theta0 和theta1。 你试试只有theta1,肯定能work。
不对 这也说不通。 约束什么鬼的是高斯牛顿法的玩法-。- 梯度下降应该只要导数有极值就能玩。 线型方程肯定能找到一个导数函数的极值。
  • 打赏
  • 举报
回复
NoEdUl 2017-11-02
我怀疑是这样 x作为input y是output 一个input没办法同时约束theta0 和theta1。 你试试只有theta1,肯定能work。
  • 打赏
  • 举报
回复
NoEdUl 2017-11-02
重新看了一下 你计算一下每次拟合出alpha0 和 alpha1 之后估算的y和实际y的差值,sum一下。 应该是有一瞬间得到一个最小的差值,然后一步迈过去就没回来了。
  • 打赏
  • 举报
回复
相关推荐
发帖
人工智能技术
加入

4050

社区成员

专题开发/技术/项目 人工智能技术
申请成为版主
帖子事件
创建了帖子
2017-11-02 12:16
社区公告
暂无公告