一、引言

对于一个学习问题,可以假设很多不同的模型,我们要做的是根据某一标准选出最好的模型。例如,在多项式回归中,对于我们的假设模型,我们最要紧的是决定 k 到底取多少合适,能不能有一种方法可以自动选择出可以在偏差和方差(关于偏差和方差的理论,参考:

学习理论

)之间做出均衡的模型?

为了具体讨论,本文中假设有一个有限的模型集,我们就是要从这个模型集中选出一个最好的模型。

二、 交叉验证

给定训练集, 采用经验风险最小化的方法训练模型,于是很容易想到的就是,把模型集中训练误差最小的模型选出来,就有了下面的算法:

1. 用训练集训练出每一个假设模型,从而可以得到某个假设

2. 选出训练误差最小的模型

遗憾的是,这种方法行不通。就以最开始提到选择出多项式线性回归中,如何选择合适的阶数为例,显然阶数越高的模型,训练误差越小,但是这种模型的方差高,维度高,根据

学习理论

中的知识,这种模型是不行的.

下面介绍一种较好的方法,即hold-out交叉验证,又叫简单交叉验证:

1. 随见把分成(例如整个数据的70%)和(剩下的数据),这里被称为hold-out交叉验证集

2. 只用去训练每一个模型,得出相应的某个假设

3. 计算每个模型在上的误差表示假设针对集合中样本的经验误差),选出这个误差最小的模型

通过测试没有用来训练的集合中样本的误差,可以得出一个对假设的泛化误差较好的估计,然后选出估计的泛化误差最小的模型。通常1/4-1/3的数据用来作为,典型值是30%.

在第3步中,当我们选择出之后,再用整个训练集重新训练一次会是一个不错的选择。

但是用hold-out交叉验证会浪费掉大约30%的数据信息,因为这一部分仅仅用来作为测试了,即使像我们上面说到的,最后一步再用整个训练集对选出的模型重新训练,但是这个模型也同样只是对0.7m个训练样本来说是一个好模型,而不是对m个训练样本而言(m是整个训练集中样本个数)。当然,数据量很大的时候,这种方法完全可以,因为信息足够多,但是当训练样本数本来就很小(例如m = 20)的时候,我们就需要做出改进了。下面就介绍一种方法来解决这种问题:k折交叉验证(k-fold cross validation):

1. 随机把分成 k 个不相交的子集,每个子集有 m/k 个样本,把这些子集记作:

2. 对于每一个模型

    用训练模型(即用除了外的所有训练集数据),得出假设.

    用测试,得到

 通过对所有j, 计算的平均值,即得到了的泛化误差的估计.

3 .选择出泛化误差估计值最小的模型,然后用整个训练集重新训练,得到最终结果。

通常 k 设为10.尽管每个子集的数据量是整个数据集的1/k, 远远小于整体数据量,但是这个方法计算效率还是要比hold-out交叉验证低,因为第二步中每一个模型都要都要训练 k 次.

有时会将 k 极端地设置为m(即k与整个训练集中的样本数目相等),这种方法有着特别的名称:

三、特征选择

假设有一个监督学习问题,训练样本的特征数量n很大(例如n » m),但是只有一小部分特征与我们的学习任务相关。因此直接使用所有的特征将会很容易出现过拟合的问题。

于是,需要使用特征选择算法减少特征的数量。对于n 个特征,我们可以有 2n 种选择。通常用启发式的搜索过程来找出较好的特征(较相关的特征),下面的搜索过程叫做前向搜索:

1. 初始化

2. 循环{

  (a),用交叉验证评估(即,只用特征来训练学习算法,然后估计学习出模型的泛化误差)

  (b)把(a)中最好的特征子集作为选择出的特征

}

3. 把上述整个搜索过程中泛化误差最小的特征子集作为我们选择出的特征。

上面第二步的外层循环终止条件可以设为当包含了所有特征时,或所选出的特征数量超过我们预设值的时候(比如我们只想选出10个特征)。

上面所述的算法其实是封装式特征选择算法(wrapper model feature selection)的一个特例,因为这个算法是封装在我们对模型学习算法里面的,即需要重复使用学习算法(最小化误差)去估计每一个特征子集的好坏。除了前向搜索,还有反向搜索,即开始令,然后每次删除一个特征,比较删除前后连个特征子集的好坏,直到为止.

  封装式学习算法通常效果都不错,但是由于每一次都要调用学习算法去估计特征子集的好坏,使得计算效率低。在一个完整的前向搜索过程中,当以时为终止条件时,大约需要调用学习算法次.

  过滤式特征选择(Filter feature selection)算法同样是一种启发式算法,但是计算代价要小很多。主要思想是计算一个简单的分数去衡量对于类别集,特征所含信息量的大小。然后选择出 k 个最大的特征.

所以关键是如何定义,在实践中(特别是特征值是离散的时候),常常用之间的互信息(mutual information)来表示

上面式子中可以根据对应事件在训练集中的分布估计出来,例如就表示在训练集中特征属于类别的概率,表示特征出现的概率。

注意到可以写成 divergence的形式:

这个表达式是用来衡量之间的不同程度的,如果是互相独立的随机变量,那么,由上面的式子很容易知道KL-divergence的值为0.

这和的意义很一致,如果是互相独立的随机变量,那么特征很明显没有任何关于的信息,因此应该是一个很小的值,相反,如果特征包含有很多与相关的信息,的值就很大。

计算出来评分之后,用交叉验证来确定到底选取几个特征合适。

四、贝叶斯统计和正则化

这一部分继续讨论如何遏制过拟合。

在机器学习笔记的最开始,我们提到了一种你和参数的方法就是最大似然函数(maximum likelihood (ML)):

我们把称为的先验概率,给定训练集,当我们要对一个新的进行预测时,就可以计算参数的后验概率:

等式中根据在学习算法中实际使用的模型而定。例如,如果使用贝叶斯逻辑回归,那么如果假设为,则.

对于一个新样本,用参数的后验分布计算标签集的后验分布:

根据这个概率值求出在给定情况下的期望值就是预测的输出值:

但是在实际操作中,计算这些后验概率分布会很棘手,因为由上面式子可以看出需要对(通常是高维)进行积分。

因此在实践过程中,我们近似地计算的后验概率分布,而不是直接如同上面讨论的一样去计算。一种常用的近似方法是用一个单点估计代替的后验概率分布(如等式2).

的最大后验(MAP,maximum a posteriori)估计:

上面等式除了最后的,其余部分和ML(最大似然)估计一样。

在实际应用中,对于先验概率通常假设.

在实践中,贝叶斯最大后验(MAP)估计比起最大似然(ML)估计更加容易避免过拟合。

学习理论之正则化(Regularization)与模型选择的更多相关文章

  1. PRML读书会第一章 Introduction(机器学习基本概念、学习理论、模型选择、维灾等)

    主讲人 常象宇 大家好,我是likrain,本来我和网神说的是我可以作为机动,大家不想讲哪里我可以试试,结果大家不想讲第一章.估计都是大神觉得第一章比较简单,所以就由我来吧.我的背景是统计与数学,稍懂 ...

  2. 转:机器学习 规则化和模型选择(Regularization and model selection)

    规则化和模型选择(Regularization and model selection) 转:http://www.cnblogs.com/jerrylead/archive/2011/03/27/1 ...

  3. 小白学习之pytorch框架(6)-模型选择(K折交叉验证)、欠拟合、过拟合(权重衰减法(=L2范数正则化)、丢弃法)、正向传播、反向传播

    下面要说的基本都是<动手学深度学习>这本花书上的内容,图也采用的书上的 首先说的是训练误差(模型在训练数据集上表现出的误差)和泛化误差(模型在任意一个测试数据集样本上表现出的误差的期望) ...

  4. zzL1和L2正则化regularization

    最优化方法:L1和L2正则化regularization http://blog.csdn.net/pipisorry/article/details/52108040 机器学习和深度学习常用的规则化 ...

  5. 斯坦福第七课:正则化(Regularization)

    7.1  过拟合的问题 7.2  代价函数 7.3  正则化线性回归 7.4  正则化的逻辑回归模型 7.1  过拟合的问题 如果我们有非常多的特征,我们通过学习得到的假设可能能够非常好地适应训练集( ...

  6. (五)用正则化(Regularization)来解决过拟合

    1 过拟合 过拟合就是训练模型的过程中,模型过度拟合训练数据,而不能很好的泛化到测试数据集上.出现over-fitting的原因是多方面的: 1) 训练数据过少,数据量与数据噪声是成反比的,少量数据导 ...

  7. [笔记]机器学习(Machine Learning) - 03.正则化(Regularization)

    欠拟合(Underfitting)与过拟合(Overfitting) 上面两张图分别是回归问题和分类问题的欠拟合和过度拟合的例子.可以看到,如果使用直线(两组图的第一张)来拟合训,并不能很好地适应我们 ...

  8. ISLR系列:(4.1)模型选择 Subset Selection

    Linear Model Selection and Regularization 此博文是 An Introduction to Statistical Learning with Applicat ...

  9. 偏差(Bias)和方差(Variance)——机器学习中的模型选择zz

    模型性能的度量 在监督学习中,已知样本 ,要求拟合出一个模型(函数),其预测值与样本实际值的误差最小. 考虑到样本数据其实是采样,并不是真实值本身,假设真实模型(函数)是,则采样值,其中代表噪音,其均 ...

  10. CS229 5.用正则化(Regularization)来解决过拟合

    1 过拟合 过拟合就是训练模型的过程中,模型过度拟合训练数据,而不能很好的泛化到测试数据集上.出现over-fitting的原因是多方面的: 1) 训练数据过少,数据量与数据噪声是成反比的,少量数据导 ...

随机推荐

  1. HTTP长连接(Comet)实现方式示例

    昨天看了comet的介绍后,虽然大概知道了comet的原理,不过没实际用过还是不太清楚,于是今天又在网上翻了一下别的网友共享的comet实现http长连接的例子,在 Comet Server Push ...

  2. Java并发编程-volatile

    一. volatite 简述Java 语言提供了一种稍弱的同步机制,即 volatile 变量.用来确保将变量的更新操作通知到其他线程,保证了新值能立即同步到主内存,以及每次使用前立即从主内存刷新. ...

  3. 将a、b的值进行交换,并且不使用任何中间变量

    方法1:用异或语句 a = a^b; b = a^b; a = a^b; 注:按位异或运算符^是双目运算符,其功能是参与运算的两数各对应的二进制位相异或,当对应的二进制相异时,结果为1.参与运算数仍以 ...

  4. cocos2dx 水波纹Shader

    // on "init" you need to initialize your instance bool HelloWorld::init() { ////////////// ...

  5. 网站压力测试工具-Webbench源码笔记

    Ubuntu 下安装使用 1.安装依赖包CTAGS sudo apt-get install ctage 2.下载及安装 Webbench http://home.tiscali.cz/~cz2105 ...

  6. 数往知来 ADO.NET <八>

    ADO.NET基础 学习目的:通过程序访问数据库 ,ADO.NET就是一组类库, -->connection   用来连接数据库的类 语法:首先需要一个连接字符串 -->以SQL serv ...

  7. bzoj 3594 [Scoi2014]方伯伯的玉米田(DP+二维BIT)

    [题目链接] http://www.lydsy.com/JudgeOnline/problem.php?id=3594 [题意] 给定一个n个数的序列,有K次将一个区间内的数加1的机会,问最长不下降子 ...

  8. 捣蛋phpwind控制器注入

    在PwBaseController 里面,会有这个方法的存在 /** * action Hook 注册 * * @param string $registerKey 扩展点别名 * @param Pw ...

  9. visual assistent 过期

    VA功能超级好使,下载的一般都有时间限制,但又不想买正版. 我的是32位系统 vs2008: 将VA_X.dll文件拷到 (x86)C:\Program Files\Visual Assist X\ ...

  10. Linux 的 screen用法

    screen可以将任务挂起,即将任务放在后台,一般5个任务左右. 1.新建screen会话:直接输入screen命令或者screen -S [会话名称] 2.退出会话:按下组合键Ctrl+a并松开,此 ...