scikit-learn中默认使用的交叉验证法是K折叠交叉验证法(K-fold cross validation):它将数据集拆分成k个部分,再用k个数据集对模型进行训练和评分.

1.K折叠交叉验证法(K-fold cross validation)

############################# 使用交叉验证法对模型进行评估 #######################################

#导入红酒数据集

from sklearn.datasets import load_wine

#导入交叉验证工具

from sklearn.model_selection import cross_val_score

#导入用于分类的支持向量机模型

from sklearn.svm import SVC

#载入红酒数据集

wine = load_wine()

#设置SVC的核函数为linear

svc = SVC(kernel='linear')

#使用交叉验证法对SVC进行评分

scores = cross_val_score(svc,wine.data,wine.target,cv=3)

#打印结果

print('交叉验证得分:{}'.format(scores))

交叉验证得分:[0.83333333 0.95 ]

#使用.mean()来获得分数平均值

print('交叉验证平均分:{:.3f}'.format(scores.mean()))

交叉验证平均分:0.928

#设置cv参数为6

scores = cross_val_score(svc,wine.data,wine.target,cv=6)

#打印结果

print('交叉验证得分:\n{}'.format(scores))

交叉验证得分:

[0.86666667 0.9 0.93333333 0.96666667 1. 1. ]

#计算交叉验证平均分

print('交叉验证平均分:{:.3f}'.format(scores.mean()))

交叉验证平均分:0.944

#打印红酒数据集的分类标签

print('酒的分类标签:\n{}'.format(wine.target))

酒的分类标签:

[0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0

0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1

1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1

1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2

2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2]

如果用不分层的K折叠的交叉验证法,那么在拆分数据集的时候,有可能每个子集中都是同一个标签,这样的话模型评分都不会太高,而分层k折叠交叉验证法的优势在于,它会在每个不同分类中进行拆分,确保每个子集中都有数量一致的不同分类的标签.

2.随机差分交叉验证(shuffle-split cross-validation)

#导入随机差分工具

from sklearn.model_selection import ShuffleSplit

#设置拆分的份数为10个

shuffle_split = ShuffleSplit(test_size=.2,train_size=.7,n_splits = 10)

#对拆分好的数据集进行交叉验证

scores = cross_val_score(svc,wine.data,wine.target,cv=shuffle_split)

#打印交叉验证得分

print('随机拆分交叉验证模型得分:\n{}'.format(scores))

#计算交叉验证平均分

print('随机拆分交叉验证平均分:{:.3f}'.format(scores.mean()))

随机拆分交叉验证模型得分:

[0.94444444 0.97222222 0.97222222 0.97222222 0.94444444 0.97222222

0.97222222 0.97222222 0.94444444 1. ]

随机拆分交叉验证平均分:0.967

3.一个一个试(leave-one-out)

其原理和k折叠交叉验证相似,不同的是,它把每一个数据点都当成一个测试集,所以测试集中有多少样本,它就要迭代多少次.针对于小数据集来说,其评分是最高的

#导入LeaveOneOut

from sklearn.model_selection import LeaveOneOut

#设置cv参数为leaveoneout

cv = LeaveOneOut()

#重新进行交叉验证

scores = cross_val_score(svc,wine.data,wine.target,cv=cv)

#打印迭代次数

print('打印迭代次数:{}'.format(len(scores)))

#打印评分结果

print('模型平均分:{:.3f}'.format(scores.mean()))

打印迭代次数:178

模型平均分:0.955

总结 :

我们为什么要使用交叉验证法?

当我们使用train_test_split方法进行数据集的拆分时,train_test_split用的是随机拆分的方法,万一我们拆分的时候,测试集中都是比较容易进行分类或者回归的数据,而训练集中都比较难,那么模型的得分就会偏高,反之模型的得分就会偏低.我们也不太可能把所有的random_state遍历一遍,而交叉验证法正好弥补了这个缺陷,它的工作原理导致它要对多次拆分进行评分再取平均值,这样就不会出现我们前面所说的问题了.

文章引自 : 《深入浅出python机器学习》

python 模型交叉验证法_使用交叉验证法(Cross Validation)进行模型评估相关推荐

  1. 基于python的入侵检测系统毕设_基于时空特征融合的入侵检测系统模型

    期刊:COMPUTERS & SECURITY 期刊信息:JCR分区Q1:中科院分区2区:引用因子4.85 摘要: 入侵检测系统可以通过分析网络流量的特征来区分正常流量和攻击流量.近年来,神经 ...

  2. 利用模型算法部署图像识别_利用这些技巧增强您的图像识别模型

    利用模型算法部署图像识别 So, you have gathered a dataset, built a neural network, and trained your model. 因此,您已经 ...

  3. 训练集 验证集_训练与验证、测试集数据分布不同的情况

    在不同分布的数据集上进行训练与验证.测试 深度学习需要大量的数据,但是有时我们可获得的满足我们真实需求分布的数据并不是那么多,不足以对我们的模型进行训练.这时我们就会收集大量相关的数据加入到训练集中, ...

  4. 冒泡排序法_排序算法 冒泡排序法

    冒泡排序法 基于Java语言实现 本文主要围绕冒泡排序法的标准版和优化版 冒泡排序法简介 原理:冒泡排序法就是对一组数据进行两两比较,也就是说第一个元素和第二个元素进行比较,如果第一个元素大于第二个元 ...

  5. 路科验证示例_角度形式验证示例

    路科验证示例 In this post, we will see how Angular form validation works. Earlier we looked into angular f ...

  6. 曲面积分的投影法_三重积分的投影法与截面法

    二重积分的两个计算方法分别是化为累次积分与变量变换, 三重积分也是如此. 今天我们先学习三重积分如何化为二重积分, 即投影法与截面法: 显然投影法是先求定积分, 再求重积分; 截面法是先求重积分, 再 ...

  7. 嫡权法赋权法_变异系数法_客观赋权法

    什么是变异系数,有何优势? 变异系数:当需要比较两组数据离散程度大小的时候,如果两组数据的测量尺度相差太大,或者数据量纲的不同,直接使用标准差来进行比较不合适,此时就应当消除测量尺度和量纲的影响,而变 ...

  8. python灰色关联度分析代码_灰色关联分析法步骤 - osc_uwnmtz9n的个人空间 - OSCHINA - 中文开源技术交流社区...

    https://wenku.baidu.com/view/dc356290af1ffc4fff47ac0d.html?rec_flag=default&sxts=1538121950212 利 ...

  9. python反距离权重法_反距离权重法 (Spatial Analyst)—ArcMap | 文档

    使用反距离权重法 (IDW) 获得的像元输出值限定在插值时用到的值范围之内.因为反距离权重法是加权平均距离,所以该平均值不可能大于最大输入或小于最小输入.因此,如果尚未对这些极值采样,便无法创建山脊或 ...

最新文章

  1. 2020-10-26runtime error: member access within null pointer of type ‘struct ListNode‘ (solution.cpp)错
  2. Openstack贡献者须知 2 — 社区工作运作 代码贡献流程
  3. LibSVM学习(六)——easy.py和grid.py的使用(转)
  4. 互联网业务利润增长3倍,TCL电子走出第二增长曲线
  5. php 数组设置为空,PHP数组设置空值
  6. java怎么新建模块_spring boot添加新模块的方法教程
  7. yolov5模型框架详解
  8. c#使用正则表达式获取TR中的多个TD_Linux之正则表达式
  9. HikariCP配置手册
  10. 抖音高贵气质的签名_抖音签名大全2020最新版-抖音个性签名男生女生-抖音个性签名霸气-腾牛个性网...
  11. 贝塞尔曲线及实践案例
  12. 驰骋督查督办系统说明书
  13. 关于Bellman-Ford算法的个人理解
  14. 【Vue3】李南江老师讲解--个人笔记(二)ref 和 reactive详解
  15. 企业数据中心“云化”转型解决方案
  16. Java 中j+=i 和 j=+i 的区别
  17. 了解sprin是什么?有啥用?为什么要用?
  18. vue中的生命周期函数都在什么时候执行?
  19. seo如何优化?站长分析影响排名的4大因素
  20. 【SPSS】单样本T检验分析详细操作教程(附案例实战)

热门文章

  1. 微信无法注销,小程序管理员身份尚未解除怎么解决?
  2. 微信小程序--扫二维码
  3. 学计算机可以拦截手机软件,堪称神器!这几款软件让你的手机变电脑!
  4. Spring线程池异步传递MDC信息
  5. 9 款必装Windows软件,你爱上了哪一款!
  6. 站在艺术和算法十字路口的Prisma,会成为第二个Instagram吗?
  7. Flutter 实现虎牙/斗鱼 弹幕效果
  8. 信息管理专业的相关证书
  9. SpringCloud——ELK搭建(Windows版)
  10. 亲手触摸到虚拟猫是怎样的体验?《刀剑神域》中虚拟现实技术离我们还有多远?...