采纳答案成功!
向帮助你的同学说点啥吧!感谢那些助人为乐的人
老师我对照之前问您的同学代码进行运行,对比改进之后的随机梯度下降算法,为什么后者的Score会比前者高呢(大约高0.00几)?感觉按道理小批量的应该绝对比后者好吧?也可能是我的理解有问题,希望老师能够指正
我不太确定你使用的数据是怎样的,我假设你的实现是正确且等价的(一些很容易犯的错误比如在一次实验中对数据做了标准化,对另一个实验没有标准化)。但是对于机器学习,有几点简单说明一下:
1)不能只比算法,也要看参数。随机梯度下降法的迭代 100 万次,整体梯度下降法之迭代一次,肯定随机梯度下降法效果更好。除了迭代次数,还有容忍的误差,等等其他参数。再有一些情况下,对于一些算法,相同的参数背后带来的影响可能是不同的。(比如我们实现的梯度下降和随机梯度下降中的 n_iters 的定义是不一样的。)
实际上,对于你说的问题,很有可能其实随机梯度下降法内部的迭代次数,比你实现的小批量梯度下降法迭代次数高。
当然,还有可能的情况很多,比如精度问题导致速记梯度下降能到达一个那个比小批量梯度下降更“精准”的位置,那么此时需要你尝试调整误差的限制:eta 或者 epsilon
2)一个非常重要的 mindset 是:一个“更好的算法”,不一定最终的 score 更高。实际上,当你学习了后面的过拟合之后,你就会明白,我们如果只想要针对现在的数据达到 100% 的准确率,我们是永远可以做到这一点的。但关键是,这不是机器学习的目的。机器学习的目的是找到“最能反映实际情况的模型”,这个模型在我们的测试数据上可能表现差一些,但是它的泛化能力强。
所以,一个更好的算法,通常是“更可信的”,而非“准确率更高的”。这一点在机器学习中非常非常重要。
不过因为线性回归背后的最优化函数非常简单,所以可能不涉及这个问题。靠调参数让二者一致的概率应该是很大的。
继续加油!:)
老师我之后测试小批量的n_niters设置的是20,就超过了随机梯度下降算法的了,我的理解是小批量可以以更小的迭代次数就接近最低点了,如果迭代次数多了反而会影响最终的结果,而随机梯度,由于是对每一个样本进行梯度计算,就相对慢一些,所以迭代次数是偏向于比较大的数,因为这样才能使之前接近最低点的sita更加接近,老师这样理解正确吗?
实际上,是不是小批量梯度下降法一定优于随机梯度下降法,是有争议的,尤其是在损失函数非常复杂的情况下,会有时候随机梯度下降法反而效果更好。但是依然是,由于线性回归的损失函数非常简单,所以是的,小批量梯度下降法需要的迭代次数更少是 make sense 的:)
登录后可查看更多问答,登录/注册
Python3+sklearn,兼顾原理、算法底层实现和框架使用。
2.6k 19
3.6k 17
3.1k 15
1.7k 15
1.5k 14
购课补贴联系客服咨询优惠详情
慕课网APP您的移动学习伙伴
扫描二维码关注慕课网微信公众号