采纳答案成功!
向帮助你的同学说点啥吧!感谢那些助人为乐的人
请问一下我通过J_debug计算出来了theta,并且和通过J_math计算的theta值一样,但使用同样的数据集在sklearn中的SGDRegressor()中无法得到相同的theta值,这样的问题如何解决?尝试过修改epsilon或者max_iter,eta0这些参数,或者把J_debug中的参数和SGDRegressor()中的参数设置成完全一样,最后还是无法得到相同的theta值
抱歉,我没有理解你的问题。使用 sklearn 中的 SGDRegressor() 应该既不会使用 J_debug,也不会使用 J_math。
如果你的意思是,我们自己封装的随机梯度下降法,得到的结果和 sklearn 的随机梯度下降法,得到的结果不同,那是正常的。这和 J_debug 与 J_math 无关,而和随机梯度下降法的实现有关。因为 sklearn 中封装的算法内部,有非常多的优化,和我们自己写的是不一样的。在这个课程中,我们自己实现的算法,主要是帮助同学们理解算法的基本原理和适用场景,但依然是 toy 级别的。在真实场景具体使用上,还是要使用框架为我们提供的算法封装。
继续加油!:)
那么老师,请问一下就是如果使用SGDRegressor() 的话,应该使用什么样的方式来判断得到了最优解呢? 目前我知道的就是假如损失函数是凸函数,只要是收敛,就一定能够得到最优解,如果不是这种情况,应该如何判断?
非常感谢!
对于复杂的非凸函数,判断不出来。多设立几个随机的起始点,多转几次,不同参数多试试,取最好结果。
登录后可查看更多问答,登录/注册
Python3+sklearn,兼顾原理、算法底层实现和框架使用。
3.1k 19
4.2k 17
3.6k 15
2.0k 15
1.9k 14
购课补贴联系客服咨询优惠详情
慕课网APP您的移动学习伙伴
扫描二维码关注慕课网微信公众号