信用评分之六--逻辑回归模型梯度下降法跟牛顿法比较

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|

3.2例子

信用评分之六--逻辑回归模型梯度下降法跟牛顿法比较_第1张图片

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

你可能感兴趣的:(机器学习,---信用评分,架构,自然语言处理,金融风控,信用评分,大数据与自然语言处理)