使用交叉验证法(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)进行分组,一部分作为训练 ...
随机推荐
- 【2019.11.20】SDN上机第4次作业
安装OpenDayLight控制器 配置JAVA环境 https://www.opendaylight.org/ 在官网进行下载OpenDayLight控制器 启动OpenDayLight控制器和安装 ...
- 腾讯云手动搭建nginx+php-fpm并自启动
自己一点小爱好,搭建了一个小网站植物大战僵尸百科, 使用的是腾讯云,市场里的镜像不好用,所以自己手动搭建一波. centos 7 编译安装 php-7.2.11的步骤 在官网下载php-7.2.11的 ...
- SRS之安装与使用
1. 安装 1.1 github 获取源码 git clone https://github.com/ossrs/srs.git 1.2 编译 1.2.1 关闭防火墙和 selinux 先关闭防火墙, ...
- 快速激活Navicat Premium 12
Navicat Premium 12是一套数据库开发管理工具,支持链家MySQL.Oracle.SQL server等多种数据库,快速便捷创建.管理和维护数据库 一.下载 https://www.na ...
- 【Qt开发】vs2017+qt5.x编译32位应用
概述 最近有同学私信我,问如何使用vs2017+qt5.10编译出32位的应用,需要使用msvc2017_x86的插件,然而qt官网并没有提供,只能使用源码编译生成msvc2017_x86插件,使用n ...
- grandle Project sync failed.please fix your project and try again
Android Studio导入项目或者新建项目想运行的时候可能会报错Gradle project sync failed. Please fix your project and try again ...
- Xamarin图表开发基础教程(5)OxyPlot框架
Xamarin图表开发基础教程(5)OxyPlot框架 Xamarin.iOS中使用OxyPlot框架 在Xamarin.iOS平台上实现图表显示需要完成以下的步骤: 1.添加OxyPlot.Xama ...
- 【NumPy】 之常见运算(np.around、np.floor、np.ceil、np.where)
aroundnp.around 返回四舍五入后的值,可指定精度. around(a, decimals=0, out=None) a 输入数组 decimals 要舍入的小数位数. 默认值为0. 如果 ...
- join方法
用join拼接两个字符串 a='hehe' b='wawa' print(''.join((a,b))) #'hehewawa' 用join拼接列表中的字符串 l=['a''b','c','d'] p ...
- 运维笔记--postgresql占用CPU问题定位
运维笔记--postgresql占用CPU问题定位 场景描述: 业务系统访问变慢,登陆服务器查看系统负载并不高,然后查看占用CPU较高的进程,发现是连接数据库的几个进程占用系统资源较多. 处理方式: ...