机器学习系列之交叉验证、网格搜索
第一部分:交叉验证
机器学习建立和验证模型,常用的方法之一就是交叉验证。在机器学习过程中,往往数据集是有限的,而且可能具有一定的局限性。如何最大化的利用数据集去训练、验证、测试模型,常用的方法就是交叉验证。交叉验证,就是重复的使用数据,对样本数据进行划分为多组不同的训练集和测试集(训练集训练模型,测试集评估模型)。
交叉验证一般使用在数据不是很充足情况。一般问题,如果数据样本量小于一万条,就会采用交叉验证优化模型。数据样本量大于一万条,就随机把数据分成三份(训练集、验证集、测试集)(来自博主刘建平)
交叉验证主要分为以下几种:
第一种是简单数据划分(train_test_split)。按照一定比例,如7:3,直接将样本分为训练集train和测试集test两部分。然后利用train训练模型,test验证模型,最后选择损失函数评估最优的模型和参数。这种方式只进行了一次划分,数据划分具有偶然性。
from sklearn.model_selection import train_test_split
第二种是简单交叉验证(Standard Cross Validation、S-Folder Cross Validation)。针对上述问题,所以提出了多次train_test_split划分。每次划分时,在不同的数据集上进行训练、测试评估,从而得出一个评价结果;如果是5折交叉验证,意思就是在原始数据集上,进行5次划分,每次划分进行一次训练、评估,最后得到5次划分后的评估结果,一般在这几次评估结果上取平均得到最后的 评分。k-fold cross-validation ,其中,k一般取5或10。
from sklearn.model_selection import cross_val_score
logreg = LogisticRegression()
scores = cross_val_score(logreg,cancer.data, cancer.target,CV=5)
第三种是分层交叉验证(Stratified k-fold cross validation)。分层的意思是说在每一折中都保持着原始数据中各个类别的比例关系,比如说:原始数据有3类,比例为1:2:1,采用3折分层交叉验证,那么划分的3折中,每一折中的数据类别保持着1:2:1的比例,这样的验证结果更加可信。可以把KFold参数代入CV中。
from sklearn.model_selection import StratifiedKFold,cross_val_score
from sklearn.linear_model import LogisticRegression
logreg = LogisticRegression()strKFold = StratifiedKFold(n_splits=3,shuffle=False,random_state=0)
scores = cross_val_score(logreg,iris.data,iris.target,cv=strKFold)
第四种是留一法(Leave-one-out Cross-validation)。如果样本容量为n,则k=n,进行n折交叉验证,每次留下一个样本进行验证。主要针对小样本数据。
from sklearn.model_selection import LeaveOneOut,cross_val_score
from sklearn.linear_model import LogisticRegression
logreg = LogisticRegression()loout = LeaveOneOut()
scores = cross_val_score(logreg,iris.data,iris.target,cv=loout)
Shuffle-split cross-validation。可以控制划分迭代次数、每次划分时测试集和训练集的比例(可以存在既不在训练集也不再测试集的情况)
参考:https://www.cnblogs.com/ysugyl/p/8707887.html
http://www.cnblogs.com/pinard/p/5992719.html刘博主,很赞!
第二部分:网格搜索
Grid Search 是一种穷举的调参方法。通过循环遍历的方式,把每一种候选的参数组合,全部调试一遍。最后表现效果最好的参数就是最终的结果。
嵌套循环方式实现:(每次调参时,数据集要保持一致性)。为了避免test data既用于检验模型参数,又用于测试模型好坏,会提高模型结果的评分。可以将数据集分成三部分:train/val/test,分别对应训练、验证、测试。
第三部分:交叉验证与网格搜索结合应用
交叉验证经常和网格搜索结合应用(grid search with cross validation)。sklearn中有个类GridSearchCV, 实现了fit/predict/score等方法。
参考:https://www.cnblogs.com/ysugyl/p/8711205.html
机器学习系列之交叉验证、网格搜索相关推荐
- Lesson 6.5Lesson 6.6.1Lesson 6.6.2 机器学习调参基础理论与网格搜索多分类评估指标的macro与weighted过程GridSearchCV的进阶使用方法
Lesson 6.5 机器学习调参基础理论与网格搜索 在上一小节执行完手动调参之后,接下来我们重点讨论关于机器学习调参的理论基础,并且介绍sklearn中调参的核心工具--GridSearchCV. ...
- R语言使用caret包中的createFolds函数对机器学习数据集进行交叉验证抽样、返回的样本列表长度为k个
R语言使用caret包中的createFolds函数对机器学习数据集进行交叉验证抽样.返回的样本列表长度为k个 目录
- R语言使用caret包中的createMultiFolds函数对机器学习数据集进行交叉验证抽样、返回的样本列表长度为k×times个、times为组内抽样次数
R语言使用caret包中的createMultiFolds函数对机器学习数据集进行交叉验证抽样.返回的样本列表长度为k×times个.times为组内抽样次数 目录
- 机器学习中的交叉验证
总第100篇 本篇讲讲机器学习中的交叉验证问题,并利用sklearn实现. 前言 在说交叉验证以前,我们先想一下我们在搭建模型时的关于数据切分的常规做法[直接利用train_test_split把所有 ...
- Python机器学习笔记 Grid SearchCV(网格搜索)
在机器学习模型中,需要人工选择的参数称为超参数.比如随机森林中决策树的个数,人工神经网络模型中隐藏层层数和每层的节点个数,正则项中常数大小等等,他们都需要事先指定.超参数选择不恰当,就会出现欠拟合或者 ...
- python机器学习库sklearn——交叉验证(K折、留一、留p、随机)
分享一个朋友的人工智能教程.零基础!通俗易懂!风趣幽默!还带黄段子!大家可以看看是否对自己有帮助:点击打开 全栈工程师开发手册 (作者:栾鹏) python数据挖掘系列教程 学习预测函数的参数,并在相 ...
- 机器学习中的交叉验证与有关定理
1.交叉验证 简单交叉验证:随机的将样本数据分为两部分(比如:70%的训练集,30%的测试集),然后用训练集来训练模型,在测试集上验证模型及参数.接着,再把样本打乱,重新选择训练集和测试集,继续训练数 ...
- 机器学习——SVM之交叉验证对参数(C,gamma)进行优化以及选择
目录 一.(C,gamma)简介 二.交叉验证 1.什么是交叉验证? 2.参数优化方法 3.python实现交叉验证cross_val_score(网格搜索算法GridSearchCV) 1)关键代码 ...
- 详细介绍机器学习中的交叉验证方法
机器学习的交叉验证 前言 HoldOut交叉验证 K折交叉验证 分层K折交叉验证 Leave P Out 留一交叉验证 蒙特卡罗交叉验证 时间序列交叉验证 前言 在研究生阶段接触机器学习的时候,我导问 ...
最新文章
- 【工具软件】Xmind的使用
- matlab正态分布
- Android中对Handler用法的总结
- asp.net中关于静态页面生成的代码实例
- Dapper的正确使用姿势
- Kotlin 一统天下?Kotlin/Native 开始支持 iOS 和 Web 开发
- 读jquery 权威指南[4]-Ajax
- Linux下挂载NTFS
- 状态空间模型与传递函数的转换关系+例题
- 使用frida获取微信EnMicroMsg.db 数据库密码
- (附源码)spring boot心理健康线上咨询系统 毕业设计 031539
- 无损音乐知识收集1(转)
- 2021-01-09
- window文件批量转换 cwp批量转换jpg
- JavaSE 多线程
- PROE塑胶产品结构标准设计视频教程灯具设计
- C1. Pokémon Army (easy version)(栈模拟)
- 混合波束成形|基础:深入浅出5G,毫米波,大规模MIMO与波束赋形
- 老男孩python全栈s21day03作业
- MIT公开课: Python 笔记6 二分法,牛顿-拉夫森方法,列表
热门文章
- 【Serenity BDD】Serenity 2.2.0 版本变动说明及相应的配置变动
- html表格列宽度 比例,HTML表格的整体宽度,以及各列的宽度均可以由( )属性来控制。...
- python3使用staf问题_python调用staf自动化框架的方法
- 在Win10下搭建web服务器,使用本机IP不能访问,但是使用localhos或127.0.0.1可以正常访问的解决办法...
- 数据化是什么,企业为什么要数据化管理?【Teamface企典】
- SpringBoot电商项目之购物车下单(沙箱支付)
- 解决Windows因更新导致C盘容量急剧减少
- IntelliJ IDEA 简体中文字体
- cmd批处理的/d/l/r/f
- python表示差值_Python-dataframe的对应列求差值