机器学习笔记——sklearn 交叉验证(Cross-validation)
sklearn cross validation:https://scikit-learn.org/stable/modules/cross_validation.html
交叉验证(Cross Validation)用来验证分类器的性能一种统计分析方法,基本思想是把在某种意义下降原始数据(dataset)进行分组,一部分用来为训练集(train set),另一部分做为验证集(validation set)。利用训练集训练分类器,然后利用验证集验证模型,记录最后的分类准确率为此分类器的性能指标。
那么什么时候才需要交叉验证呢?交叉验证用在数据不是很充足的时候。比如在平时的项目中,对于普通适中问题,如果数据样本量小于一万条,则采用交叉验证来训练优化选择模型。如果样本大于一万条,一般随机把样本数据分成三份,一份为训练集,一份为验证集,最后一份为测试集。用训练集来训练模型,用验证集来评估模型预测的好坏和选择模型及其对应的参数。把最终得到的模型再用于测试集,最终决定使用哪个模型以及对应参数。
1.交叉验证的评价标准
cross_val_score
使用交叉验证最简单的方法是调用croos_val_score函数,下面例子演示怎样通过分割数据,拟合一个线性核支持向量机模型,计算5个连续次的分数,每次有不同的分割。
from sklearn.model_selection import cross_val_score
clf = svm.SVC(kernel='linear', C=1)
scores = cross_val_score(clf, iris.data, iris.target, cv=5)
分数的平均值和95%的置信区间是
print("Accuracy: %0.2f (+/- %0.2f)" % (scores.mean(), scores.std() * 2))
cross_validate
- 允许指定多个评估指标;
- 除了测试分数之外,它还返回包含拟合时间、分数时间(以及可选的训练分数以及拟合估计值)的字典
cross_val_predict
交叉验证获得预测
cross_val_predict具有与cross_val_score的接口
适用于:
- 从不同模型获得的预测的可视化;
- 模型混合:当使用一个监督估计器的预测来训练集合方法中的另一个估计器时。
2.交叉验证迭代器
对于某些数据是独立同分布的,并且数据的生成过程相同,并且生成过程对过去的样本没有记忆,这样的样本可以用交叉验证器。虽然独立同分布是机器学习理论中的常见假设,但它在实践中很少应用。如果知道样本是使用时间依赖性过程生成的,那么使用时间序列感知交叉验证方案会更安全。同样,如果我们知道生成过程具有群组结构(来自不同主题的样本、实验)、测试设备使用分组交叉验证更安全。
KFold(K-折交叉验证)
将原始数据分成K组(一般均分),将每个子集数据分别做一次验证集,其余的K-1组子集数据作为训练集,这样得到K个模型,用这K个模型最终的验证集的分类准确率的平均数作为此交叉验证集下的分类器的性能值指标。K一般大于等于2,实际操作一般是从3开始取,只有在原始数据集合数据量小的时候才会尝试取2.KFold可以有效的避免过学习以及欠学习状态的发生,最后得到的结果比较具有说服力。
例子:
>>> import numpy as np
>>> from sklearn.model_selection import KFold>>> X = ["a", "b", "c", "d"]
>>> kf = KFold(n_splits=2)
>>> for train, test in kf.split(X):
... print("%s %s" % (train, test))
[2 3] [0 1]
[0 1] [2 3]
RepeatedKFold
RepleatedKFold重复K-fold n次,当需要运行KFold n次时,可以使用它,在每次重复中产生不同的分裂。
例子(重复2次K-Fold的例子):
>>> import numpy as np
>>> from sklearn.model_selection import RepeatedKFold
>>> X = np.array([[1, 2], [3, 4], [1, 2], [3, 4]])
>>> random_state = 12883823
>>> rkf = RepeatedKFold(n_splits=2, n_repeats=2, random_state=random_state)
>>> for train, test in rkf.split(X):
... print("%s %s" % (train, test))
...
[2 3] [0 1]
[0 1] [2 3]
[0 2] [1 3]
[1 3] [0 2]
Leave One Out(LOO)
如果设原始数据有N个样本,即每个样本单独作为验证集,其余的N-1个样本作为训练集,所以LOO会得到N个模型,用这N个模型最终的验证集的分类准确率的平均数作为此下LOO分类器的性能指标。相比于KFold、LOO有两个明显的优点:
- 每一回合中几乎所有的样本皆用于训练模型,因此最接近原始样本的分布,这样评估所得的结果比较可靠;
- 实验过程中没有随机因素会影响实验数据,确保实验过程是可以被复制的;
LOO的缺点是计算成本高,因为需要建立的模型数量与原始数据样本数据相同,当原始数据样本数量相当多时,LOO在实作上便有困难几乎就是不显示,除非每次训练分类器得到模型的速度很快,或者可以用并行化计算减少计算所需的时间。
例子:
from sklearn.model_selection import LeaveOneOut
X = [1, 2, 3, 4]
loo = LeaveOneOut()
for train, test in loo.split(X):print("%s %s" % (train, test))
Leave P Out(LPO)
LeavePOut 与 LeaveOneOut类似,它从完整的数据集里删除p个样本,产生所有可能的训练集和检验集。对于n个样本,能产生个训练-检验对。
例子:
from sklearn.model_selection import LeavePOut
X = np.ones(4)
lpo = LeavePOut(p=2)
for train, test in lpo.split(X):print("%s %s" % (train, test))
随机置换 Shuffle & Split
shufflesplit迭代器将产生一个用户定义的独立训练/检验集,首先shuffle样本,然后分到训练集和检验集。通过设置伪随机数生成器random_state,控制随机性使结果可重复。
from sklearn.model_selection import ShuffleSplit
X = np.arange(10)
ss = ShuffleSplit(n_splits=5, test_size=0.25,
... random_state=0)
for train_index, test_index in ss.split(X):
... print("%s %s" % (train_index, test_index))
机器学习笔记——sklearn 交叉验证(Cross-validation)相关推荐
- Sklearn——交叉验证(Cross Validation)
文章目录 1.前言 2.非交叉验证实验 3.交叉验证实验 4.准确率与平方误差 4.1.准确率实验 4.2.均方误差实验 5.Learning curve 检查过拟合 5.1.加载必要模块 5.2.加 ...
- 【机器学习】<刘建平Pinard老师博客学习记录>交叉验证(Cross Validation)
交叉验证是在机器学习建立模型和验证模型参数时常用的办法.交叉验证,顾名思义,就是重复的使用数据,把得到的样本数据进行切分,组合为不同的训练集和测试集,用训练集来训练模型,用测试集来评估模型预测的好坏. ...
- 训练数据集如何划分验证测试集?train/test(val/dev) set和交叉验证(cross validation)
普通train/test set 直接将训练数据划分为两部分,一部分用来做训练train set,一部分用来固定作为测试集test set.然后反复更换超参在训练集上进行训练,使用测试集依次测试,进行 ...
- 交叉验证(Cross Validation)方法思想简介
交叉验证(CrossValidation)方法思想 以下简称交叉验证(Cross Validation)为CV.CV是用来验证分类器的性能一种统计分析方法,基本思想是把在某种意义下将原始数据(data ...
- 交叉验证 cross validation 与 K-fold Cross Validation K折叠验证
交叉验证,cross validation是机器学习中非常常见的验证模型鲁棒性的方法.其最主要原理是将数据集的一部分分离出来作为验证集,剩余的用于模型的训练,称为训练集.模型通过训练集来最优化其内部参 ...
- 交叉验证(Cross Validation)最详解
1.OverFitting 在模型训练过程中,过拟合overfitting是非常常见的现象.所谓的overfitting,就是在训练集上表现很好,但是测试集上表现很差.为了减少过拟合,提高模型的泛化能 ...
- 交叉验证(Cross Validation)原理小结
交叉验证是在机器学习建立模型和验证模型参数时常用的办法.交叉验证,顾名思义,就是重复的使用数据,把得到的样本数据进行切分,组合为不同的训练集和测试集,用训练集来训练模型,用测试集来评估模型预测的好坏. ...
- matlab 交叉验证 代码,交叉验证(Cross Validation)方法思想简介
本帖最后由 azure_sky 于 2014-1-17 00:30 编辑 2).K-fold Cross Validation(记为K-CV) 将原始数据分成K组(一般是均分),将每个子集数据分别做一 ...
- python机器学习库sklearn——交叉验证(K折、留一、留p、随机)
分享一个朋友的人工智能教程.零基础!通俗易懂!风趣幽默!还带黄段子!大家可以看看是否对自己有帮助:点击打开 全栈工程师开发手册 (作者:栾鹏) python数据挖掘系列教程 学习预测函数的参数,并在相 ...
最新文章
- 微软小冰发布知乎主题曲,人工智能首次开始接近人类歌手水平
- NYOJ题目1048破门锁
- 方法javaJVM学习笔记-内存处理
- elementPlus关闭弹窗,页面原先滚动条消失
- 测试电视是不是4k的软件,怎么判断4K电视真假?教你快速检测的方法!
- 更新!在线状态和用户的共存模式保持一致
- python学生管理系统gui版好例子网_python图书管理系统gui 相关实例(示例源码)下载 - 好例子网...
- HSF/Dubbo序列化时的LocalDateTime, Instant的性能问题
- linux学习-将seafile启动脚本设置为开机启动服务
- 95-874-040-源码-批处理-Flink批处理优化器值成本估算
- 吴恩达老师的机器学习和深度学习课程笔记打印版(全)
- 移动互联网时代,如何优化你的网络 —— 域名解析篇
- cocos2d-x开启Wifi
- 【知识碎片】JavaScript篇
- php bing翻译的api,使用PHP和SOAP访问Bing翻译服务
- idea插件开发可能出现的问题
- 3.1 WTL概述,简单使用和ATL概述,简单使用
- maven install失败的问题
- 学习《图说设计模式》建造者模式
- Vue3给table表格字段,添加超级链接,点击后跳转
热门文章
- 可运行war包,命令行启动war包
- video标签播放m3u8格式视频-------html页面
- unity,cocos对接android版本横幅广告问题
- 四、DM Manager工具使用
- SWOT 模型帮你诚实面对自己——高科技人才在跨国大公司的生存之道(二)
- SpringMVC 5 中的 HandlerMapping
- Fake news on Twitter during the 2016 U.S.presidential election 原文及翻译
- 华硕计算机主板接口,【华硕Z370评测】主板扩展接口的选择_华硕主板_主板评测-中关村在线...
- android listview html,android ——ListView
- 双目立体匹配 Census