转载自 https://www.jianshu.com/p/054654aeae4f

交叉验证、留一交叉验证、自助法

机器学习包括许多算法:线性回归、逻辑回归、决策树、SVM、随机森林、GBDT等等。那么该如何评价某个算法在数据集上的表现呢?这里阐述3个评估方法:交叉验证、留一交叉验证、自助法。

当数据集数量有限时,我们需要将一定数量的数据用于训练,剩下的数据用于测试,也就是旁置法。当然,也许不巧:用于训练(或测试)的数据不具代表性,那么需要将数据按照某种比例进行划分,也就是分层。

一个减少由于旁置法取样而引起的任何偏差的更为通用的方法是,重复整个过程,用不同的随机样本重复进行多次训练和测试,将每次不同迭代过程中所得的误差率进行平均得到一个综合误差率,这就是重复旁置法的误差率估计。

在重复旁置法中,可能在整个过程中,有些数据一直作为测试数据或者训练数据,这样不可避免的由于训练集和测试集数据代表性不一致产生了影响。因此,进行了一个简单的变体方法,引出了交叉验证。

交叉验证


在交叉验证中,需要先固定一个折数,也就是划分。假设折数为3,代表将数据集大致划分为了3等分,然后2/3数据用于训练,1/3数据用于测试,这样此过程循环3次,从而使得每一个实例都可以用来训练和测试。如果同时采用了分层技术,这就是分层3折交叉验证。

设折数为n,那么会重复n次过程,也会产生n个测试结果。将n个测试结果作平均产生的结果就是该算法在数据集上的综合误差估计。

那么n值如何确定呢?书上说:经过大量的实验表明10折正是获得最好的错误估计的恰当选择,而且也有一些理论根据可以支持这一点。当然,为了得到可靠的误差估计,单次的10折交叉验证可能不够,有一个标准的程序是重复10次交叉验证——即10次10折交叉验证,然后取平均值。(_偶的天,变成计算密集型的任务了,对于加快计算,可以采用并发、GPU等方式进行。)

留一交叉验证


留一交叉验证,名字和交叉验证类似,事实也是这样。留一交叉验证,其折数就是样本的个数,设样本个数为m,需要重复m次,最后取平均值。这样的验证方法与上面的交叉验证方法比有优点也有缺点。

优点:
  1. 每次使用尽可能多的数据进行训练(只有一个1实例用于测试),从而能够得到更准确的分类器。
  2. 这个方法具有确定性,因为采样是确定的,因而最后的误差估计也是确定的。所以没有必要重复留一交叉验证。
缺点:
  1. 计算成本较高。需要m次训练和预测,对于大数据集来说,通常不可行(速度太慢了),反而可以在小数据集上得到尽可能正确的估计。
  2. 因为确定了采样方式(每次除去1个),因此不能进行分层(让数据呈现一定的比例),所以对数据集的某算法误差估计可能存在问题。这里举个例子:想象一个完全随机的数据集,含有数量相等的两个类,面对一个随机数据,所能给出的最好的预测方式是预测它属于多数类,其真实误差率为50%。但在留一法中,与测试数据相反的类才是多数类,因此每次预测都是错的,也就是误差率高达100%。

自助法


上面方法在采样时都是一旦从数据集中被取出放入训练集或测试集中,那么它就不能被放回。也就是说,一个实例只能被选择一次。而自助法不同,它是有放回的抽样,那么训练集中数据存在重复。

我们来阐述一个特例:0.632自助法。假设数据集中n个数据,那么每一个数据被取到的概率是1/n,抽样n次,某个实例不被取到的概率是(1-1/n)^n≈0.368.也就是说训练集中只有63.2%的数据。因此其训练数据比10折交叉验证(90%的数据)小,为了补偿这点,将测试集误差和用训练集数据计算的再带入误差率组合得到误差估计值。

这方法也存在误差,同样考虑一个完全随机的数据集,含有数量相等的两个类,面对一个随机数据,所能给出的最好的预测方式是预测它属于多数类,其真实误差率为50%。但是对于自助法而言,可能存在一个完美的算法,能够完全预测正确,导致组合后的误差估计会过于乐观。

引用:

威腾, Witten L H, Frank E. 数据挖掘: 实用机器学习技术及 Java 实现: 英文版[M]. 机械工业出版社, 2003.

eg:

[M,N]=size(data);//数据集为一个M*N的矩阵,其中每一行代表一个样本indices=crossvalind('Kfold',data(1:M,N),10);//进行随机分包for k=1:10//交叉验证k=10,10个包轮流作为测试集test = (indices == k); //获得test集元素在数据集中对应的单元编号train = ~test;//train集元素的编号为非test元素的编号train_data=data(train,:);//从数据集中划分出train样本的数据train_target=target(:,train);//获得样本集的测试目标,在本例中是实际分类情况test_data=data(test,:);//test样本集test_target=target(:,test);[HammingLoss(1,k),RankingLoss(1,k),OneError(1,k),Coverage(1,k),Average_Precision(1,k),Outputs,Pre_Labels.MLKNN]=MLKNN_algorithm(train_data,train_target,test_data,test_target);//要验证的算法end
//上述结果为输出算法MLKNN的几个验证指标及最后一轮验证的输出和结果矩阵,每个指标都是一个k元素的行向量

作者:浩水一方
链接:https://www.jianshu.com/p/054654aeae4f
來源:简书
简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。

机器学习样本处理算法(二)详细特点描述相关推荐

  1. 机器学习之支持向量机算法(二)

    五.SVM求解实例 上面其实已经得出最终的表达式了,下面我们会根据一些具体的点来求解α的值.数据:3个点,其中正例 X1(3,3) ,X2(4,3) ,负例X3(1,1) 如下图所示 我们需要求解下式 ...

  2. 机器学习(优化算法二)——梯度下降-代码实现

    上篇博客说的是梯度下降法,主要讲的原理及公式推导,这篇博客来进行代码实现.包括手动模拟梯度下降的方式来进行求解,以及运用自己实现的梯度下降来完成一个线性回归的例子. 模拟梯度下降 求解 这里手动模拟梯 ...

  3. 【机器学习】算法原理详细推导与实现(七):决策树算法

    [机器学习]算法原理详细推导与实现(七):决策树算法 在之前的文章中,对于介绍的分类算法有逻辑回归算法和朴素贝叶斯算法,这类算法都是二分类的分类器,但是往往只实际问题中yyy不仅仅只有{0,1}\{0 ...

  4. Py之scikit-learn:机器学习sklearn库的简介、六大基本功能介绍(数据预处理/数据降维/模型选择/分类/回归/聚类)、安装、使用方法(实际问题中如何选择最合适的机器学习算法)之详细攻略

    Py之scikit-learn:机器学习sklearn库的简介(组件/版本迭代).六大基本功能介绍(数据预处理/数据降维/模型选择/分类/回归/聚类).安装.使用方法(实际问题中如何选择最合适的机器学 ...

  5. AI:人工智能概念之机器学习中常用算法的思维导图集合(非常经典、建议收藏)之详细攻略

    AI:人工智能概念之机器学习中常用算法的思维导图集合(非常经典.建议收藏)之详细攻略 目录 机器学习算法的思维导图集合 1.ML算法思维图 2.ML算法思维导图 相关文章:ML/DL:关于算法模型的选 ...

  6. em算法 实例 正态分布_【机器学习】EM算法详细推导和讲解

    今天不太想学习,炒个冷饭,讲讲机器学习十大算法里有名的EM算法,文章里面有些个人理解,如有错漏,还请读者不吝赐教. 众所周知,极大似然估计是一种应用很广泛的参数估计方法.例如我手头有一些东北人的身高的 ...

  7. 推荐系统算法_机器学习和推荐系统(二)推荐算法简介

    推荐算法简介 一. 基于人口统计学的推荐算法 二.基于内容的推荐算法 三. 基于协同过滤的推荐算法 协同过滤(Collaborative Filtering , CF) 基于近邻的系统过滤 基于用户( ...

  8. [Python从零到壹] 十四.机器学习之分类算法五万字总结全网首发(决策树、KNN、SVM、分类对比实验)

    欢迎大家来到"Python从零到壹",在这里我将分享约200篇Python系列文章,带大家一起去学习和玩耍,看看Python这个有趣的世界.所有文章都将结合案例.代码和作者的经验讲 ...

  9. 机器学习中的算法(2)-支持向量机(SVM)基础

    版权声明: 本文由LeftNotEasy发布于http://leftnoteasy.cnblogs.com, 本文可以被全部的转载或者部分使用,但请注明出处,如果有问题,请联系wheeleast@gm ...

最新文章

  1. Splay ---- 2018牛客多校第三场 区间翻转搞区间位移 或者 rope可持久化块状链表
  2. 用Jquery自己开发个代阴影的对话框吧!
  3. python 二维 排序
  4. laravel框架的数据库链接
  5. EhLib TitleButton SVisibleColumnsEh = '错误的列';
  6. cocos2dx中关于Action动作的相关API的具体介绍
  7. 为什么都瞧不起QQ邮箱?
  8. gradle学习(19)-log系统
  9. 实战 | 使用Slack、Docker来打造你的运维机器人
  10. ResNet----残差结构
  11. 搜索引擎(包括图片搜索)
  12. MATLAB入门教程(3):数组的创建与使用
  13. android gc卡顿,由于频繁GC造成的界面卡顿原因分析
  14. Python df.groupby(a,as_index=False)[‘‘].sum().sort_values(‘‘,ascending=False).reset_index(drop=True)
  15. 高精度模数转换器,MS1112,ADS1112
  16. 医疗人工智能前景——医学影像
  17. 小白如何通过markdown文件自制kindle的 MOBI 格式文档
  18. 电视台音频直播的问题
  19. libusb ubuntu
  20. qq2013聊天记录在哪个文件夹?QQ2013聊天记录存放位置

热门文章

  1. Q87:间接光照(Indirect Illumination)的高光反射(Glossy Reflcetion)
  2. 水很深的深度学习-Task03前馈神经网络
  3. 《深度学习》李宏毅 -- task3误差和梯度下降
  4. 大数据在消防安全中的新应用
  5. 高效集成连接管理与平台运营 中琛物联赋能智慧城市建设
  6. services.xml应该放在项目的哪里_新轮胎应该放在前轮还是后轮?
  7. sql sum求和 值小于不显示_mysql中sum求和等类似方法关于null值的处理
  8. AcWing 877. 扩展欧几里得算法(拓展欧几里得模板)
  9. 大数据Hadoop复习笔记
  10. CDH修改PySpark默认的Python版本