CH4 带有约束条件的最小二乘法

重点提炼

提出带有约束条件的最小二乘学习法的缘故:

 

左图中可见:一般的最小二乘学习法有个缺点----对于包含噪声的学习过程经常会过拟合

右图:有了空间约束之后,学习到的曲线能避免过拟合,得到想要的学习结果(x-y关系)。

带有约束条件的最小二乘学习法具体方法

1.部分空间约束的最小二乘学习法

① 公式

在上面普通最小二乘学习法公式基础上添加一个约束条件: 

② 对线性模型进行带有约束条件的最小二乘学习,得到参数theta

 

③ 优点:只用了参数空间的一部分

④ 缺点:由于正交投影矩阵P的设置有很大的自由度,所以在实际应用中操作较难

2.L2约束的最小二乘学习法----圆形

① 公式

在普通最小二乘学习法公式基础上添加一个约束条件:

这里用到的二范数,所以此种方法叫做L2,L2约束的最小二乘学习法是以参数空间的原点为圆心,在一定半径范围的圆内进行求解。

② 利用拉格朗日对偶问题,通过求最优解问题,得到参数theta

③ 优点:比起部分空间约束的最小二乘学习法,L2约束的最小二乘学习法在操作上相对容易,避免了空间约束方法中有很大自由度去设置矩阵P

3.一般L2约束的最小二乘学习法----椭圆形

① 公式

在普通最小二乘学习法公式基础上添加一个约束条件:,可以把参数限制在椭圆形状的数据区域内

② 参数的解

如何选择模型?

1.L2约束的最小二乘学习法中选择高斯核模型的参数影响:

带宽h太小

函数会呈锯齿状

带宽h太大

函数过于平滑

正则化参数太小

过拟合现象明显

正则化参数太大

结果趋于直线

所以要选择合适的带宽以及正则化参数

2.模型选择的含义

采用不同的输入训练样本,来决定机器学习算法中包含的各个参数值,叫做模型选择。

3.模型选择的一般流程

最重要的是第三步泛化误差,即对未知的测试样本求预测误差

4.交叉验证法求泛化误差

① 提出原因:可以通过交叉验证求得最小的泛化误差,从而确定最佳的模型参数;交叉验证法可以对泛化误差进行较为精确的评估,防止强过拟合

② 思路:把训练样本的一部分拿出来作为测试样本

③ 算法流程:

带有约束条件的最小二乘学习法结合交叉验证法,在实际应用中是非常有效的回归方法!

P33

通过运行代码学习

1.“对线性模型进行部分空间约束的最小二乘法学习,其中线性模型基函数是三角多项式”

公式中的约束矩阵P即代码中的PP,在这里是手动进行设置的,也可以通过后续ch13节中的pca基于数据进行设置。满足的条件是:

,其中第一行到第十一行这部分子矩阵上的对角线上值为1,其它都为0

普通最小二乘法学习结果

受约束的最小二乘法学习结果

与x-y训练数据做比较

结果显示,通过约束设置,使得过拟合得到了一定程度的减轻。

P33

补充知识来理解书上内容

Matlab 中 diag函数

X = diag(v):向量v在方阵X的主对角线上

例:

v=[1 2 3];
diag(v)

ans =

1 0 0
0 2 0
0 0 3

P36

通过运行代码学习

“对高斯核模型进行l2约束的最小二乘学习”

下面的k与K分别是训练集以及测试集中的基函数,这里因为用了高斯核,所以

无约束的最小二乘法中,参数解,所以有: 

因此就得到了输出观测值:

在L2约束的最小二乘法中,参数解,所以 

得到了L2约束后的输出观测值y

可视化结果:绿色是无约束的最小二乘法后输出的预测值y,红色是L2约束的最小二乘法输出的预测值y,蓝色圈是真实的训练数据的输出值y。

可见红色部分即L2参数约束后,有效防止了过拟合。

P36

补充知识来理解书上内容

Matlab 中repmat函数

Matlab 中eye函数

eye(n)会生成n*n的矩阵,且正对角线上都是1,其它都是0

P42

通过运行代码学习

“对高斯核模型的l2约束的最小二乘学习法进行交叉验证---得到最小的泛化误差---从而选择最佳的高斯核模型参数

带宽h设为0.03、0.3、3三种可能;正则化参数lameda设为0.0001、0.1、100三种可能

把50个训练集平均分为m=5等份

下面这步之后,训练集还是被平分为5份,只是顺序全部随机化了

1.当h=0.03时

(1)对编号为2、3、4、5的40个作为训练集得到参数,再得到编号为1作测试集的y,再计算泛化误差

① Lameda=0.0001时计算误差

② Lameda=0.1时计算误差

③ Lameda=100时计算误差

(2)对编号为1、3、4、5的40个作为训练集得到参数,再得到编号为2作测试集的y,再计算泛化误差

④ Lameda=0.0001时计算误差

⑤ Lameda=0.1时计算误差

⑥ Lameda=100时计算误差

(3)对编号为1、2、4、5的40个作为训练集得到参数,再得到编号为3作测试集的y,再计算泛化误差

⑦ Lameda=0.0001时计算误差

⑧ Lameda=0.1时计算误差

⑨ Lameda=100时计算误差

(4)对编号为1、2、3、5的40个作为训练集得到参数,再得到编号为4作测试集的y,再计算泛化误差

⑩ Lameda=0.0001时计算误差

11 Lameda=0.1时计算误差

12 Lameda=100时计算误差

(5)对编号为1、2、3、4的40个作为训练集得到参数,再得到编号为5作测试集的y,再计算泛化误差

13 Lameda=0.0001时计算误差

14 Lameda=0.1时计算误差

15 Lameda=100时计算误差

2.当h=0.3时

(1)对编号为2、3、4、5的40个作为训练集得到参数,再得到编号为1作测试集的y,再计算泛化误差

16 Lameda=0.0001时计算误差

17 Lameda=0.1时计算误差

18 Lameda=100时计算误差

(2)对编号为1、3、4、5的40个作为训练集得到参数,再得到编号为2作测试集的y,再计算泛化误差

19 Lameda=0.0001时计算误差

20 Lameda=0.1时计算误差

21 Lameda=100时计算误差

(3)对编号为1、2、4、5的40个作为训练集得到参数,再得到编号为3作测试集的y,再计算泛化误差

22 Lameda=0.0001时计算误差

23 Lameda=0.1时计算误差

24 Lameda=100时计算误差

(4)对编号为1、2、3、5的40个作为训练集得到参数,再得到编号为4作测试集的y,再计算泛化误差

25 Lameda=0.0001时计算误差

26 Lameda=0.1时计算误差

27 Lameda=100时计算误差

(5)对编号为1、2、3、4的40个作为训练集得到参数,再得到编号为5作测试集的y,再计算泛化误差

28 Lameda=0.0001时计算误差

29 Lameda=0.1时计算误差

30 Lameda=100时计算误差

3.当h=3时

(1)对编号为2、3、4、5的40个作为训练集得到参数,再得到编号为1作测试集的y,再计算泛化误差

31 Lameda=0.0001时计算误差

32 Lameda=0.1时计算误差

33 Lameda=100时计算误差

(2)对编号为1、3、4、5的40个作为训练集得到参数,再得到编号为2作测试集的y,再计算泛化误差

34 Lameda=0.0001时计算误差

35 Lameda=0.1时计算误差

36 Lameda=100时计算误差

(3)对编号为1、2、4、5的40个作为训练集得到参数,再得到编号为3作测试集的y,再计算泛化误差

37 Lameda=0.0001时计算误差

38 Lameda=0.1时计算误差

39 Lameda=100时计算误差

(4)对编号为1、2、3、5的40个作为训练集得到参数,再得到编号为4作测试集的y,再计算泛化误差

40 Lameda=0.0001时计算误差

41 Lameda=0.1时计算误差

42 Lameda=100时计算误差

(5)对编号为1、2、3、4的40个作为训练集得到参数,再得到编号为5作测试集的y,再计算泛化误差

43 Lameda=0.0001时计算误差

44 Lameda=0.1时计算误差

45 Lameda=100时计算误差

所有循环经历后得到的误差:是一个3*3*5的矩阵

求5组训练集上的泛化误差均值,并选出其中最小误差值

得到对应的最佳参数h=0.3,lameda=0.1,计算最佳参数时的参数,以及真正测试集的输出结果,可视化拟合结果:

P42

补充知识来理解书上内容

Matlab 中floor函数

Matlab 中randperm函数

Matlab 中数值关系符号

Matlab 中mean函数

mean (A, 3) 是对矩阵A中第三维求均值

Matlab 中min函数

min(A,[],2)返回一个列向量,其第i个元素是A矩阵的第i行上的最大值

最新文章

  1. CentOS中Mysql常用操作
  2. 浅谈Android应用保护(零):出发点和背景
  3. 从零开始学习Android(二)从架构开始说起
  4. [Linux基础]Linux基础知识入门及常见命令.
  5. Ztree插件,定位节点时(focus)不能进入可视区域BUG解决方案
  6. iOS-常用的辅助工具软件
  7. poj1840 哈希
  8. SQL Server 修改排序规则
  9. LevelDB的源码阅读(二) Open操作
  10. int 与 Integer 的区别
  11. spring boot(四) 多数据源
  12. SparkSQL【1.x版本】字段敏感不敏感问题
  13. 获奖感想和python学习心得
  14. AX_SysExcel
  15. Resolved validation conflict with readonly
  16. Python基础知识之疑点难点
  17. CSS font-family 字体介绍,\5b8b\4f53 表示“宋体”
  18. 【CF860E】Arkady and a Nobody-men 长链剖分
  19. vs2010将写好的软件打包安装包经验
  20. struts2框架之OGNL表达式概述(在代码中使用OGNL表达式)

热门文章

  1. Android 设置TextView字体颜色
  2. spring boot与activiti集成实战 转
  3. H3C 物理层
  4. javascript 元素的大小
  5. h5 的canvas绘制基本图形
  6. pip安装软件包报Could not fetch URL
  7. poj 2996
  8. JPA一对多循环引用的解决&&JackSon无限递归问题
  9. Intellij Idea更换主题
  10. linux 位操作