标签:
机器学习的优化问题中,梯度下降法和牛顿法是常用的两种凸函数求极值的方法,他们都是为了求得目标函数的近似解。梯度下降的目的是直接求解目标函数极小值,而牛顿法则变相地通过求解目标函数一阶导为零的参数值,进而求得目标函数最小值。在逻辑回归模型的参数求解中,一般用改良的梯度下降法,也可以用牛顿法。
2、while(|新值 -旧值| >误差)
3、 旧值=新值
4、 新值=初始值-步长*导函数值,来进行梯度下降
算法的一些问题:每一步走的距离在极值点附近非常重要,如果走的步子过大,容易在极值点附近震荡而无法收敛。解决办法:将alpha设定为随着迭代次数而不断减小的变量,但太小会导致迭代次数很多。
/** * 梯度下降算法,求解 f(x)=x^4-3x^3+2 最小值 * 导数为: f'(x)=4x^3-9x^2 * @author Zealot * @date 2015年12月13日 */ public class GradientDescent { // 经过计算, we expect that the local minimum occurs at x=9/4 double x_old = 0; static double x_new = 6; // 从 x=6 开始迭代 double gamma = 0.01; // 每次迭代的步长 double precision = 0.00001;//误差 static int iter = 0;//迭代次数 //目标函数的导数 private double derivative(double x) { return 4 * Math.pow(x, 3) - 9 *Math.pow(x, 2); } private void getmin() { while (Math.abs(x_new - x_old) > precision){ iter++; x_old = x_new; x_new = x_old - gamma * derivative(x_old); } } public static void main(String[] args) { GradientDescent gd = new GradientDescent(); gd.getmin(); System.out.println(iter+": "+x_new); } }
求解f(x)=0,如果f(x)可导,等价为迭代x = x-f(x)/f‘(x)的最小值,算法如下:
输入:初始值x0,误差荣制TOL;最大迭代次数m
输入: 近似解p或者失败信息
1、 p0=x0
2、while (小于迭代次数)
3、 p= p0-f(p0)/f‘(p0)
4、 若|p-p0|<TOL,停机,否则p0=p
机器学习中梯度下降法跟牛顿法的比较
http://www.myexception.cn/cloud/1987100.html
梯度下降法(一)入门
http://blog.csdn.net/nupt123456789/article/details/8281923
java实现梯度下降算法
http://blog.csdn.net/nupt123456789/article/details/8281923
梯度下降、牛顿法、拟牛顿法
http://blog.csdn.net/luo86106/article/details/40510383
标签:
原文地址:http://blog.csdn.net/everlasting_188/article/details/51922374