【斯坦福---机器学习】复习笔记之特征选择
2015-09-18 19:38
337 查看
本讲大纲:
1.VC维(VC dimension)2.模型选择(model selection)
—交叉验证(cross validation)
—特征选择(feature selection)
1.VC维
给定猜想类,定义VC维(Vapnik-Chervonenkis dimension),记作VC(H),表示能够被
分开的最大集合的尺寸(如果
能够分开任意大的集合,那么
).
例如,考虑下面几个的三个点:
在二维中线性分类器能够把它们分开吗(
)?显然是可以的. 事实上,任意这些点可能的八种标签情况,我们都能找到“零训练误差”的线性分类器.
但是,这个猜想不能分开四个点的集合,因此VC(H)=3.
注意,即使可能有大小为3的集合不能被分开,VC维依然为3. 例如,三个点在同一条线上时(左图),那么没有办法找到线性分隔器(右图).
在VC维的定义下,为了证明VC(H)至少是d,我们要证明H能分开至少一个大小为d的集合.
(在学习理论中最重要的定理!)
定理:假设有
,并且
,那么至少有概率为
,对所有的
,有
因此,
换句话来说,如果猜想有有限的VC维,当m足够大时会有一致收敛性. 跟之前一样,我们可以以
的形式给出
的边界.
推论:
对所有的
保持至少
的概率,满足
换句话说,用
训练好的训练样本数量和VC维是线性的.结果表明,对大部分的猜想类,vc维(假设合理的参数化)和参数的数量大致也是线性相关的.把这两个放到一起,可以说(对于最小化训练误差的算法来说)需要的训练样本的数量大致和参数的类型是线性的.
2.模型选择
假设我们有一个有限的模型集合,我们要从这些模型中做出选择,例如我们要从SVM,神经网络或者是逻辑回归中做出选择,那么我们的模型集合就要包含这些模型.
交叉验证
假设有训练集S,根据经验风险最小化的知识,我们可能会想到通过ERM来进行模型选择:
1.在训练集S上训练每个模型Mi,得到猜想hi;
2.选择训练误差最小的猜想
但是这个算法是不行的.比如选择多项式的次数,次数越高的多项式,对数据集的拟合程度越好,训练误差也越小,因此这个方法选择的是高方差,高次的多项式模型,显然是一个很糟糕的模型.
保留交叉验证(hold-out cross validation),也称为simple cross validation.
1.随机把训练集S分成两个子集,
(70%)和
(30%).
称为保留交叉验证集.
2.用
训练每个模型,得到猜想hi.
3.选择在交叉验证集中有最小错误
的猜想.
通过在没有训练的交叉验证集测试,对每个猜想的真实泛化误差有了一个更好的估计,并且能够选择最小泛化误差的猜想. 一般来说,1/4-1/3的数据是用来做交叉验证的,30%是一个典型的选择.
视情况而定,第三步也可以替换成通过
选择模型Mi,然后用整个训练集训练Mi(一般情况下,这个效果是不错的,但是如果模型对数据敏感就不行了.)
交叉验证的缺点是浪费了30%的数据,即使我们最后用整个训练集去训练模型. 在数据充足并且很容易获得的情况下,这是好的,但是如果数据是很稀少的,我们需要采用另外一种方式了.
k-fold交叉验证(k-fold cross validation)
1.随机把S分成k个子集,每个有m/k个训练样本,为S1,…,Sk;
2.对每个模型,我们这样评价:
3.选择具有最低估计泛化误差的模型,并且用整个数据集对模型进行训练,最后输出的猜想就是我们的答
案.
一个对fold典型的选择是k=10.
留一交叉验证(leave-one-out cross validation)
当数据非常稀有时,极端的选择是把k=m,为了尽可能使留下来的数据少,这种情况下我们会用除了一个之外的数据集进行训练,剩下的用来测试,k个错误的平均值用来作为模型的估计泛化误差.
即使这在边说的是交叉验证用来进行模型选择,但是只有单个模型时也可以用来评价模型的好坏.
特征选择
有的时候,特征的数量是非常大的,但是可能只是很小一部分的特征跟学习任务是有关系的. 这个时候就需要特征选择算法减少特征的数量. 给定n个特征,有
种子集可能的选择,枚举所有的可能性代价太大,一般是要采用启发式搜索(heuristic search).
下面的搜索程序叫向前搜索(forward search):
外层循环当特征数等于n或者达到预先设定的阈值时终止.
上面描述的算法叫做包装模型特征选择(wrapper model feature selection).
除了向前搜索,还有向后搜索(backward search):
开始
,然后每次循环删除一个特征直到
包装特征选择算法经常效果很好,但是需要多次调用学习算法,计算的代价很大.
过滤特征选择(Filter feature selection)是启发式搜索,但是计算的代价小得多.
思想是计算根据每个特征对标签y的贡献得到一个分数,然后选择k个最大分数的特征.
可以根据xi和y的相关性计算分数. 但是在现实中,一个比较常见的做法是(尤其对于离散特征)选择S(i)为xi和y的**互信息(mutual information)**MI(xi,y):
(上面的等式假设可x和y是二元值,但是更常见的是在变量的定义域内)
mutual information也可以表示为Kullback-Leibler (KL) divergence:
如果xi和y是相互独立的随机变量,两个变量的分布的KL-divergence为0.
最后一个问题,根据分数选出k个特征,但是这个k是则呢确定的?一个标准的方式是用交叉验证去选择可能的k.
相关文章推荐
- POI 导出EXCEL样式实例
- 比log4j更好的logback、简介和优点详解
- iOS开发 -UIScrollView详解
- 表单的数据转换为json对象
- Android CheckBox实现SwitchButton
- 一些iOS常用的第三方库和控件
- BOM之location对象
- 了解innodb_support_xa(分布式事务)
- Linux top命令的用法详细详解
- LeetCode算法第1篇:263 Ugly Number
- 字典的基本概念和常用方法
- 重要的事情说三遍,Microsoft开发了自己的Linux!Microsoft开发了自己的Linux!Microsoft开发了自己的Linux!
- 野生程序员的故事
- 【循序渐进地学好OpenCV&4】使用2.0的API显示图片以及OpenCV的自动化内存管理
- iOS9网络请求失败问题
- linux的top命令参数详解
- java使用java -jar在当前应用程序调度另一可执行程序
- POJ 1087 A Plug for UNIX (网络流)
- UI设计师不可不知的安卓屏幕知识 dp px 屏幕密度
- 二叉树的序列化与反序列化