机器学习教程:网格搜索法&交叉验证法

网格搜索法(Grid SearchCV)

概念

Python机器学习笔记:Grid SearchCV(网格搜索) - 战争热诚 - 博客园

GridSearchCV的名字其实可以拆分为两部分,GridSearch和CV,即网格搜索和交叉验证。这两个名字都非常好理解。网格搜索,搜索的是参数,即在指定的参数范围内,按步长依次调整参数,利用调整的参数训练学习器,从所有的参数中找到在验证集上精度最高的参数,这其实是一个训练和比较的过程。

GridSearchCV可以保证在指定的参数范围内找到精度最高的参数,但是这也是网格搜索的缺陷所在,他要求遍历所有可能参数的组合,在面对大数据集和多参数的情况下,非常耗时。

Grid Search:一种调参手段;穷举搜索:在所有候选的参数选择中,通过循环遍历,尝试每一种可能性,表现最好的参数就是最终的结果。其原理就像是在数组里找到最大值。这种方法的主要缺点是比较耗时!

所以网格搜索适用于三四个(或者更少)的超参数(当超参数的数量增长时,网格搜索的计算复杂度会呈现指数增长,这时候则使用随机搜索),用户列出一个较小的超参数值域,这些超参数至于的笛卡尔积(排列组合)为一组组超参数。网格搜索算法使用每组超参数训练模型并挑选验证集误差最小的超参数组合。

RandomizedSearchCV(随机搜索)

我们在搜索超参数的时候,如果超参数个数较少(三四个或者更少),那么我们可以采用网格搜索,一种穷尽式的搜索方法。但是当超参数个数比较多的时候,我们仍然采用网格搜索,那么搜索所需时间将会指数级上升。

所以有人就提出了随机搜索的方法,随机在超参数空间中搜索几十几百个点,其中就有可能有比较小的值。这种做法比上面稀疏化网格的做法快,而且实验证明,随机搜索法结果比稀疏网格法稍好。

RandomizedSearchCV使用方法和类GridSearchCV 很相似,但他不是尝试所有可能的组合,而是通过选择每一个超参数的一个随机值的特定数量的随机组合,这个方法有两个优点:

  • 如果你让随机搜索运行, 比如1000次,它会探索每个超参数的1000个不同的值(而不是像网格搜索那样,只搜索每个超参数的几个值)

  • 你可以方便的通过设定搜索次数,控制超参数搜索的计算量。

RandomizedSearchCV的使用方法其实是和GridSearchCV一致的,但它以随机在参数空间中采样的方式代替了GridSearchCV对于参数的网格搜索,在对于有连续变量的参数时,RandomizedSearchCV会将其当做一个分布进行采样进行这是网格搜索做不到的

交叉验证法

交叉验证(Cross Validation)原理小结 - 刘建平Pinard - 博客园

重复地使用数据,把得到的样本数据进行划分,组合为不同的训练集和测试集。

用训练集来训练模型,用测试集来评估模型预测的好坏。在此基础上可以得到多组不同的训练集和测试集,某次训练集中的某样本在下次可能成为测试集中的样本,即“交叉”。

交叉验证用在数据不是很充足的时候。比如在我日常项目里面,对于普通适中问题,如果数据样本量小于一万条,我们就会采用交叉验证来训练优化选择模型。如果样本大于一万条的话,我们一般随机的把数据分成三份,一份为训练集(Training Set),一份为验证集(Validation Set),最后一份为测试集(Test Set)。用训练集来训练模型,用验证集来评估模型预测的好坏和选择模型及其对应的参数。把最终得到的模型再用于测试集,最终决定使用哪个模型以及对应参数。

简单交叉验证

首先,我们随机的将样本数据分为两部分(比如: 70%的训练集,30%的测试集),然后用训练集来训练模型,在测试集上验证模型及参数。接着,我们再把样本打乱,重新选择训练集和测试集,继续训练数据和检验模型。最后我们选择损失函数评估最优的模型和参数。

S折交叉验证(S-Folder Cross Validation)

和第一种方法不同,S折交叉验证会把样本数据随机的分成S份,每次随机的选择S-1份作为训练集,剩下的1份做测试集。当这一轮完成后,重新随机选择S-1份来训练数据。若干轮(小于S)之后,选择损失函数评估最优的模型和参数。

留一交叉验证(Leave-one-out Cross Validation)

是第二种情况的特例,此时S等于样本数N,这样对于N个样本,每次选择N-1个样本来训练数据,留一个样本来验证模型预测的好坏。此方法主要用于样本量非常少的情况,比如对于普通适中问题,N小于50时,我一般采用留一交叉验证。

自助法

比如我们有m个样本(m较小),每次在这m个样本中随机采集一个样本,放入训练集,采样完后把样本放回。这样重复采集m次,我们得到m个样本组成的训练集。当然,这m个样本中很有可能有重复的样本数据。同时,用没有被采样到的样本做测试集。这样接着进行交叉验证。由于我们的训练集有重复数据,这会改变数据的分布,因而训练结果会有估计偏差,因此,此种方法不是很常用,除非数据量真的很少,比如小于20个。

机器学习教程:网格搜索法交叉验证法相关推荐

  1. 机器学习基础-特征缩放交叉验证法-05

    特征缩放交叉验证法 过拟合(Overfitting)正则化(Regularized)

  2. 【机器学习-西瓜书】二、模型评估:过拟合;自助法;交叉验证法

    关键词: 错误率(error rate):精度(accuracy):经验误差(empirical error):泛化误差(generalization error):过拟合(overfitting); ...

  3. Java机器学习库ML之九交叉验证法(Cross Validation)

    交叉验证(Cross Validation,CV)是用来验证分类器的性能一种统计分析方法,基本思想是把在某种意义下将原始数据(dataset)进行分组,一部分做为训练集(train set),另一部分 ...

  4. 5折交叉验证_数据集的划分——交叉验证法

    本文作者:王 歌 文字编辑:戴 雯 技术总编:张 邯 前面我们在举例时,通常是将所使用的数据集按照75%和25%的比例划分为训练集和测试集,这主要是为了我们举例方便,同时划分后的数据量也依然符合大样本 ...

  5. python 模型交叉验证法_使用交叉验证法(Cross Validation)进行模型评估

    scikit-learn中默认使用的交叉验证法是K折叠交叉验证法(K-fold cross validation):它将数据集拆分成k个部分,再用k个数据集对模型进行训练和评分. 1.K折叠交叉验证法 ...

  6. 十折交叉验证pythoniris_数据集的划分——交叉验证法

    本文作者:王 歌 文字编辑:戴 雯 技术总编:张 邯Python云端培训课程火热招生中~重大通知!!!爬虫俱乐部于2020年7月11日至14日在线上举行为期四天的Stata编程技术定制培训,招生工作已 ...

  7. 时序算法交叉验证法python实现

    介绍: 交叉验证_百度百科 时序算法模型的交叉验证: 需求:我们在进行机器学习算法,为了保能够得到可靠稳定的模型,通常需要用到交叉验证法来对模型进行验证.常见的交叉验证形式有Holdout验证,K-f ...

  8. 波斯顿房价(lasso、线性回归、留出法、k折交叉验证法)

    经过几天水水的学习,利用波斯顿房价数据集做了一点小小练习,并写此笔记来记录自己点滴实验心得.新手实验,望有经验人士勿喷,本人抛砖引玉,望得到宝贵建议.如今后有新的体会,则会更新笔记. 1.线性回归+留 ...

  9. ISLR读书笔记八:交叉验证法(Cross-Validation)

    交叉验证法(Cross-Validation) 前言 校验集方法 留一法 k折交叉验证 前言 本篇的交叉验证法(Cross-Validation)和下篇的自助法(bootstrap)都是重采样方法(r ...

最新文章

  1. CPaintDC和CClientDC的区别
  2. Python:利用collections库实现统计单个字或单个字母的频率统计并进行降序输出、统计一个列表内重复元素并以字典形式输出
  3. oracle 三列数值相加,Oracle SQL/PLSQL:按货币拆分和求和值的分层查询
  4. 【目录】 Git 教程
  5. python import xlrd 报错_python读取excel(xlrd)
  6. 小白也能看懂——使用dev-c++建立工程(多个文件一同编译连接)并运行
  7. SQl常用语句总结(持续更新……)
  8. python怎么读取石墨表格_Python用Pandas读写Excel
  9. cuSPARSE库:(四)不同矩阵格式在内存中的存储方式
  10. ROS学习笔记12(用Python写一个简单的消息发布和消息订阅)
  11. python怎么读取excel-python对Excel的读取
  12. [渝粤教育] 中国地质大学 思想道德修养与法律基础 复习题
  13. Linux批量更改文件后缀名
  14. Java 猜单词游戏
  15. 神经网络——基础思想
  16. 2020阿里巴巴全球数学竞赛预选赛(第二轮)试题及答案
  17. 测试应该知道的知识-python检查死链
  18. 解决导出excel文件名中文乱码的问题
  19. Linux 编辑器 !强推!
  20. 【广告架构day2】新浪广告系统架构的演进之路:服务化改造

热门文章

  1. Excel 2010 最熟悉的陌生功能:筛选器(将当前所选内容添加到筛选器)
  2. python中shell是什么意思,python中的shell是什么
  3. JAVA本地方法详解,什么是JAVA本地方法?
  4. 双摄测距原理_技术科普 | 一颗不够就再来一颗!双摄手机原理解析
  5. Uniapp中uni.getSystemInfo在某些显示器(电视)不能成功获取屏幕分辨率
  6. 《安富莱嵌入式周报》第317期:开源60W小型UPS电源,0.1Hz - 200MHz 频率计,纯C实现的SokolGFX渲染库, FreeRTOS Trace
  7. iPhone 6 / 6 Plus 出现后,如何改进工作流以实现一份设计稿支持多个尺寸?
  8. android反编译工具jadx卡死解决方案。
  9. 高斯噪声、高斯白噪声、SNR、噪声方差
  10. MATLAB中的函数句柄 理解