RandomizedSearchCV 是一个可以代替 GridSearchCV的工具。通常,相比Grid Search,Randomized Search效率会更高。具体的原理如下:

  • 对于搜索范围是分布的超参数,根据给定的分布随机采样;
  • 对于搜索范围是list的超参数,在给定的list中进行等概率采样;
  • 对前面两步中得到的n_iter组采样结果,进行遍历。
  • 如果给定的搜索范围均为list,则不放回抽样n_iter次。

在sklearn中,交叉验证随机搜索的类为sklearn.model_selection.RandomizedSearchCV

关键参数如下:

  • estimator: 模型
  • n_iter: 迭代次数(查找次数)
  • n_jobs: 并行数,设置为-1时,则用所有的处理器
  • cv: 交叉验证折数,不给则默认为5
  • error_score:如果error了,记多少分。默认是'raise',也就是报错,也可以选择一个分数,例如-1

以一个实例来举例

from sklearn.model_selection import RandomizedSearchCV
'''
用于设置RandomizedSearchCV中模型的分布
例如:查找连续值使用 uniform
     uniform(1,5),指的是从1-5间等可能选择浮点数; 
     查找整数值可以使用randint
     randint(1,5),指的是从1-5间等可能选择整数
'''
from scipy.stats import uniform, randint

from xgboost import XGBRFClassifier
from sklearn.datasets import load_iris

iris = load_iris()

X = iris.data
y = iris.target
'''
n_estimators: 从500-5000等可能选择整数
learning_rate: 从这5个值中等可能地选择
subsample: 从0.3-0.9等可能选择浮点数
colsample_bytree: 从0.5-0.9等可能选择浮点数
'''
params = { 'n_estimators' : randint(500,5000), 
              'learning_rate': [0.001, 0.01, 0.1, 0.2, 0,3], 
              'subsample': uniform(0.3, 0.9), 
              'colsample_bytree': uniform(0.5, 0.9),
             }

xgb = XGBRFClassifier(objective='multi:softmax')
'''
使用xgb为estimator
参数列表为 params
n_iter:迭代次数1000
评判标准为 accuracy
注意:二分类时可以使用 scoring 可以设置为 roc_auc,多分类需要用 accuracy
如果error了,记为0分
用所有的处理器进行计算
'''
clf = RandomizedSearchCV(xgb, 
                         param_distributions = params, 
                         n_iter = 1000, 
                         scoring = 'accuracy', 
                         error_score = 0, 
                         verbose = 3, 
                         n_jobs = -1)

# 开始搜索, 返回值中的model的参数是假的,看best estimator使用下面的命令
clf.fit(X, y)

# 查看最好的预测器
clf.best_estimator_
最后修改:2021 年 06 月 01 日 02 : 21 PM
如果觉得我的文章对你有用,请随意赞赏