码迷,mamicode.com
首页 > 其他好文 > 详细

逻辑回归模型梯度下降法跟牛顿法比较

时间:2016-07-16 07:02:38      阅读:216      评论:0      收藏:0      [点我收藏+]

标签:

1、综述

机器学习的优化问题中,梯度下降法和牛顿法是常用的两种凸函数求极值的方法,他们都是为了求得目标函数的近似解。梯度下降的目的是直接求解目标函数极小值,而牛顿法则变相地通过求解目标函数一阶导为零的参数值,进而求得目标函数最小值。在逻辑回归模型的参数求解中,一般用改良的梯度下降法,也可以用牛顿法。

2 梯度下降法

2.1算法描述

1、确定误差范围和下降的步长,确定函数的导函数

2、while(|新值 -旧值| >误差)

3、       旧值=新值

4、       新值=初始值-步长*导函数值,来进行梯度下降

算法的一些问题:每一步走的距离在极值点附近非常重要,如果走的步子过大,容易在极值点附近震荡而无法收敛。解决办法:将alpha设定为随着迭代次数而不断减小的变量,但太小会导致迭代次数很多。

2.2、java代码示例

代码转自:http://www.lailook.net/klxx/04/2016-01-05/51426.html

 /**

 * 梯度下降算法,求解 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://blog.csdn.net/everlasting_188/article/details/51922374

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!