学习理论之正则化(Regularization)与模型选择
一、引言
对于一个学习问题,可以假设很多不同的模型,我们要做的是根据某一标准选出最好的模型。例如,在多项式回归中,对于我们的假设模型,我们最要紧的是决定 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)与模型选择的更多相关文章
- PRML读书会第一章 Introduction(机器学习基本概念、学习理论、模型选择、维灾等)
主讲人 常象宇 大家好,我是likrain,本来我和网神说的是我可以作为机动,大家不想讲哪里我可以试试,结果大家不想讲第一章.估计都是大神觉得第一章比较简单,所以就由我来吧.我的背景是统计与数学,稍懂 ...
- 转:机器学习 规则化和模型选择(Regularization and model selection)
规则化和模型选择(Regularization and model selection) 转:http://www.cnblogs.com/jerrylead/archive/2011/03/27/1 ...
- 小白学习之pytorch框架(6)-模型选择(K折交叉验证)、欠拟合、过拟合(权重衰减法(=L2范数正则化)、丢弃法)、正向传播、反向传播
下面要说的基本都是<动手学深度学习>这本花书上的内容,图也采用的书上的 首先说的是训练误差(模型在训练数据集上表现出的误差)和泛化误差(模型在任意一个测试数据集样本上表现出的误差的期望) ...
- zzL1和L2正则化regularization
最优化方法:L1和L2正则化regularization http://blog.csdn.net/pipisorry/article/details/52108040 机器学习和深度学习常用的规则化 ...
- 斯坦福第七课:正则化(Regularization)
7.1 过拟合的问题 7.2 代价函数 7.3 正则化线性回归 7.4 正则化的逻辑回归模型 7.1 过拟合的问题 如果我们有非常多的特征,我们通过学习得到的假设可能能够非常好地适应训练集( ...
- (五)用正则化(Regularization)来解决过拟合
1 过拟合 过拟合就是训练模型的过程中,模型过度拟合训练数据,而不能很好的泛化到测试数据集上.出现over-fitting的原因是多方面的: 1) 训练数据过少,数据量与数据噪声是成反比的,少量数据导 ...
- [笔记]机器学习(Machine Learning) - 03.正则化(Regularization)
欠拟合(Underfitting)与过拟合(Overfitting) 上面两张图分别是回归问题和分类问题的欠拟合和过度拟合的例子.可以看到,如果使用直线(两组图的第一张)来拟合训,并不能很好地适应我们 ...
- ISLR系列:(4.1)模型选择 Subset Selection
Linear Model Selection and Regularization 此博文是 An Introduction to Statistical Learning with Applicat ...
- 偏差(Bias)和方差(Variance)——机器学习中的模型选择zz
模型性能的度量 在监督学习中,已知样本 ,要求拟合出一个模型(函数),其预测值与样本实际值的误差最小. 考虑到样本数据其实是采样,并不是真实值本身,假设真实模型(函数)是,则采样值,其中代表噪音,其均 ...
- CS229 5.用正则化(Regularization)来解决过拟合
1 过拟合 过拟合就是训练模型的过程中,模型过度拟合训练数据,而不能很好的泛化到测试数据集上.出现over-fitting的原因是多方面的: 1) 训练数据过少,数据量与数据噪声是成反比的,少量数据导 ...
随机推荐
- 【转】PHP字符转义相关函数小结
文章中有不正确的或者说辞不清的地方,麻烦大家指出了--- 与PHP字符串转义相关的配置和函数如下: 1.magic_quotes_runtime 2.magic_quotes_gpc 3.addsla ...
- C#中的枚举类型(enum type)
ylbtech 原文 C#中的枚举类型(enum type) 概念 枚举类型(enum type)是具有一组命名常量的独特的值类型.在以下示例中: enum Color { Red, Green, B ...
- 安装配置Apache
1.更新和升级系统 sudo apt-get update sudo apt-get upgrade 2.安装和配置apache 2.1.安装apache sudo apt-get install a ...
- AngularJs学习教程
AngularJs 目录 AngularJs实战一 购物车 细讲ng-repeat指令 ng-show和ng-hide ng-class指令 ng-src和ng-href 应用控制器中的职责 watc ...
- 【C#】如何创建xml文件以及xml文件的增、改
增: using System; using System.Collections.Generic; using System.Linq; using System.Text.RegularExpre ...
- LeetCode Database: Delete Duplicate Emails
Write a SQL query to delete all duplicate email entries in a table named Person, keeping only unique ...
- C++ 串
♣ string 的基类basic_string中没有虚函数,它无意成为基类.更像是为了处理字符相关的问题而专门提供的一个工具及操作方法.如:想要在一个字符串str1中查找str2,没必要每次都去写K ...
- strcpy基本用法
C语言标准库函数strcpy,把从src地址开始且含有NULL结束符的字符串复制到以dest开始的地址空间. C语言函数 原型声明:extern char *strcpy(char* dest, co ...
- pybombs 安装
参考:https://github.com/gnuradio/pybombs 先装:pip 然后: pip install PyBOMBS 更新源: pybombs recipes add gr-re ...
- gem 相关命令
gem #查看gem源 gem sources # 删除默认的gem源 gem sources --remove http://rubygems.org/ # 增加taobao作为gem源 gem s ...