机器学习必备数学知识(下)

Taylor公式 – Maclaurin公式

在这里插入图片描述

在这里插入图片描述

Taylor公式的应用
  1. 函数值计算

在这里插入图片描述

在这里插入图片描述

在实践中,往往需要做一定程度的变换。

  1. 计算e^x

给定正实数x,计算ex=?

一种可行的思路:

求整数k和小数r,使得nx = kln2 + r, |r|≤0.5ln2

从而:

在这里插入图片描述

  1. 解释Gini系数

这个可以从Gini系数、熵、分类误差率三者的关系入手

将f(x)=-lnx在x=1处一阶展开,忽略高阶无穷小,n得到f(x)≈1-x

在这里插入图片描述

在这里插入图片描述

大家有兴趣的可以看看我以前写的关于决策树的使用以及案例分析,源码微信公众号后台恢复失效,可添加本人微信号,私发给你.

  1. 平方根算法

在任意点x0处Taylor展开

在这里插入图片描述

我还是用另一个简单的语言简单的敲敲代码

float Calc(float x);

int _tmain(int argc, _TCHAR* argv[]){
	for (int i = 0; i <= 10; ++i){
		cout << Calc((float)i) << '\n';
		return 0;
	}
}
float Calc(float a){
	if(a < le -6){
		return 0;
	}
	float x = a / 2;
	float t = a;
	while(fabs(x - t) > le - 6){
		t = x;
		x = (x + a / x) / 2;
	} 
	return x;
}

梯度下降算法

在这里插入图片描述

初始化θ(随机初始化)

沿着负梯度方向迭代,
在这里插入图片描述

更新后的θ使J(θ)更小

在这里插入图片描述

相信这块大家应该表熟悉吧

Taylor展式

o若f(x)二阶导连续,将f(x)在xk处Taylor展开

在这里插入图片描述

牛顿法

上述迭代公式,即牛顿法

该方法可以直接推广到多维:用方向导数代替一阶导,用Hessian矩阵代替二阶导

在这里插入图片描述

牛顿法的特点

  • 牛顿法具有二阶收敛性,在某些目标函数(如线性回归、Logistic回归等)的问题中,它的收敛速度比梯度下降要快。
  • 经典牛顿法虽然具有二次收敛性,但是要求初始点需要尽量靠近极小点,否则有可能不收敛。
    • 如果Hessian矩阵奇异,牛顿方向可能根本不存在。
    • 若Hessian矩阵不是正定,则牛顿方向有可能是反方向。
  • 计算过程中需要计算目标函数的二阶偏导数的逆,时间复杂度较大

二阶导非正定的情况(一元则为负数)

在这里插入图片描述

拟牛顿的思路

求Hessian矩阵的逆影响算法效率,同时,搜索方向并非严格需要负梯度方向或牛顿方向;因此,可以用近似矩阵代替Hessian矩阵,只要满足该矩阵正定、容易求逆,或者可以通过若干步递推公式计算得到。

  • DFP:Davidon– Fletcher – Powell

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

def hessian_r(C, w, g):
	n = w.size
	d= g.dot(w)
	if math.fabs(d) < le - 4:
		return np.identity(n)
	A = np.zeros((n, n))
	for i in range(n):
		A[i] = g[i] * g
	A /= d

	B = np.zeros((n, n))
	w2 = C.dot(w)
	for i in range(n):
		B[i] = w2[i] * w2
	d2 = w.dot(w2)
	if math.fabs(d2) < le - 4:
		return np,identity(n)

	B /= d2
	return C + A - B

  • BFGS:Broyden– Fletcher – Goldfarb - Shanno

矩阵迭代公式

在这里插入图片描述

def lr_BFGS(data, alpha):
	n = len(data[0] ) - 1
	w0 = np.zeros(n)
	w = np.zeros(n)
	g0 = np.zeros(n)
	g = np.zeros(n)
	C = np.identity(n)
	for times in range(1000):
		for d in  data:
			x = np.array(d[:-1])
			y = d[-1]
			C = hessian_r(C, w-w0, g - g0)
			g0 = g
			w0 = w
			g = (y - pred(w, x)) * x
			w = w + alpha * C.dot(g)
		print(times, w)
	return w

def hessian_r(C, w, g):
	n = w.size
	d = g.dot(w)
	if math.fabs(d) < le -5:
		return np.identity(n)
	A = np.zeros((n, n))
	B = np.zeros((n, n))
	A /= d
	At = A.transpose()
	B /= d
	I = np.identity(n)
	return (I -A).dot(C).dot(I - At) + B

总结

  • Taylor展式是数学分析中的重要工具,在近似计算、迭代公式推导等众多方面有重要作用。
  • 梯度下降算法还涉及到下降方向的修正、自适应学习率等问题。

csdn不定期打包发送,微信每日一篇,快乐学习,赢在中国
欢迎大家关注这个微信公众号,尊重原创,转载请注明出处在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值