Taylor公式 – Maclaurin公式
Taylor公式的应用
- 函数值计算
在实践中,往往需要做一定程度的变换。
- 计算e^x
给定正实数x,计算ex=?
一种可行的思路:
求整数k和小数r,使得nx = kln2 + r, |r|≤0.5ln2
从而:
- 解释Gini系数
这个可以从Gini系数、熵、分类误差率三者的关系入手
将f(x)=-lnx在x=1处一阶展开,忽略高阶无穷小,n得到f(x)≈1-x
大家有兴趣的可以看看我以前写的关于决策树的使用以及案例分析,源码微信公众号后台恢复失效,可添加本人微信号,私发给你.
- 平方根算法
在任意点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不定期打包发送,微信每日一篇,快乐学习,赢在中国
欢迎大家关注这个微信公众号,尊重原创,转载请注明出处