由于出现类似鸢尾花数据集这种分段数据可能简单的交叉验证无法适用,所以这里引用了分层K折交叉验证。在分层交叉验证中,我们划分数据,使得每个折中类别之间的比例整数与数据集中的比例相同,如下图所示:

mglearn.plots.plot_stratified_cross_validation()

当数据按照类别标签排序时,标准交叉验证和分成交叉验证的对比

适用分层交叉验证可以使得具有明显分成的数据集在分成的时候各层数据在各个模型中都存在,适用分成K折交叉验证来验证一个分类器,通常要比交叉验证的效果要好,因为它可以对泛化性能做出更加可靠的评估(使用简单的k折交叉验证是,有可能某个折中只有样本A而无样本B,从而使得该模块的精度预测为0)。

对于回归问题,scikit-learn默认使用标准k折交叉验证,也可以尝试让每个折表示回归的目标的不同取值,但并不是一种常用的策略,也会让大多数用户感到意外。

对交叉验证的更多控制:我们之前看到,可以利用cv来参数来调节cross_val_score所使用的折数,但scikit-learn允许提供一个交叉验证分类器(cross_validation spliter)作为cv参数,来对数据划分过程做更加精细的控制。对于大多数使用场景而言,回归问题默认的k折交叉验证与分类问题的分层k折交叉验证的表现都很好。但是有些情况却有所不同。

如我们想要在一个分类数据集上使用标准k折交叉验证来重现别人的结果,为了实现这一点,我们首先必须从model_selection模块中导入KFold分类器,并用我们想要使用的折数来将其实例化。

from sklearn.model_selection import KFold

kfold = KFold(n_splits=8)

#我们可以将kfold分类器对象作为cv参数传入cross_val_score

print("Cross val score is :{}".format(cross_val_score(logreg, iris.data, iris.target,

cv=kfold)))

运行结果为:

Cross val score is :

[1. 1. 0.94736842 0.63157895 0.57894737 1.

0.66666667 0.94444444]

通过这种验证,我们可以验证,在iris数据集上,使用3折交叉验证(不分层)确实是一种非常差的主意:

from sklearn.model_selection import KFold

kfold = KFold(n_splits=3)

#我们可以将kfold分类器对象作为cv参数传入cross_val_score

print("Cross val score is :{}".format(cross_val_score(logreg, iris.data, iris.target,

cv=kfold)))

运行结果为:

Cross val score is :

[0. 0. 0.]

因为在iris数据集中,如果分为3折,每一折对应的内容都不同(没有交叉数据),所以学不到任何内容。解决这个问题的另一种方法是将数据打乱来代替分层。当然,如果我们将数据打乱,那么还需要固定random_state来获得可重复的打乱效果;否则每次运行cross_val_score将会得到不同的结果,因为每次都进行了不同的随机划分。在划分前将其打乱可以得到更好的结果,如下代码:

kfold = KFold(n_splits=3, shuffle=True, random_state=0)

print("KFold cross-validation scores:{}".format(cross_val_score(logreg,

iris.data, iris.target, cv=kfold)))

运行后其结果如下:

KFold cross-validation scores:

[0.9 0.96 0.96]

由此可见使用K分层交叉验证后iris数据集即使是使用三折,也能取到很好的学习效果。

留一法交叉验证:另一种常见的交叉验证方法是留一法(leave-one-out)。该方法可以看作是每折只包含单个样本的k折交叉验证,对于每次划分,选择单个数据点作为测试集,这种方法一般非常耗时,特别对于大型数据集来说,但是小型的数据集上优势可以给出更好的预测结果。示例代码如下:

from sklearn.model_selection import LeaveOneOut

leave = LeaveOneOut()

scores = cross_val_score(logreg, iris.data, iris.target, cv=leave)

print("Number of cv iterations:

k折交叉验证matlab 流程_第51集 python机器学习:分层K折交叉验证及其他方式相关推荐

  1. 层次聚类多维度matlab实现_第34集 python机器学习:凝聚聚类

    凝聚聚类:凝聚聚类是指许多基于相同原则构建的聚类算法.这一原则是:算法首先声明每个点是自己的簇,然后合并两个最相似的簇,直到满足某种停止条件为止. scikit-learn中实现的停止准则是簇的个数, ...

  2. auot lisp 选择集处理_第64集 python机器学习:用预处理进行参数选择

    在机器学习过程中,大多数机器学习应用不仅需要应该用单个算法,而且还需要将许多不同的处理步骤和机器学习模型链接在一起. 接下来我们将引入本章学习的内容--Pipeline类:该类可以简化构造变换和模型链 ...

  3. python 怎么调用 矩阵 第几行_第58集 python机器学习:混淆矩阵精度指标

    混淆矩阵的精度计算公式为:精度=(TP+TN)/(TP+TN+FP+FN),也就是说,精度就是指正确的预测数目除以所有样本的数量. 准确率.召回率与f-分数:总结混淆矩阵还有几种方法,其中最常见的就是 ...

  4. 小象python培训班_小象最新Python机器学习升级版视频学习教程 共24节精品课

    小象最新Python机器学习升级版视频学习教程 共24节精品课 本课程特点是从数学层面推导最经典的机器学习算法,以及每种算法的示例和代码实现(Python).如何做算法的参数调试.以实际应用案例分析各 ...

  5. python 算法教程 pdf 英文_上手实践《Python机器学习第2版》PDF中文+PDF英文+代码+Sebastian...

    学习机器学习,推荐学习<Python机器学习(第二版)>. <Python机器学习(第2版)>,图文并茂,代码详实,原理清晰,覆盖面适度,侧重算法实现和应用,作为入门级学习还是 ...

  6. python机器学习---1. K近邻算法

    机器学习的方法是基于数据产生的"模型" (model) 的算法,也称"学习算法" (learning algorithm).包括有监督学习(supervised ...

  7. python分类预测降低准确率_十分钟掌握python机器学习特征选择

    十分钟掌握python机器学习特征选择-1.jpg (33.2 KB, 下载次数: 0) 2018-6-26 23:01 上传 在机器学习中,特征选择是实践中的一步, 帮你在所有特征中选择对结果贡献最 ...

  8. 交叉验证选择最佳参数_如何为您的公司选择最佳的身份验证即服务提供商

    交叉验证选择最佳参数 by Jeff Okawa 通过Jeff Okawa 如何为您的公司选择最佳的身份验证即服务提供商 (How to choose the best Authentication ...

  9. fir滤波器matlab实现_关于FIRamp;IIR系统的算法说明以及结果验证(1)

    首先,做一个简短的开场白. 本贴主要是一个关于信号处理方面的学习笔记.主要目的有三, 作为研究笔记留存 分享我个人的理解 与专业人士进行意见交换 另外由于楼主不是教课员,因此无法保证算法分析以及个人理 ...

最新文章

  1. 个人所得税计算器2016 by Jacksile
  2. Nature综述:真菌的多样性:真菌的高通量测序及鉴定
  3. 如何在bash中等待多个子进程完成并在任何子进程以代码!= 0结尾时返回退出代码!= 0?
  4. mysql导入三个基本表_mysql 基础导入导出
  5. 需要vmwareinstalldisk上的文件vmnet_手机上一键就能进行PDF与其他文件的相互转换,果然厉害到不行...
  6. 一位Oracle顶流铁粉的“躬身入局”
  7. IoC框架,依赖注入
  8. 济南python工资一般多少-济南Go全栈区块链课程
  9. NodeJs——子进程
  10. char wchar_t ascii unicode 之旅
  11. cdma特有效应_[多选] 相对于IS-95A,下列特征哪些是CDMA20001x系统所特有的().
  12. 51nod 1534棋子游戏(分析)
  13. 起底白帽黑客郭盛华读过的学校,看完流眼泪了!
  14. Xtts v4 xttdriver.pl xtt.properties
  15. 如果GOOGLE退出中国,我们怎么办???
  16. 丧尸的世界·《丧尸西游》
  17. 可行方向法的matlab代码,基于MATLAB的可行方向法求极值问题参考.doc
  18. android ppsspp 存档位置,ppsspp怎么用,ppsspp怎么用psp存档
  19. Spring 源码分析(一) —— 迈向Spring之路(转载)
  20. 什么是404页面,404有什么做用,网站做404有什么好处?

热门文章

  1. 从Windows复制文件到Linux显示乱码问题
  2. 初识EntityFramework6【转】
  3. python的变量与注释
  4. 把javabean复制到另一个javabean 使用BeanUtils.copyProperties(a,b) 复制
  5. Appium python自动化测试系列之Capability介绍(五)
  6. 剑指Offer_47_求1+2+3+...+n
  7. SharePoint自动化系列——通过PowerShell创建SharePoint Lists
  8. 已有数据表的Mysql字符编码修改
  9. jboss ds derby
  10. Python+tkinter实现椭圆形半透明窗口实时显示本机网络速度