网格搜索简介
- 1、 网格搜索优化
- 2、随机网格搜索
1、 网格搜索优化
在所有超参数优化(HypeParameter Optimization,HPO)中,枚举网格搜索(GridSearchCV)是最为基础和经典的方法
在搜索开始之前,我们需要人工将每个超参数的备选值一一列出,多个不同超参数的不同取值之间排列组合,最终将组成一个参数空间(Parameter Space)
枚举网格搜索是一种穷尽式的搜索方法,该算法会将这个参数空间当中所有的参数组合代入模型进行训练,最终选出泛化能力最强的组合作为模型的最终超参数
参数空间越大越密,参数空间中的组合刚好覆盖损失函数最小值点的可能性就会越大
但是,参数空间越大,枚举网格搜索所需的算力和时间也会越大,当参数维度上升时,枚举网格搜索所需的时间将会呈指数级上升。因此枚举网格搜索更适用于参数空间小(模型超参数较少)的情况
决定网格搜索运算效率的因子共有两个:
- 参数空间的大小:参数空间越大,需要建模的次数越多
- 数据量的大小:数据量越大,每次建模所需的算力和时间越多
因此,在Sklearn中,网格搜索优化的方法主要包括两类:一是减小搜索空间,二是减小每次训练的数据
其中,减小参数空间的具体做法是:放弃原本使用的全域超参数空间,改为挑选出部分参数组合,构造超参数子空间,并只在子空间中进行搜索
2、随机网格搜索
在Sklearn中,随机抽取参数子空间并在子空间中进行搜索的方法叫做随机网格搜索(RandomizedSearchCV)
RandomizedSearchCV与GridSearchCV相似,但它不会尝试所有可能的参数组合,而是通过随机不放回的选择一组参数进行建模,选择的次数由n_iter
决定
由于搜索空间的缩小,因此需要枚举和对比的参数组的数量也相应减少,整体搜索耗时也将随之减少,因此
- 当设置相同的全域空间时,随机搜索的运算速度比枚举搜索快很多
- 当设置相同的训练次数时,随机搜索可以覆盖的空间比枚举搜索大很多
- 随机搜索得出的最小损失与枚举搜索得出的最小损失很接近
可见,随机网格搜索不但提升了运算速度,而且没有过多地损失搜索的精度。不过,随机网格搜索在实际运行时,并不是先抽样出子空间,再对子空间进行搜索,而是仿佛“循环迭代”一般,在这一次迭代中随机抽取一组参数进行建模,下一次迭代再随机抽取一组参数进行建模,由于该随机抽样是不放回的,因此不会出现两次抽中同一组参数的问题
我们可以通过控制随机网格搜索的迭代次数,来控制整体被抽出的参数子空间的大小,这种做法往往被称为“赋予随机网格搜索固定的计算量,当全部计算量被消耗完毕之后,随机网格搜索就停止”
随机网格搜索API官方文档:https://scikit-learn.org/stable/modules/generated/sklearn.model_selection.RandomizedSearchCV.html#sklearn.model_selection.RandomizedSearchCV
随机网格搜索API中文官方文档:https://scikit-learn.org.cn/view/658.html
更多介绍和API的使用可参考文末参考文章
参考文章:https://blog.csdn.net/weixin_60200880/article/details/131859162