本篇文章主要介绍在sklearn中采用GridSearchCV和RandomizedSearchCV进行超参数选择。

一、超参数介绍:
1,超参数:在模型训练中,有些参数不能通过对数据进行学习得到,这种参数叫做超参数。比如,神经网络的层数,每层的神经元数量等。

2,超参数的重要性: 在做参数数的选择时计算量是很大的,为了节省开销,我们可以对模型的超参数进行分类,分为:重要,次重要,不重要。这种分类方法很直观,也是个人分类观点。具体得到重要程度可以通过改变该超参数观察对模型的影响程度。

二、超参数的网格搜索: 网格搜索就是提前设置参数的可以选取的值,然后在对于每个选择情况下训练,选取最好的情况。适合数据量小的时候。

GridSearchCV,它存在的意义就是自动调参,只要把参数输进去,就能给出最优化的结果和参数。但是这个方法适合于小数据集,一旦数据的量级上去了,很难得出结果。这个时候就是需要动脑筋了。数据量比较大的时候可以使用一个快速调优的方法——坐标下降。它其实是一种贪心算法:拿当前对模型影响最大的参数调优,直到最优化;再拿下一个影响最大的参数调优,如此下去,直到所有的参数调整完毕。这个方法的缺点就是可能会调到局部最优而不是全局最优,但是省时间省力,巨大的优势面前,还是试一试吧,后续可以再拿bagging再优化(按重要程度进行坐标下降)。

from sklearn.model_selection import GridSearchCV
from sklearn import svm,datasets
def gs():def gs():iris = datasets.load_iris()parameters = {'kernel':('rbf','linear'),'C':(1,2,3)}#超参数选择空间svr = svm.SVC()clf = GridSearchCV(svr,parameters)clf.fit(iris.data,iris.target)print(clf.best_estimator_)#最好的模型print(clf.best_score_)#最好模型的得分print(clf.best_params_)#最好模型的参数

三、随机搜索: 就是给定参数可以选择的分布,然后在分布中随机搜索一些参数进行训练,适合在数据量很大的时候。
RandomizedSearchCV模型训练后的结果cv_results_ 包含我们每次随机搜索参数得到的模型信息。

import numpy as np
from time import time
from scipy.stats import randint as sp_randint
from sklearn.model_selection import RandomizedSearchCV
from sklearn.datasets import load_digits
from sklearn.ensemble import RandomForestClassifierdef report(results, n_top=3):#搜索结果展示for i in range(1, n_top + 1):candidates = np.flatnonzero(results['rank_test_score'] == i)for candidate in candidates:#可能有名次并列的模型print("Model with rank:{0}".format(i))print("Mean validation score:{0:.3f}(std:{1:.3f})".format(results['mean_test_score'][candidate],results['std_test_score'][candidate]))print("Parameters:{0}".format(results['params'][candidate]))print("")def rs():digis = load_digits()X, y = digis.data, digis.targetclf = RandomForestClassifier(n_estimators=20)# 设置想要优化的超参数以及他们的取值分布param_dist = {"max_depth": [3, None],"max_features": sp_randint(1, 11),"min_samples_split": sp_randint(2, 11),"min_samples_leaf": sp_randint(1, 11),"bootstrap": [True, False],"criterion": ['gini', 'entropy']}#同样需要设置参数空间,不同的是有的参数是一个分布# 开启超参数空间的随机搜索n_iter_search = 20#随机搜索的次数,也就是建立了多少个模型random_search = RandomizedSearchCV(clf, param_distributions=param_dist, n_iter=n_iter_search)start = time()random_search.fit(X, y)print("RandomizedSearchCV took %.3f seconds for %d candidates""parameter settings." % ((time() - start), n_iter_search))report(random_search.cv_results_)#cv_results_里面包括每次迭代得到的模型信息,常用信息:rank_test_score(模型得分排名,可能有并列)、mean_test_score(模型的测试得分)、params(模型的参数)

四、工程中的超参数选择:
1,这里给出一点经验:在实践中,我们一般根据超参数的重要程度,对重要和次重要的参数先进行优化。具体优化的过程中并不是纯粹采用网格和随机,而是采用一种迭代的思想进行:现在一个大的范围里面进行粗粒度的网格或者随机搜索,然后在表现良好的区域内进行更加细粒度的网格或者随机搜索。具体迭代次数,达到你想要的结果为止。

2,以网格搜索举个例子,我们对超参数a进行选择,开始根据经验a的取值范围在[1,100]中:
第一次迭代(网格):a的取值可以(1,20,40,60,80,100)中搜索,发现a在[40,60]范围的结果最好
第二次迭代(网格):a的取值可以(40,45,50,55,60)中搜索,发现a在[45,50]范围的结果最好
重复,直到满意。

3,每次跌打的过程可以是网格搜索,也可以随机搜索。

sklearn超参数选择相关推荐

  1. SVM模型应用(四)SVM模型的超参数选择

    SVM模型超参数优化目前常用的方法是让C和g在一定的范围内取值,对于取定的c和g,把训练集作为原始数据集利用K-CV方法得到在此对c和g组合下验证集的分类准确率,最终取得训练集验证分类准确率最高的那组 ...

  2. 2.3.1 为超参数选择合适的范围

    调试处理 对于超参数,如何才能找到一个比较好的设定呢? 如图所示,我们可能会需要调试很多的超参数.但其中最重要的超参数还是学习率.被红色圈住的是最重要的超参数,橙色的是次重要的超参数.紫色是再其次重要 ...

  3. 3.2 为超参数选择合适的范围-深度学习第二课《改善深层神经网络》-Stanford吴恩达教授

    ←上一篇 ↓↑ 下一篇→ 3.1 调试处理 回到目录 3.3 超参数训练的实践: Pandas vs. Caviar 为超参数选择合适的范围 (Using an Appropriate Scale t ...

  4. 深度学习-Tensorflow2.2-深度学习基础和tf.keras{1}-优化函数,学习速率,反向传播,网络优化与超参数选择,Dropout 抑制过拟合概述-07

    多层感知器: 优化使用梯度下降算法 学习速率 学习速率选取原则 反向传播 SGD RMSprop Adam learning_rate=0.01 # -*- coding: utf-8 -*- # - ...

  5. Lecture6:激活函数、权值初始化、数据预处理、批量归一化、超参数选择

    目录 1.最小梯度下降(Mini-batch SGD) 2.激活函数 2.1 sigmoid 2.2 tanh 2.3 ReLU 2.4 Leaky ReLU 2.5 ELU 2.6 最大输出神经元 ...

  6. 3.2 为超参数选择合适的范围

  7. Dropout抑制过拟合与超参数选择

    一.代码 model=tf.keras.Sequential()#建模 model.add(tf.keras.layers.Flatten(input_shape=(28,28)))#28*28的向量 ...

  8. 机器学习模型的超参数优化 | 原力计划

    作者 | deephub 责编 | 王晓曼 出品 | CSDN博客 头图 | CSDN付费下载自东方IC 引言 模型优化是机器学习算法实现中最困难的挑战之一.机器学习和深度学习理论的所有分支都致力于模 ...

  9. 【机器学习】算法模型自动超参数优化方法

    什么是超参数? 学习器模型中一般有两类参数,一类是可以从数据中学习估计得到,我们称为参数(Parameter).还有一类参数时无法从数据中估计,只能靠人的经验进行设计指定,我们称为超参数(Hyper ...

最新文章

  1. white board and magnet
  2. [SpringMVC]定义多个前缀映射的问题
  3. PHP 学习 第一天
  4. [PAT乙级]1042 字符统计
  5. tf.name_scope()详解【命名空间其实就是给几个变量包一层名字,方便变量管理】
  6. 基本完成的重力空间的对任意形状的碰撞子系统
  7. SLAM_轨迹算法精度评价指标(ATE、RPE)
  8. 48页PPT|小米用户画像实战,每页都是经典
  9. php 数组添加键值对,php 给数组增加键值对
  10. 2016上海计算机考试PS玉佩题,玉佩效果,教案,ps,实例教程.doc
  11. SECS/GEM 产品开发和介绍
  12. 金蝶KIS旗舰版新建,恢复帐套时提示:ActiveX部件不能创建对象
  13. 用excel制作双层饼图_原创教程:用Excel做动态双层饼图
  14. Glide源码分析以及三级缓存原理
  15. IO字节流读取文本中文乱码
  16. HBuilderX运行到手机或模拟器提示没有找到设备
  17. POI-HSSF表格
  18. 用几何画板怎么作函数图像
  19. 常见的有规律的单复数转换(随笔)
  20. CSS 8 品优购项目

热门文章

  1. 逆向学习笔记: APK过签名包java校验(一)
  2. 达梦数据库存储过程及游标使用
  3. 前端设计模式学习笔记(面向对象JavaScript, this、call和apply, 闭包和高阶函数)...
  4. 类似AssistiveTouch可移动UIButton(UITouch用法)
  5. Linux安装Gitblit
  6. 这群中国女工,接到一个“拯救世界杯”的任务
  7. 比赛赛程安排算法--分治算法
  8. 组播技术基础——组播地址
  9. sqlite导出数据 导入 mysql/PbootCMS mysql/mysql 8.0
  10. 9.14 空中课堂 | Loot 新思考:新范式革命如何开启