看了Andrew Ng的关于机器学习中梯度下降的学习,用最简单粗暴的解法实现下
注意的地方就是$\theta_0,\theta_1$
是同时更新的,所以用一个临时变量接了下
收敛条件的判断:可以让函数迭代指定的次数后退出,也可以认为n次迭代的结果和n-1次的结果非常接近时就代表下降到谷底,退出函数
步数alpha的设置和epsilon的选择,这个例子我尝试步数为0.0025时就会振荡无法收敛,epsilon等于于0.001时有时会产生局部最优解,建议是$10^{-4}$
明天继续尝试最小二乘法,这个代码写得比较loser,先放这,学完再优化,记录下现在和以后的思考有什么区别
1 | #!/usr/bin/python |
偷懒了两天后用normal equation方法实现了,结果和stats.linregress的结果完全一样,注意矩阵需要垂直排列,记录俩函数用来修改矩阵堆叠方式
1 | vstack()函数 |
Numpy中stack(),hstack(),vstack()函数详解
1 | #!/usr/bin/python |
通过学习别人的代码和修改完成了最终版本,要注意步长和终止条件,步长alpha通过多次尝试最后选取适合值
1 | #!/usr/bin/python |