接下来介绍下一位参赛选手——GridSearchCV(),它要做的事情就跟其名字一样,进行网络搜索,也就是一个一个地遍历,不能放过任何一个可能的参数组合。就像之前说的组合有多少种,就全部走一遍,使用方法与 RandomizedSearchCV()基本一致,只不过名字不同罢了。

from sklearn.model_selection import GridSearchCV# 网络搜索
param_grid = {'bootstrap': [True],'max_depth': [8,10,12],'max_features': ['auto'],'min_samples_leaf': [2,3, 4, 5,6],'min_samples_split': [3, 5, 7],'n_estimators': [800, 900, 1000, 1200]
}# 选择基本算法模型
rf = RandomForestRegressor()# 网络搜索
grid_search = GridSearchCV(estimator = rf, param_grid = param_grid, scoring = 'neg_mean_absolute_error', cv = 3, n_jobs = -1, verbose = 2)
# 执行搜索
grid_search.fit(train_features, train_labels)

grid_search.best_params_

在使用网络搜索的时候,值得注意的就是参数空间的选择,是按照经验值还是猜测选择参数呢?之前已经有了一组随机参数选择的结果,相当于已经在大范围的参数空间中得到了大致的方向,接下来的网络搜索也应当基于前面的实验继续进行,把随机参数选择的结果当作接下来进行网络搜索的依据。相当于此时已经掌握了犯罪嫌疑人(最佳模型参数)的大致活动区域,要展开地毯式的抓捕了。

当数据量较大,没办法直接进行网络搜索调参时,也可以考虑交替使用随机和网络搜索策略来简化所需对比实验的次数。

best_grid = grid_search.best_estimator_
evaluate(best_grid, test_features, test_labels)平均气温误差. 3.6838716214
Accuracy = 93.78%

另一组参赛选手 Grid Search

经过再调整之后,算法模型的效果又有了一点提升,虽然只是一小点,但是把每一小步累计在一起就是一个大成绩。在用网络搜索的时候,如果参数空间较大,则遍历的次数太多,通常并不把所有的可能性都放进去,而是分成不同的小组分别执行,就像是抓捕工作很难地毯式全部搜索到,但是分成几个小组守在重要路口也是可以的。

下面再来看看另外一组网络搜索的参赛选手,相当于每一组候选参数的侧重点会略微有些不同∶

param_grid = {'bootstrap': [True],'max_depth': [12, 15, None],'max_features': [3, 4,'auto'],'min_samples_leaf': [5, 6, 7],'min_samples_split': [7,10,13],'n_estimators': [900, 1000, 1200]
}# 选择算法模型
rf = RandomForestRegressor()# 继续寻找
grid_search_ad = GridSearchCV(estimator = rf, param_grid = param_grid, scoring = 'neg_mean_absolute_error', cv = 3, n_jobs = -1, verbose = 2)grid_search_ad.fit(train_features, train_labels)

grid_search_ad.best_params_

best_grid_ad = grid_search_ad.best_estimator_
evaluate(best_grid_ad, test_features, test_labels)平均气温误差. 3.6540146079078952
Accuracy = 93.83%

看起来第二组选手要比第一组强一些,经过了这一番折腾之后我们可以把最终选定的所有参数都列出来了,93.83%相当于我们到此最优的一个结果了

最终模型

print('最终模型参数:\n')
pprint(best_grid_ad.get_params())


来总结一下我们的调参任务吧:

  1. 参数空间是非常重要的,它会对结果产生决定性影响,所以在开始任务之前,得选择大致一个合适区间,可以参考一些相同任务论文的经验值。
  2. 随机搜索可以更节约时间,尤其是在任务开始阶段,我们并不知道哪一个参数在哪一个位置效果能更好,这样我们可以把参数间隔设置的更大一些,先用随机搜索确定一些大致位置。
  3. 网络搜索相当于地毯式搜索了,当我们得到了大致位置之后,想在这里寻找到最优参数的时候就派上用场了,可以把随机和网络搜索当做一套组合拳,搭配使用。
  4. 最后调参的方法其实还有很多的,比如贝叶斯优化,这个还是蛮有意思的,跟大家简单说一下,想一想我们之前的调参方式,是不是每一个都是独立的进行不会对之后的结果产生任何影响,贝叶斯优化的基本思想在于每一个优化都是在不断积累经验,这样我会慢慢得到最终的解应当在的位置,相当于前一步结果会对后面产生影响了,如果大家对贝叶斯优化感兴趣,可以参考下Hyperopt工具包,用起来也很简便:

项目总结

在基于随机森林的气温预测实战任务中,将整体模块分为3部分进行解读,首先讲解了基本随机森林模型构建与可视化方法。然后,对比数据量和特征个数对结果的影响,建议在任务开始阶段就尽可能多地选择数据特征和处理方案,方便后续进行对比实验和分析。最后,调参过程也是机器学习中必不可少的一部分,可以根据业务需求和实际数据量选择合适的策略。接下来趁热打铁,拿起Notebook代码,自己动手实战一番吧。

大数据预测实战-随机森林预测实战(四)-模型微调相关推荐

  1. 大数据预测实战-随机森林预测实战(一)-数据预处理

    数据读取 气温预测的任务目标就是使用一份天气相关数据来预测某一天的最高温度,属于回归任务,首先观察一下数据集∶ # 数据读取 import pandas as pdfeatures = pd.read ...

  2. 大数据预测实战-随机森林预测实战(四)-模型调参

    之前对比分析的主要是数据和特征层面,还有另一部分非常重要的工作等着大家去做,就是模型调参问题,在实验的最后,看一下对于树模型来说,应当如何进行参数调节. 调参是机器学习必经的一步,很多方法和经验并不是 ...

  3. 大数据预测实战-随机森林预测实战(三)-数据与特征对模型的影响

    数据与特征对随机森林的影响 带着上节提出的问题,重新读取规模更大的数据,任务还是保持不变,需要分别观察数据量和特征的选寸结果的影响. 导入工具包 import pandas as pd 读取数据 fe ...

  4. 基于大尺度结构的随机森林预测与I类HLA结合的稳定肽

    点击下载https://www.frontiersin.org/articles/10.3389/fimmu.2020.01583/full 1.Abstract HLA I类亲和力预测的稳定肽是设计 ...

  5. 的garch预测_随机森林预测

    当涉及到预测数据(时间序列或其他类型的序列)时,人们会关注基本回归.ARIMA.ARMA.GARCH,甚至Prophet,但不排除使用随机森林来预测数据. 随机森林通常被认为是一种分类技术,但回归问题 ...

  6. 大数据预测实战-随机森林预测实战(三)-数据量对结果影响分析

    下面对比一下特征数量对结果的影响,之前两次比较没有加入新的天气特征,这次把降水.风速.积雪 3 项特征加入数据集中,看看效果怎样∶ # 准备加入新的特征 from sklearn.ensemble i ...

  7. python数据项目分析实战技法_《Python数据分析与机器学习实战-唐宇迪》读书笔记第9章--随机森林项目实战——气温预测(1/2)...

    第9章--随机森林项目实战--气温预测(1/2) 第8章已经讲解过随机森林的基本原理,本章将从实战的角度出发,借助Python工具包完成气温预测任务,其中涉及多个模块,主要包含随机森林建模.特征选择. ...

  8. python天气数据分析论文_《Python数据分析与机器学习实战-唐宇迪》读书笔记第9章--随机森林项目实战——气温预测(2/2)...

    第9章--随机森林项目实战--气温预测(2/2) 第8章已经讲解过随机森林的基本原理,本章将从实战的角度出发,借助Python工具包完成气温预测任务,其中涉及多个模块,主要包含随机森林建模.特征选择. ...

  9. 机器学习sklearn实战-----随机森林调参乳腺癌分类预测

    机器学习sklearn随机森林乳腺癌分类预测 机器学习中调参的基本思想: 1)非常正确的调参思路和方法 2)对模型评估指标有深入理解 3)对数据的感觉和经验 文章目录 机器学习sklearn随机森林乳 ...

最新文章

  1. 狗年拜年php源码,2018狗年拜年词大全!再也不担心拜年没祝词啦~祝您新年快乐!...
  2. 【问题收录】ImportError No module named MySQLdb 问题解决
  3. linux挂载wondiws目录,linux cifs自动挂载windows硬盘或文件夹
  4. mysql触发器的基本操作_MySQL基本操作-触发器
  5. tensorflow 中,修改张量tensor特定元素的值
  6. 谈谈YOLOv2做了哪些改进
  7. Flutter 2.5正式版发布,带来重大更新
  8. 猎豹java数据结构,猎豹网校C++数据结构与算法42讲视频教程
  9. MATLAB 图像批处理工具箱(Image Batch Processor)介绍
  10. Linux服务器建立IP隧道,变更访问出口
  11. QQ聊天记录生成词云--WordCloud
  12. hdu 5325 Crazy Bobo (树形dp)
  13. vue 多种方法实现名字拼接
  14. 2014最火的10分钟6块腹肌动图gif教程,男人不能没有腹肌!
  15. 新站如何快速做SEO优化,获收录和排名
  16. 如何查看笔记本电脑固态硬盘接口与接口协议
  17. 【C库函数】 strstr函数详解
  18. 2018/09/27Web前端学习第三课
  19. Android开发中的WMS详细解析
  20. Paper:研究生论文撰写(期刊论文与毕业论文简介、比较、写作流程)详细攻略

热门文章

  1. oracle 修改序列末值,当ViewModel值更改时,用户界面未更新
  2. html5网页制作代码_好程序员HTML5大前端常用开发工具大集合
  3. java和vb.net des加密_vb.net DES加密与解密
  4. paddle 标注_质量检查丨生成序号标注,究竟可以有多快多准确?
  5. 【script】python实现多线程将doc、docx转pdf,doc转docx
  6. php访问多重数组,PHP实现删除多重数组对象属性并重新赋值的方法
  7. vue密码强度提示条
  8. python作业案例_作业解析-python bayesian案例
  9. extjs html页面刷新,ExtJS onReady引发的浏览器对页面的加载过程
  10. defaultvalue默认显示 请选择_使用Jenkins Git参数实现分支标签动态选择