随机网格搜索的原理和实现【极简】

基本原理

相较于枚举网格搜索,随机网格搜索的计算量更低。随机网格搜索放弃原本的搜索中的全域超参数空间,改为挑选出部分参数组合,构造超参数子空间,并只在子空间中搜索。

以下图的二维空间为例,假设n_estimator的取值为[50,100,150,200,250,300],max_depth的取值为[2,3,4,5,6],则枚举网格搜索必须对30种参数组合都进行搜索;而随机网格搜索只需要抽样橙色的点作为参数组合进行搜索。这样,整体搜索的计算量就大大下降了。枚举网络搜索需要30次,而随机网格搜索仅需要8次。

随机网格搜索相较于枚举网格搜索来讲,其优势有如下三点:

(1)当设置相同的全域空间时,随机搜索的运算速度比枚举搜索很多。

(2)当设置相同的训练次数时,随即搜索可以覆盖的空间比枚举网格搜索很多。

(3)随机网格搜索的最小损失与枚举网格搜索得出的最小损失很接近

代码实现

随机网格搜索的参数如下图所示

 

from sklearn.model_selection import RandomizedSearchCV
import numpy as np

#1.创建参数空间,字典格式
param_grid_simple = {"criterion":["squared_error","poisson"]
                     , 'n_estimator':[*range(20,100,5)]
                     , 'max_depth':[*range(10,25,2)]
                     , 'max_features':["log2","sqrt",16,32,64,"auto"]
                     , 'min_impurity_decrease': [*np.arange(0,5,10)]
                     }

#2.建立回归器,交叉验证
reg = RFR(random_state=1412,verbose=True,n_jobs=-1)
cv = KFold(n_splits=5,shuffle=True,random_state=1412) #5折

#3.计算全域参数空间大小,这是抽样(n_iter)的最大值
count_space(param_grid_simple)

#4.定义随机搜索
search = RandomizedSearchCV(estimator=reg
                            ,param_distributions=param_grid_simple
                            ,n_iter=800 #子空间的大小是全域空间的一半左右
                            ,scoring="neg_mean_squared_error"
                            ,verbose=True
                            ,cv=cv
                            ,random_state=1412
                            ,n_jobs=-1
                            )
#注意:不要忘记random_state,并且需要自行定义n_iter

#5.查看模型结果
search.best_estimator_

  • 3
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值