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_