在机器学习模型中,需要人工选择的参数称为超参数。比如随机森林中决策树的个数,人工神经网络模型中隐藏层层数和每层的节点个数,正则项中常数大小等等,他们都需要事先指定。超参数选择不恰当,就会出现欠拟合或者过拟合的问题。而在选择超参数的时候,有两个途径,一个是凭经验微调,另一个就是选择不同大小的参数,带入模型中,挑选表现最好的参数。 Scikit-Learn的GridSearchCV就能帮你找到一组很好的超参数组合。

1、介绍

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

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

2,什么是Grid Search网格搜索?

  Grid Search:一种调参手段;穷举搜索:在所有候选的参数选择中,通过循环遍历,尝试每一种可能性,表现最好的参数就是最终的结果。其原理就像是在数组里找到最大值。这种方法的主要缺点是比较耗时!   所以网格搜索适用于三四个(或者更少)的超参数(当超参数的数量增长时,网格搜索的计算复杂度会呈现指数增长,这时候则使用随机搜索),用户列出一个较小的超参数值域,这些超参数至于的笛卡尔积(排列组合)为一组组超参数。网格搜索算法使用每组超参数训练模型并挑选验证集误差最小的超参数组合。

class sklearn.model_selection.GridSearchCV(estimator, param_grid, scoring=None, n_jobs=None, iid='deprecated', refit=True, cv=None, verbose=0, pre_dispatch='2*n_jobs', error_score=nan, return_train_score=False)

例子

from sklearn import svm, datasetsfrom sklearn.model_selection import GridSearchCViris = datasets.load_iris()parameters = {'kernel':('linear', 'rbf'), 'C':[1, 10]}svc = svm.SVC()clf = GridSearchCV(svc, parameters)#2x2=4种clf.fit(iris.data, iris.target)#拟合x和yprint(clf.best_score_)print(clf.best_params_)#找出最佳参数

最优组合:

参数

  1. estimator :估计器对象,例如要找随机森林模型的最佳参数,就传随机森林模型。
  2. parameters:要选择的参数集合。
  3. cv: 用来指定交叉验证数据集的生成规则。假设=5表示每次计算都把数据集分成5份,拿其中一份作为交叉验证数据集,其他作为训练集。

例子一:决策树调参

# 导入库from sklearn.tree import DecisionTreeClassifierfrom sklearn import datasetsfrom sklearn.model_selection import train_test_splitimport matplotlib.pyplot as pltfrom sklearn.model_selection import GridSearchCVfrom sklearn.tree import DecisionTreeRegressorfrom sklearn import metrics# 导入数据集X = datasets.load_iris()  # 以全部字典形式返回,有data,target,target_names三个键data = X.datatarget = X.targetname = X.target_namesx,y=datasets.load_iris(return_X_y=True) # 能一次性取前2个print(x.shape,y.shape)# 数据分为训练集和测试集x_train,x_test,y_train,y_test = train_test_split(x,y,test_size=0.2,random_state=100)# 用GridSearchCV寻找最优参数(字典)param = {'criterion':['gini'],'max_depth':[30,50,60,100],'min_samples_leaf':[2,3,5,10],'min_impurity_decrease':[0.1,0.2,0.5]}grid = GridSearchCV(DecisionTreeClassifier(),param_grid=param,cv=6)grid.fit(x_train,y_train)print('最优分类器:',grid.best_params_,'最优分数:', grid.best_score_)  # 得到最优的参数和分值
# 用GridSearchCV寻找最优参数(列表)param = [{'criterion':['gini'],'max_depth':[30,50,60,100],'min_samples_leaf':[2,3,5,10],'min_impurity_decrease':[0.1,0.2,0.5]},         {'criterion':['gini','entropy']},         {'max_depth': [30,60,100], 'min_impurity_decrease':[0.1,0.2,0.5]}]grid = GridSearchCV(DecisionTreeClassifier(),param_grid=param,cv=6)grid.fit(x_train,y_train)print('最优分类器:',grid.best_params_,'最优分数:', grid.best_score_)  # 得到最优的参数和分值

测试集分数高于训练集,说明拟合得很好,有较好的泛化能力

测试集分类得已经相当好了!

GridSearchCV调参过程

clf.fit(x_train,y_train)fig = plt.figure()ax = fig.add_subplot(111)ax.fill_between(min_samples_leaf,clf.cv_results_['mean_train_score']+clf.cv_results_['std_train_score'],                 clf.cv_results_['mean_train_score']-clf.cv_results_['std_train_score'],color='b')ax.fill_between(min_samples_leaf,clf.cv_results_['mean_test_score']+clf.cv_results_['std_test_score'],                 clf.cv_results_['mean_test_score']-clf.cv_results_['std_test_score'],color='r')ax.plot(min_samples_leaf,clf.cv_results_['mean_train_score'],'ko-')ax.plot(min_samples_leaf,clf.cv_results_['mean_test_score'],'g*-')plt.legend()plt.title('GridSearchCV训练过程图')plt.rcParams['font.sans-serif'] = ['SimHei']plt.rcParams['font.serif'] = ['SimHei']  # 设置正常显示中文plt.show()

从图上可以看出,min_samples_leaf=3时,测试集的分数达到最高,训练集也还不错,且这时的标准差最小!

参考:https://blog.csdn.net/cindy407/article/details/93304059 https://blog.csdn.net/qq_25987491/article/details/81236504

随机森林调参_机器学习-模型调参利器 gridSearchCV(网格搜索)相关推荐

  1. 【2 - 随机森林 - 案例部分:随机森林在乳腺癌数据上的调参】菜菜sklearn机器学习

    课程地址:<菜菜的机器学习sklearn课堂>_哔哩哔哩_bilibili 第一期:sklearn入门 & 决策树在sklearn中的实现 第二期:随机森林在sklearn中的实现 ...

  2. 随机森林算法及贝叶斯优化调参Python实践

    1. 随机森林算法 1.1. 集成模型简介 集成学习模型使用一系列弱学习器(也称为基础模型或基模型)进行学习,并将各个弱学习器的结果进行整合,从而获得比单个学习器更好的学习效果. 集成学习模型的常见算 ...

  3. sklearn 3. 实例:随机森林在乳腺癌数据上的调参

    .这一节,我们就来使用我们刚才学的,基于方差和偏差的调参方法,在乳腺癌数据上进行一次随 机森林的调参.乳腺癌数据是sklearn自带的分类数据之一. 案例中,往往使用真实数据,为什么我们要使用skle ...

  4. 机器学习模型调优方法(过拟合、欠拟合、泛化误差、集成学习)

    机器学习模型调优方法 过拟合和欠拟合 降低过拟合风险的方法 降低欠拟合风险的方法 泛化误差.偏差和方差 泛化误差 偏差和误差 模型评估 Holdout检验 交叉检验 自助法 集成学习 Boosting ...

  5. DL之模型调参:深度学习算法模型优化参数之对深度学习模型的超参数采用网格搜索进行模型调优(建议收藏)

    DL之模型调参:深度学习算法模型优化参数之对深度学习模型的超参数采用网格搜索进行模型调优(建议收藏) 目录 神经网络的参数调优 1.神经网络的通病-各种参数随机性 2.评估模型学习能力

  6. 基于python的随机森林回归实现_从零实现回归随机森林

    一.前言 回归随机森林作为一种机器学习和数据分析领域常用且有效的算法,对其原理和代码实现过程的掌握是非常有必要的.为此,本文将着重介绍从零开始实现回归随机森林的过程,对于随机森林和决策树的相关理论原理 ...

  7. R语言xgboost包:使用xgboost算法实现随机森林(random forest)模型

    R语言xgboost包:使用xgboost算法实现随机森林(random forest)模型 目录 R语言xgboost包:使用xgboost算法实现随机森林(random forest)模型

  8. R语言随机森林回归(randomforest)模型构建

    R语言随机森林回归(randomforest)模型构建 目录 R语言随机森林回归(randomforest)模型构建

  9. 基于python的随机森林回归实现_Python机器学习实践:随机森林算法训练及调参-附代码...

    文章发布于公号[数智物语] (ID:decision_engine),关注公号不错过每一篇干货. 来源 | 博客园 作者 | 战争热诚 随机森林是一种有监督学习算法,是以决策树为基学习器的集成学习算法 ...

最新文章

  1. Android动画效果 translate、scale、alpha、rotate 切换Activity动画 控件位置调整
  2. python怎么画条形图-如何按python中的值分组绘制条形图?
  3. C#显示相机实时画面
  4. 转-iOS开发系列--地图与定位
  5. Guest权限突破8法(整理)
  6. java编程规范每行代码窄字符,wiki/0xFE_编程规范.md at master · islibra/wiki · GitHub
  7. Servlet-Response直接返回一个文件并且在浏览器上显示
  8. 毕业答辩PPT免费下载
  9. idea插件sonar字体背景颜色修改
  10. 内核初始化-从start_kernel到init
  11. 物联网(IOT)之常见物联网通信技术概览-有线篇
  12. win10 修改git账号密码
  13. qemu指定CPU型号
  14. 如何查询HP-UX主机防火墙状态
  15. java list 内存释放_QList内存释放(看它内部存储的是否是Object,另外还有qDeleteAll)...
  16. MapReduce论文笔记
  17. 等待任务执行完成时,界面上转圈圈,不让用户操作软件
  18. web安全 维护及其服务器的管理,web服务器的管理及维护.pdf
  19. 移动魔百盒CM201-2(emmc和nand)-分省模式-免拆机-强刷包及教程
  20. 数据库约束性条件作业笔记

热门文章

  1. python猪肉价格预测_预测猪肉年底会涨到30元,用python分析:肉涨真正利好哪些股?...
  2. 星座运势接口、星座查询接口和星座配对接口应用解决方案【源码可用】
  3. 醉笑陪君三万场 不诉离伤
  4. 试用新版浏览器,IE7 和 Firefox 2
  5. ESP8266透传接入中国移动OneNet
  6. phpcms v9 php标签,实现phpcms V9标签Tag伪静态
  7. Sql Server实用操作小技巧集合(转)
  8. R语言|1.4 R语言读取数据(csv,txt,xlsx)
  9. DNS(四)DDNS动态解析的配置
  10. IOS的 testflight测试设置(内部测试)