机器学习的领域内涉及了大量的学习算法。算法多了,如何评价一个算法性能的优良程度,如何为特定的问题选择一个合适的算法,这都是需要解决的问题。泛化误差,交叉验证和特征选择就分别在不同的层次上解决了这个问题。

泛化误差

要评价一个预测算法的优劣,标准无非就是比较预测结果和真实结果的差别,差别越小,这个算法性能就越好,由此给出了经验风险的表达式
其中,L(Y,f(X))叫做损失函数,它是用来量化真实结果Y和预测结果f(X)的区别大小的。
如果我们对已知的样本,用经验风险最小化的标准来选择算法,我们就一定会选择经验风险最小的算法。这样,就会产生过拟合的问题。导致我们得到的算法在样本集上的测试结果非常优秀,但是在真实的预测中,却不尽如人意。换一种说法,就是这种算法的泛化能力比较差。
参考李航的统计学习方法,学习方法的泛化能力往往都是通过研究泛化误差的概率上界来进行的。也就是说,泛化误差上界量化了在最坏的情况下,一个学习算法的优略程度。
泛化误差的计算公式如下
其中不等式右边的R(f)是经验风险,N为样本数量,d为假设空间内的分类器个数。具体请参考《统计学习方法》。当假设空间推广到无限的时候,参考Andrew的说法,我的理解是:假设学习算法的评分为y(越高越好),经验风险为b,假设空间的VC维是x,样本数量为a,那么不严格地说,它们之间服从y=x/a+b这个线性的关系(存在特例)。

交叉验证

泛化误差从宏观上给出了算法的优劣评分,但是这个评分收敛于算法的误差上界。而在实际应用中,误差上界往往非常大,不具有实际的参考价值。因此,评价一个学习算法是否适合于某一实际的问题,就要用交叉验证的方法来实际测试。
为了避免过拟合的问题,交叉验证把训练数据分成了训练集和测试集,用训练集来训练学习算法,再用测试集来验证学习算法,每次都从候选的学习算法集合中选择一个算法,进行学习和测试,最后比较所有算法的测试结果,选择最优的算法。
参考JerryLead的笔记,简单交叉验证的算法如下:
但是简单交叉验证还是不能充分得利用所有数据。在数据特别珍贵的情况下,对造成了数据资源的浪费。因此,某些情况下,会再次改进这个算法,采用K-折叠交叉验证,算法如下:
在极端情况下,K等于训练集数据的数量S,要进行K次的训练和测试,这种情况下的交叉验证被称为留一交叉验证。

特征选择

泛化误差和交叉验证为我们选择合适的学习算法提供了相应的策略,而特征选择则可以使我们在一定程度上优化数据。

假设样本的维度n非差大,而每一个维度都代表了一个表征这个数据的特征。当数据的特征非常多时,我们就需要通过某种方式来过滤掉一些冗余的特征,提高数据的质量,这就是特征选择的目的。
第一种方法叫做前向搜索,它的主要特点是每次从特征集中选出一个测试效果最好的特征,直到满足相应条件为止,具体算法如下:
这种算法的计算复杂度较大,为O(n2)
第二种方法叫做过滤特征选择,它的主要特点是分别计算每一个特征相对于类别标签y的信息量,最后把信息量的值从大到小排列,选取最优的K个值所代表的特征。信息量的计算公式参考KL距离的计算方法得到,公式如下:
这种算法的计算复杂度较之前者较小,为O(n)。

泛化误差,交叉验证和特征选择相关推荐

  1. 神经网络与机器学习 笔记—泛化和交叉验证

    泛化和交叉验证 泛化 在反向传播学习中,一般从一个训练样本开始,而且通过网络中装载尽可能多的训练样本来使用反向传播算法计算一个多层感知器的突触权值.希望这样设计的神经网络可以很好的泛化.对于从未在生成 ...

  2. 训练集,验证集,测试集,泛化误差总结

    能不能只要训练集,不要测试集? 模型参数包含两类:模型参数,超参数:我们的任务是通过调整超参数使得模型参数更好的拟合数据 如果不需要调整模型的超参数,那可以不用验证集: 验证集的作用是模拟测试集,我们 ...

  3. 交叉验证(Cross-Validation)

    交叉验证(Cross-Validation) 目录 交叉验证(Cross-Validation) 一.基本方法 1.保留交叉验证 hand-out cross validation 2.k折交叉验证 ...

  4. k折交叉验证(k-fold Cross-validation)

    一.基本概述               交叉验证是在机器学习建立模型和验证模型参数时常用的办法,一般被用于评估一个机器学习模型的表现.更多的情况下,我们也用交叉验证来进行模型选择(model sel ...

  5. 特征选择,归一化以及交叉验证中应当注意的问题

    特征选择.归一化以及交叉验证中应当注意的问题 前言 为什么要划分训练集,验证集和测试集? 是先做特征选择还是先划分 训练集-验证集-测试集? 是先做归一化还是先划分 训练集-验证集-测试集? 交叉验证 ...

  6. 正则化、交叉验证、泛化能力

    一.正则化  1.模型选择典型的方式就是正则化.正则化就是结构风险最小化策略的实现,就是在经验风险项中添加一个郑泽华想或者叫做惩罚项.  正则化项与模型的关系一般是模型复杂度越高,正则化项的值就会越大 ...

  7. 多元线性回归模型的特征选择:全子集回归、逐步回归、交叉验证

    在多元线性回归中,并不是所用特征越多越好:选择少量.合适的特征既可以避免过拟合,也可以增加模型解释度.这里介绍3种方法来选择特征:最优子集选择.向前或向后逐步选择.交叉验证法. 最优子集选择 这种方法 ...

  8. ESL第七章 模型评估及选择 【期望】测试误差、模型偏差估计偏差、【平均】乐观、AIC、参数有效数、BIC、最小描述长度、VC/结构风险最小化、一标准误差准则/广义交叉验证、【留一】自助/.632估计

    目录 7.2 偏差.方差和模型复杂度 7.3 偏差-方差分解 7.3.1 例子:方差-偏差权衡 7.4 训练误差率的"乐观optimism" 7.5 样本内预测误差的估计.Cp和A ...

  9. python交叉验证结合线性回归_多元线性回归模型的特征选择:全子集回归、逐步回归、交叉验证...

    在多元线性回归中,并不是所用特征越多越好:选择少量.合适的特征既可以避免过拟合,也可以增加模型解释度.这里介绍3种方法来选择特征:最优子集选择.向前或向后逐步选择.交叉验证法. 最优子集选择 这种方法 ...

  10. python使用matplotlib对比多个模型的在训练集上的效果并使用柱状图进行可视化:基于交叉验证的性能均值(mean)和标准差(std)进行可视化分析、使用标准差信息添加误差区间条yerr

    python使用matplotlib对比多个模型的在训练集上的效果并使用柱状图进行可视化:基于交叉验证的性能均值(mean)和标准差(std)进行可视化分析.使用标准差信息添加误差区间条yerr 目录

最新文章

  1. 【iOS】iOS10.3新增API:应用内评分
  2. 技术图文:C#语言中的泛型 I
  3. java清空字符串_java面向对象,垃圾回收机制
  4. 添加vlan后无法上网_KTV多SSID绑定VLAN实用案例,值得一看的干货
  5. 对cookie与session的理解
  6. python 大小端转换,大小端 python
  7. 软件就像大教堂:我们建造它们——然后祈祷
  8. linux环境下通过nginx实现tomcat集群
  9. 机器翻译的前世今生(1)
  10. 20165237 2017-2018-2 《Java程序设计》第8周学习总结
  11. 不同浏览器对URL最大长度的限制(转)
  12. java 加密\解密工具类
  13. nbu备份oracle中途停止,NBU异构还原Oracle完整备份的一些总结
  14. 迅为-iMX6ULL开发板原创嵌入式开发文档系统化学习
  15. 【微信小程序项目】——十分钟开发网络API·天气查询小程序、天气查询,美观简约,简单易上手
  16. 什么是CIF?什么是4CIF?什么是QCIF?什么是D1?
  17. 溢出的概念和判断方法
  18. iphone通讯录备份怎么导出来
  19. Kaggle TMDB 票房预测挑战赛
  20. View 5应用之五:iPad与Android携带虚拟桌面

热门文章

  1. vue入门--简单嵌套路由的一个路径小问题
  2. [转]NetBeans开发Applet方法实例学习
  3. 计蒜客 16876 韩梅梅的抽象画
  4. spring security原理图及其解释
  5. Mac - 让NSView快捷的实现阴影效果
  6. 基于阿里云的移动客户端服务器架构图
  7. Hyper snap
  8. 解决了跨域POST的问题
  9. P1113 杂务 拓扑排序
  10. 20180602_Eclipse配置Maven的本地仓库和阿里云镜像