使用交叉验证法(Cross Validation)进行模型评估
- 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)进行模型评估的更多相关文章
- S折交叉验证(S-fold cross validation)
S折交叉验证(S-fold cross validation) 觉得有用的话,欢迎一起讨论相互学习~Follow Me 仅为个人观点,欢迎讨论 参考文献 https://blog.csdn.net/a ...
- 交叉验证(Cross Validation)简介
参考 交叉验证 交叉验证 (Cross Validation)刘建平 一.训练集 vs. 测试集 在模式识别(pattern recognition)与机器学习(machine lea ...
- 几种交叉验证(cross validation)方式的比较
模型评价的目的:通过模型评价,我们知道当前训练模型的好坏,泛化能力如何?从而知道是否可以应用在解决问题上,如果不行,那又是哪里出了问题? train_test_split 在分类问题中,我们通常通过对 ...
- 交叉验证(cross validation)
转自:http://www.vanjor.org/blog/2010/10/cross-validation/ 交叉验证(Cross-Validation): 有时亦称循环估计, 是一种统计学上将数据 ...
- 十折交叉验证10-fold cross validation, 数据集划分 训练集 验证集 测试集
机器学习 数据挖掘 数据集划分 训练集 验证集 测试集 Q:如何将数据集划分为测试数据集和训练数据集? A:three ways: 1.像sklearn一样,提供一个将数据集切分成训练集和测试集的函数 ...
- sklearn交叉验证法(Cross Validation)
import numpy as np from sklearn import datasets from sklearn.cross_validation import train_test_spli ...
- 验证和交叉验证(Validation & Cross Validation)
之前在<训练集,验证集,测试集(以及为什么要使用验证集?)(Training Set, Validation Set, Test Set)>一文中已经提过对模型进行验证(评估)的几种方式. ...
- 交叉验证 Cross validation
来源:CSDN: boat_lee 简单交叉验证 hold-out cross validation 从全部训练数据S中随机选择s个样例作为训练集training set,剩余的作为测试集testin ...
- Cross Validation(交叉验证)
交叉验证(Cross Validation)方法思想 Cross Validation一下简称CV.CV是用来验证分类器性能的一种统计方法. 思想:将原始数据(dataset)进行分组,一部分作为训练 ...
随机推荐
- PHP Closure(闭包)类详解
Closure 面向对象变成语言代码的复用主要采用继承来实现,而函数的复用,就是通过闭包来实现.这就是闭包的设计初衷. 注:PHP里面闭包函数是为了复用函数而设计的语言特性,如果在闭包函数里面访问指定 ...
- Hadoop(二)—— HDFS
HDFS(Hadoop Distributed File System)Hadoop分布式文件系统. 一.HDFS产生的背景 随着数据量越来越大,如果大到一台主机的磁盘都存放不下,该如何解决这个问题. ...
- 记录linux上mongo迁移使用的命令
首先mongodb的文件路径必须在系统盘,这里是 这里安装路径 /usr/mongodb/bin 一般迁移的只是db文件夹和log文件 看配置文件内容 port=27017 #端口 dbpath=/d ...
- 菜鸟学IT之Hadoop综合大作业
Hadoop综合大作业 作业来源:https://edu.cnblogs.com/campus/gzcc/GZCC-16SE1/homework/3363 1.将爬虫大作业产生的csv文件上传到HDF ...
- NoSql数据库Redis系列(6)——Redis数据过期策略详解
本文对Redis的过期机制简单的讲解一下 讲解之前我们先抛出一个问题,我们知道很多时候服务器经常会用到redis作为缓存,有很多数据都是临时缓存一下,可能用过之后很久都不会再用到了(比如暂存sessi ...
- RocketMQ集群安装 2主2从 console
安装zip和mavenyum install -y unzip zip wget http://repos.fedorapeople.org/repos/dchen/apache-maven/epel ...
- 【转】vue中样式被覆盖的问题,vue中的style不生效
转载:http://www.cnblogs.com/shangjun6/p/11416054.html 在我们引入外部的样式时,发现自己无论如何都改不了外部的样式,自己的样式老被覆盖,究其原因还是我们 ...
- semi-join子查询优化 -- LooseScan策略
LooseScan执行semi-join子查询的一种策略. 我们将通过示例来演示这种松散(LooseScan)策略.假设,我们正在查找拥有卫星的国家.我们可以通过以下查询获得它们(为了简单起见,我们忽 ...
- xmlns:amq="http://activemq.apache.org/schema/core"报错
如题,项目集成ActiveMQ是配置文件报错 原因是:Spring命名空间配置错误,缺少相应的spring-bean.很显然,引用不到就是没有jar包啊. 我的解决办法,早pom.xml引用依赖 &l ...
- Laya的对象唯一标识
Egret中是obj.hashcode Laya中是obj["$_GID"]