目录
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