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行上的最大值

《图解机器学习-杉山将著》读书笔记---CH4的更多相关文章

  1. 《图解机器学习-杉山将著》读书笔记---CH1

    CH1 什么是机器学习 重点提炼 机器学习的种类: 常分为:监督学习.无监督学习.强化学习等 监督学习是学生从老师那获得知识,老师提供对错指示 无监督学习是在没有老师的情况下,学生自习 强化学习是在没 ...

  2. 《图解机器学习-杉山将著》读书笔记---CH5

    CH5 稀疏学习 重点提炼 提出稀疏学习的缘故: 虽然带有约束条件的最小二乘学习法结合交叉验证法,在实际应用中是非常有效的回归方法,但是,当参数特别多时,计算参数以及预测值需要大量时间.此时,我们要解 ...

  3. 《图解机器学习-杉山将著》读书笔记---CH3

    CH3 最小二乘学习法 重点提炼 提出最小二乘学习法的缘故: 最小二乘学习法公式 对不同模型进行最小二乘法学习,得到最小二乘公式中的参数theta: 1.线性模型   代入3.1公式,对参数求偏导,偏 ...

  4. 《图解机器学习-杉山将著》读书笔记---CH2

    CH2 学习模型 重点提炼 学习模型作用: 使特定函数与数据集相近似 学习模型类型: 1.线性模型 (1)最简单的线性模型,缺点:只能表现线性的输入输出函数,不能很好地解决实际问题 (2)基于参数的线 ...

  5. 机器学习介绍(introduction)-读书笔记-

    一,什么是机器学习 第一个机器学习的定义来自于 Arthur Samuel.他定义机器学习为,在进行特定编程的情况下,给予计算机学习能力的领域.Samuel 的定义可以回溯到 50 年代,他编写了一个 ...

  6. LogisticRegression Algorithm——机器学习(西瓜书)读书笔记

    import numpy as np from sklearn.datasets import load_breast_cancer import sklearn.linear_model from ...

  7. C#温故知新:《C#图解教程》读书笔记系列

    一.此书到底何方神圣? 本书是广受赞誉C#图解教程的最新版本.作者在本书中创造了一种全新的可视化叙述方式,以图文并茂的形式.朴实简洁的文字,并辅之以大量表格和代码示例,全面.直观地阐述了C#语言的各种 ...

  8. 《C#图解教程》读书笔记之一:C#和.NET框架

    本篇已收录至<C#图解教程>读书笔记目录贴,点击访问该目录可获取更多内容. 一.在.NET之前的编程世界 C#语言是在微软公司的.NET框架上开发程序而设计的,首先作者给大家纠正了一下C# ...

  9. 《C#图解教程》读书笔记之二:存储、类型和变量

    本篇已收录至<C#图解教程>读书笔记目录贴,点击访问该目录可获取更多内容. 一.类型初窥:掀起你的盖头来 (1)C程序是一组函数和数据类型,C++程序是一组函数和类,而C#程序是一组类型声 ...

随机推荐

  1. 图表echarts折线图,柱状图,饼状图

    总体就是有折线图相关图标的设置,x,y轴的设置,x,y轴或者数据加上单位的设置.饼状图如何默认显示几个数据中的某个数据 折线图:legend(小标题)中间默认是圆圈 改变成直线 在legend设置的时 ...

  2. HDU1711 Number Sequence 题解 KMP算法

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1711 题目大意:最基础的字符串匹配,只不过这里用整数数组代替了字符串. 给你两个数组 \(a[1..N ...

  3. git提交空目录的方法

    大家有时候希望从git仓库中拉取代码时目录就已经存在了,不需要再手动创建,但是git并不允许git提交空目录,应该怎么办呢?这篇文章通过可能遇到的两个情况来分别介绍如何解决,有需要的朋友们可以参考借鉴 ...

  4. 《代码整洁之道 中文版》高清 PDF 电子书下载

    代码整洁之道.PDF 下载 代码整洁之道.PDF 中文版 高清 PDF  电子书下载 代码整洁之道下载  点我下载 作者简介  · · · · · · Robert C. Martin,Object ...

  5. js基础——变量、作用域、内存

    1.new关键字创建的是引用类型: eg. var box = new Object();      box.name = "Linda";//引用类型添加属性没问题     al ...

  6. 开源项目使用 appveyor 自动构建

    我写了几个开源项目,我想要有小伙伴提交的时候自动运行单元测试,自动运行编译,这样可以保证小伙伴提交清真的代码 本文将会告诉大家如何接入 appveyor 自动构建方案,在 Github 上给自己的开源 ...

  7. 2019-8-31-C#-匹配可空变量

    title author date CreateTime categories C# 匹配可空变量 lindexi 2019-08-31 16:55:58 +0800 2019-06-01 08:40 ...

  8. dotnet 启动 JIT 多核心编译提升启动性能

    用2分钟提升十分之一的启动性能,通过在桌面程序启动 JIT 多核心编译提升启动性能 在 dotnet 可以通过让 JIT 进行多核心编译提升软件的启动性能,在默认托管的 ASP.NET 程序是开启的, ...

  9. geoip ip2region2 with spark

    上一篇文章中 我使用 maxmind的免费库开发了一个waterdrop的 插件,测试数据发现,国内的有些市级还是不准确,而且香港并不是显示中国,这就不友好了. 找了一下,发下 ip2region 这 ...

  10. 【Jenkins】构建一个maven项目

    一 .Ubuntu18.04安装Maven 官方安装文档:http://maven.apache.org/install.html ①去官网下载maven: ②解压到/opt/maven目录(我安装在 ...