博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
交叉验证
阅读量:4291 次
发布时间:2019-05-27

本文共 1835 字,大约阅读时间需要 6 分钟。

sklearn 中的cross_val_score函数可以用来进行交叉验证。

交叉验证的定义
交叉验证(Cross Validation),有的时候也称作循环估计(Rotation Estimation),是一种统计学上将数据样本切割成较小子集的实用方法,该理论是由Seymour Geisser提出的。
在给定的建模样本中,拿出大部分样本进行建模型,留小部分样本用刚建立的模型进行预报,并求这小部分样本的预报误差,记录它们的平方加和。这个过程一直进行,直到所有的样本都被预报了一次而且仅被预报一次。把每个样本的预报误差平方加和,称为PRESS(predicted Error Sum of Squares)。
交叉验证的基本思想
交叉验证的基本思想是把在某种意义下将原始数据(dataset)进行分组,一部分做为训练集(train set),另一部分做为验证集(validation set or test set),首先用训练集对分类器进行训练,再利用验证集来测试训练得到的模型(model),以此来做为评价分类器的性能指标。
交叉验证的作用
在做模型训练时,需要确定最优参数。交叉验证是一种确定最优参数的方式。
交叉验证确认最优参数的原理
1)循环遍历可能的参数,对每个参数下的模型做一次交叉验证。
2)交叉验证求解每个参数情况下模型的得分。交叉验证通过对数据集划分不同的测试集和数据集得出不同划分情况下的模型得分,最终将所有值求平均值,得出此参数情况下该模型的得分。
3)求出使模型评分最高的那个参数,得出最优参数。该参数在给定数据集上能使模型得分最高。
在这里插入图片描述
如上图所示,交叉验证将数据集分为10折,计算十次,将每一折都当做一次测试集,其余九折当做训练集,这样循环十次。通过传入的模型,训练十次,最后将十次结果求平均值,得出该参数下模型最终评分。将每个数据集都算一次

函数原型:

sklearn.cross_validation.cross_val_score(estimator, X, y=None, scoring=None,cv=None, n_jobs=1, verbose=0, fit_params=None, pre_dispatch=‘2*n_jobs’)

参数含义

estimator:想要评估的模型对象(分类器)X:数据特征(Features)y:数据标签(Labels)soring:调用方法(包括accuracy和mean_squared_error等等)cv:几折交叉验证n_jobs:同时工作的cpu个数(-1代表全部)verbose:详细程度fit_params:传递给估计器的拟合方法的参数pre_dispatch:控制并行执行期间调度的作业数量。减少这个数量对于避免在CPU发送更多作业时CPU内存消耗的扩大是有用的。cv参数:控制迭代次数。利用 cv 参数来调节 cross_val_score 所使用的折数,可以提供一个交叉验证分离器作为 cv 参数,来对数据划分过程进行更精细的控制。分层 k 折:KFold留一法:LeaveOneOut打乱划分:ShuffleSplit/StratifiedShuffleSplit,样例首先被打散然后划分为一对训练测试集合。分组交叉:GroupKFold各策略示例见“交叉验证”https://www.jianshu.com/p/d08843423099

返回值

交叉验证每次运行的评分数组。交叉验证不会返回一个模型,在调用 cross_val_score 时,内部会构建多个模型,但交叉验证的目的只是评估给定算法在特定数据集上训练后的泛化性能好坏。

shuffleSplit()函数参数含义:

使用鸢尾花数据集运行实例

from sklearn import datasets, svmfrom sklearn.model_selection import cross_val_scoreiris = datasets.load_iris()X = iris.datay = iris.targetSVC = svm.SVC()print(cross_val_score(SVC, X, y, cv=5, scoring='accuracy'))

运行结果:

[0.96666667 1.         0.96666667 0.96666667 1.        ]

参考:

转载地址:http://ahhgi.baihongyu.com/

你可能感兴趣的文章
string 序列化
查看>>
va_start(),va_end()函数应用
查看>>
crontab命令
查看>>
State Threads——异步回调的线性实现
查看>>
va_start va_end
查看>>
共享内存,共享缓冲区 一对多
查看>>
无锁队列的实现
查看>>
CAS原子操作实现无锁及性能分析
查看>>
Linux 互斥锁、原子操作实现原理
查看>>
搭建简单hls直播测试服务
查看>>
共享内存的数据同步
查看>>
Cache和Buffer的区别
查看>>
50个sql语句
查看>>
MYSQL sql 语句性能分析
查看>>
C++操作Redis数据库
查看>>
python yield用法
查看>>
python pipe模块用法
查看>>
安装完 MySQL 后必须调整的 10 项配置
查看>>
开发者必备的 12 个 JavaScript 库
查看>>
http错误码
查看>>