1、综述
机器学习的优化问题中,梯度下降法和牛顿法是常用的两种凸函数求极值的方法,他们都是为了求得目标函数的近似解。梯度下降的目的是直接求解目标函数极小值,而牛顿法则变相地通过求解目标函数一阶导为零的参数值,进而求得目标函数最小值。在逻辑回归模型的参数求解中,一般用改良的梯度下降法,也可以用牛顿法。
2 梯度下降法
2.1算法描述
2、while(|新值 -旧值| >误差)
3、 旧值=新值
4、 新值=初始值-步长*导函数值,来进行梯度下降
算法的一些问题:每一步走的距离在极值点附近非常重要,如果走的步子过大,容易在极值点附近震荡而无法收敛。解决办法:将alpha设定为随着迭代次数而不断减小的变量,但太小会导致迭代次数很多。
2.2、java代码示例
/**
* 梯度下降算法,求解 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);
}
}
3、牛顿法
3.1算法描述
求解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
3.2例子

4、参考文档
机器学习中梯度下降法跟牛顿法的比较
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://www.cnblogs.com/happylion/p/4172632.html
牛顿法、雅克比矩阵、海森矩阵
http://blog.csdn.net/ubunfans/article/details/41520047

本文详细介绍了机器学习中两种重要的优化方法——梯度下降法和牛顿法。通过对这两种方法的基本原理、算法步骤及Java代码示例的阐述,帮助读者理解其在求解目标函数极值中的应用。
1750

被折叠的 条评论
为什么被折叠?



