• 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机器学习》

使用交叉验证法(Cross Validation)进行模型评估的更多相关文章

  1. S折交叉验证(S-fold cross validation)

    S折交叉验证(S-fold cross validation) 觉得有用的话,欢迎一起讨论相互学习~Follow Me 仅为个人观点,欢迎讨论 参考文献 https://blog.csdn.net/a ...

  2. 交叉验证(Cross Validation)简介

    参考    交叉验证      交叉验证 (Cross Validation)刘建平 一.训练集 vs. 测试集 在模式识别(pattern recognition)与机器学习(machine lea ...

  3. 几种交叉验证(cross validation)方式的比较

    模型评价的目的:通过模型评价,我们知道当前训练模型的好坏,泛化能力如何?从而知道是否可以应用在解决问题上,如果不行,那又是哪里出了问题? train_test_split 在分类问题中,我们通常通过对 ...

  4. 交叉验证(cross validation)

    转自:http://www.vanjor.org/blog/2010/10/cross-validation/ 交叉验证(Cross-Validation): 有时亦称循环估计, 是一种统计学上将数据 ...

  5. 十折交叉验证10-fold cross validation, 数据集划分 训练集 验证集 测试集

    机器学习 数据挖掘 数据集划分 训练集 验证集 测试集 Q:如何将数据集划分为测试数据集和训练数据集? A:three ways: 1.像sklearn一样,提供一个将数据集切分成训练集和测试集的函数 ...

  6. sklearn交叉验证法(Cross Validation)

    import numpy as np from sklearn import datasets from sklearn.cross_validation import train_test_spli ...

  7. 验证和交叉验证(Validation & Cross Validation)

    之前在<训练集,验证集,测试集(以及为什么要使用验证集?)(Training Set, Validation Set, Test Set)>一文中已经提过对模型进行验证(评估)的几种方式. ...

  8. 交叉验证 Cross validation

    来源:CSDN: boat_lee 简单交叉验证 hold-out cross validation 从全部训练数据S中随机选择s个样例作为训练集training set,剩余的作为测试集testin ...

  9. Cross Validation(交叉验证)

    交叉验证(Cross Validation)方法思想 Cross Validation一下简称CV.CV是用来验证分类器性能的一种统计方法. 思想:将原始数据(dataset)进行分组,一部分作为训练 ...

随机推荐

  1. ranger 使用外置的solr

    一.solrcloud部署 1.下载部署 1).下载二进制包 #wget http://mirrors.tuna.tsinghua.edu.cn/apache/lucene/solr/8.3.0/so ...

  2. x86-64位指令学习

    参考文章: (1)x86-64指令系统过程调用学习笔记 https://blog.csdn.net/weixin_44735312/article/details/89818907 创建文本sum.c ...

  3. #C++初学记录(typedef和define)

    typedef的用法 typedef关键字可以用于给数据类型定义一个别名,即可以给long long 定义成ll,也可以给结构体定义,当你定义了一个结构体时,每次创建一个结构体都要使用struct+结 ...

  4. 虚拟机VirtualBox 共享挂载问题:mount: /mnt/xxx: wrong fs type, bad option, bad superblock on xxx

    设置好共享文件夹之后,在/mnt下面建立了一个wwwroot文件夹,然后去欢天喜地的去挂载, mount -t vboxsf www /mnt/wwwroot 结果系统提示: mount: /mnt/ ...

  5. libpng error: IHDR: CRC error

    原本正常显示在主页端logo图片无法显示了,爆出如下错误: libpng error: IHDR: CRC error 查找原因如下:

  6. 【前端】input输入框只能输入大于等于0的正数

    大于等于0的正数,允许小数 <input type="number" step="1" min="0" onkeyup="t ...

  7. node 报错 env: node\r: No such file or directory

    最近在编写一个命令行工具.使用 npm link 时可以正常运行.但是 ctrl+s 保存后, 再运行则报错 env: node\r: No such file or directory ,需要再 n ...

  8. SqlServer Stuff

    SqlServer Stuff DECLARE @TAB TABLE ( UserID INT, UserName ) ) INSERT INTO @TAB ( UserID, UserName ) ...

  9. git删除远程.idea目录

    git删除远程.idea目录 1. 登录 Administrator@USER-20180708AB MINGW32 / (master) $ git config --global user.nam ...

  10. Altera PLL Locked 失锁的原因

    Altera PLL 有时可能会出现失锁的情况,查找了官网资料,有总结到有几个情况下会出现失锁. 官网中的网页如下,是英文的: https://www.altera.com.cn/support/su ...