机器学习-牛顿法与源码实现

来源:互联网 发布:编程珠玑 百度网盘 编辑:程序博客网 时间:2024/06/05 19:23

机器学习算法中要对目标函数求极值,也就是非线性优化问题,本篇博客主要讲述其中一种优化方法——牛顿法,并用代码实现。牛顿法的基本思想是:在现有的极值xk的附近,对 f(x)对二阶泰勒展开,进而找到极小值的下一个估计值:


这里省略(x-xk) 的高阶项。



当x是多维情况,可以将二阶泰勒展开式进行推广:






因为牛顿法没有步长因子(也就是学习率),当初始点x不在 f(x)极值附近时,算法可能不能收敛,从而导致发散。所以为了

消除发散,人们提出了“阻尼牛顿法”,也就是在dk前面乘上系数。同时可以产出Hk的计算量还是非常大的。


代码:




实验结果:函数的值在不断的减少,在迭代了27次后,函数收敛,此时向量中的3个数变数{x1,x2,x3}的最优解:




原创粉丝点击