超参数搜索——怎样得到最优模型?

目录​​​​​​​

1. 什么是超参数

1.1 机器学习中的超参数

1.2 深度学习中的超参数

2. 为什么要进行超参数搜索

3. 搜索策略

3.1 网格搜索

3.2 随机搜索 

3.3 遗传算法搜索

3.4 启发式搜索

4. 超参数搜索实战

4.1手动编写网格搜索

4.2 使用sklearn 进行超参数搜索

4.2.1 使用sklearn中的RandomizedSearchCV


1. 什么是超参数

超参数:即指在运行机器学习,深度学习算法之前需要指定的参数。一般说调参,这里的“参“就是指超参数。

1.1 机器学习中的超参数

  • KNN算法中k就是超参数;
  • k-means算法中的k也为超参数。

1.2 深度学习中的超参数

  • 训练参数:batch_size, learning_rate(学习率), step(步长),学习率衰减算法,dropout_rate等。
  • 网络结构参数:几层,每层宽度,每层激活函数等

2. 为什么要进行超参数搜索

  • 机器学习算法和神经网络有很多训练过程中不变的参数,即在运行机器学习,深度学习算法之前需要指定的参数——超参数。
  • 手工去试耗费人力。

3. 搜索策略

3.1 网格搜索

在网格搜索中,若搜索出来的最优参数离边界值比较近,可以适当的扩大搜索范围。也可以在最优值附近划定一个区域,进行更细粒度的搜索。

3.2 随机搜索 

随机搜索可避免网格搜索中,最优值不在网格上的情况。

3.3 遗传算法搜索

对自然界的模拟

A. 初始化候选参数集合——>训练——>得到模型指标作为生存概率

B. 选择——>交叉——>变异——>产生下一代集合

C. 重新到A

3.4 启发式搜索

  • 研究热点——AutoML(eg:Neural Architecture Search 神经网络结构搜索)
  • 使用循环神经网络来生成参数
  • 使用强化学习来进行反馈,使用模型来训练生成参数

4. 超参数搜索实战

4.1手动编写网格搜索

代码详见:

缺点:

(1) 这里只是调整1个超参数,如果是2个,或者是20个呢,要写20层for循环? 

——解决办法:可以直接调用现成的接口(比如sklearn中的searchCv的接口)。

(2) 没有并行化的处理,若要实现并行化处理,会增加模型的复杂度

4.2 使用sklearn 进行超参数搜索

4.2.1 使用sklearn中的RandomizedSearchCV

代码详见:

(1)将tf.keras的model转化为sklearn model

因为我们用的是回归模型,故可以使用tf.keras.wrapper.kerasRegressor接口,将keras的model封装成了sklearn的model。

(2)定义参数集合

(3)使用sklearn.model_selection.RandomizedSearchCV 搜索最佳参数

n_iter : 指的是随机得到多少个参数集合

如果运行有错误,可以将n_jobs改成1

(4) searchCv的原理

serchCv中有一个cross_validation的机制:训练集分成n份,n-1训练,最后一份验证。RandomizedSearchCV中的参数cv默认为5。即把数据分成5份,4份训练,1份验证。

假设我们把训练数据集分成A,B,C,D,E五份,第一次训练,A,B,C,D作训练集得到一个模型,E作验证集对模型进行评估,得到模型分值;第二次训练,A,B,C,E作训练集,D作验证集……第五次训练,B,C,D,E作训练集,A作验证集。最后根据五次模型中验证集得分的平均值作为该参数下模型的得分。

若n_iter = 10, cv=5. 则Fitting 5 folds for each of 10 candidates, totalling 50 fits。即总共需要训练50次。每一组参数需要训练5次,得到该组参数下,模型的得分。最终,选取模型得分最高的参数组合,得到最优模型。

同理,我们也可以使用sklearn中的GridSerchCV

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值