0.3.1 关键书籍
- 2012.李航.统计学习方法.pdf
- 第1章 统计学习方法概论
- 第2章 感知机
- 第3章 k近邻法
- 第4章 朴素贝叶斯法
- 第5章 决策树
- 第6章 逻辑斯谛回归与最大熵模型
- 第7章 支持向量机
- 第8章 提升法
- 第9章 EM算法及其推广
- 第10章 隐马尔可夫模型
- 第11章 条件随机场
- 第12章 统计学习方法总结
- 附录A 梯度下降法
- 附录B 牛顿法与拟牛顿法
- 附录C 拉格朗日对偶性
…
0.3.2 学习示例
以下风险定价中求解无约束最优化问题时,为加快收敛速度所用牛顿法为例:
0.3.2.1 牛顿法原理
0.3.2.2 计算过程
构建示例:
据上述牛顿法,下一个取值为:
%7D%7Bf%5E%60(x_0)%7D%5C%5C%0Ax_1%20%3D%20x_0%20-%20%5Cfrac%7Bx_0%5E2-2%7D%7B2x_0%7D%20%3D%20(x_0%20%2B%202%2Fx_0)%2F2%5C%5C%0A#card=math&code=x_1%20%3D%20x_0%20-%20%5Cfrac%7Bf%28x_0%29%7D%7Bf%5E%60%28x_0%29%7D%5C%5C%0Ax_1%20%3D%20x_0%20-%20%5Cfrac%7Bx_0%5E2-2%7D%7B2x_0%7D%20%3D%20%28x_0%20%2B%202%2Fx_0%29%2F2%5C%5C%0A&id=S02k6)
- 代码明细(SAS)
%macro fcal(x=,t=,);
data &t.;
&t. = (&x.) ** 2 - 2;
run;
%mend;
%macro fcal_x(b=,fl=0.000001);
%let bf = 1;
%do i = 0 %to 100;
%fcal(x=&b., t=f);
%fcal(x=&b.-&fl., t=f_0);
%fcal(x=&b.+&fl., t=f_1);
data f_all;
merge f f_0 f_1;
x0 = &b.;
f_ = (f_1 - f_0)/(&fl.*2); # 导函数模拟
/* f_ = 2 * x0; */
x1 = x0 - f/f_;
run;
data _null_;
set f_all;
call symput("bb", x1);
run;
%fcal(x=&bb., t=f1);
data _null_;
set f1;
f1_ = f1 < 0.01;
/* f1_ = abs(&bb. - &b.) < 0.01; */
call symput("brf", f1);
call symput("bf", f1_);
run;
%put --------------------------- &bb. &brf. &bf.;
%if &bf. = 1
%then %let i = 100;
%else %let b = &bb.;
%end;
%mend;
%fcal_x(b=4);
/*
--------------------------- 2.2500000001 3.0625000005 0
--------------------------- 1.5694444446 0.4631558647 0
--------------------------- 1.4218903638 0.0217722067 0
--------------------------- 1.4142342859 0.0000586154 1
*/
- 代码明细(Python)
def sqrt_by_bisection(n):
low, last = 0, 0
up = n
mid = (low + up)/2
while abs(mid - last) > eps:
if mid * mid > n:
up = mid
else:
low = mid
last = mid
mid = (up + low)/2
return mid
print(sqrt_by_bisection(2))
%timeit sqrt_by_bisection(2)
# 1.4142135605216026
# 6.26 µs ± 6.98 ns per loop (mean ± std. dev. of 7 runs, 100000 loops each)
如上,快速计算.