梯度下降法核心公式简单修改了一下,theta -= eta * gradient结果运行结果出乎意料

来源:6-4 实现线性回归中的梯度下降法

我不愿让你一个人

2020-04-19

老师,在实现梯度下降法时,我自己修改了下代码:图片描述
将 theta = theta - eta * gradient 改为了theta -= eta * gradient

运行结果:
图片描述
结果并不是想象中数据.
断点时,代码只执行1次就跳出循环了
然后自己构造了数据去测试,发现并不满足 if 条件:
图片描述

纠结好一会了,bobo老师帮忙看一下.

写回答

1回答

liuyubobobo

2020-04-19

因为 theta = theta - eta * gradient,每次 theta - eta * gradient 产生了一个新的 np.array 的对象,赋给 theta,也就是让 theta 指向了一个全新的向量;


但是,theta -= eta * gradient 只是修改当前 theta 指向的向量的内存。


因为前面有一句 last_theta = theta,这将直接也修改 last_theta 的值。


所以,如果你想使用 theta -= eta * gradient,就要让 last_theta 和 theta 的指向不一致。方法是,可以把 last_theta = theta 这一句改成:last_theta = np.array(theta)。

即根据 theta 的值,创建一个新的 np.array,赋给 last_theta。


继续加油!:)

3
1
我不愿让你一个人
谢谢老师,明白了,然后自己写了个测试搞清楚了,谢老师辛苦了,老师也加油(ง •̀_•́)ง
2020-04-19
共1条回复

Python3入门机器学习 经典算法与应用  

Python3+sklearn,兼顾原理、算法底层实现和框架使用。

5839 学习 · 2437 问题

查看课程