XGBoost---Sklearn_GridSearchCv

S k l e a r n G r i d S e a r c h C v SklearnGridSearchCv SklearnGridSearchCv

这里我们使用XGboost作为参照:

常用经验参数范围:



learning_rate = [0.0001,0.001,0.01,0.1,0.2,0.3] #学习率
gamma = [1, 0.1, 0.01, 0.001]
max_depth = 3-10
n_estimators =

-----------------------------------------------------
min_child_weight =
subsample = 固定为1
colsample_bytree = [0.3, 0.5]之间进行网格搜索
colsample_bylevel = [0.3, 0.5]之间进行网格搜索
reg_alpha = 
reg_lambda = 

-----------------------------------------------------

param_grid = dict(learning_rate = learning_rate,gamma = gamma)#转化为字典格式,网络搜索要求


补充:
gridsearch模型测试

#make prediction
preds = clf.predict(X_test)
predictions = [round(value) for value in preds]
test_accuracy = accuracy_score(y_test, predictions)
print("Test Accuracy of gridsearchcv: %.2f%%" % (test_accuracy * 100.0))

一 确定GridSearch常用参数

clf = GridSearchCV(estimator = bst, param_grid = param_grid, scoring='accuracy', cv=kflod , n_jobs = -1)

  • 1.estimator = bst

确定要使用网格搜索的模型,这里是XGBClassifier

bst =XGBClassifier(max_depth=2,objective='binary:logistic')

  • 2.param_grid = param_grid
    确定你选择模型所需调的参数,这里是选择了XGBClassifier可调的参数learning_rate 、gamma ;在下面有张XGBClassifier参数表,红色参数都可以尝试调参
learning_rate = [0.0001,0.001,0.01,0.1,0.2,0.3] #学习率
gamma = [1, 0.1, 0.01, 0.001]
param_grid = dict(learning_rate = learning_rate,gamma = gamma)#转化为字典格式,网络搜索要求

  • 3.scoring=‘accuracy’
    这里是选择评价函数,我们可以用其选出最好的模型参数
    常见的评价指标如下图:

在这里插入图片描述


  • cv=kflod
    确定交叉验证的方式,这里选择了分层5折交叉验证
kflod = StratifiedKFold(n_splits=5, shuffle = True,random_state=7)#将训练/测试数据集划分5个互斥子集,

  • n_jobs = -1
    选择使用所有CPU进行训练

clf = GridSearchCV(estimator = bst, param_grid = param_grid, scoring='accuracy', cv=kflod , n_jobs = -1)
clf.fit(X_train, y_train)
clf.cv_results_, clf.best_params_, clf.best_score_

我们训练完的网络搜索 clf 模型会拥有如下属性:


其中:clf.best_params_是我们最想要的参数设置

在这里插入图片描述


(1)cv_results_ : 给出不同参数情况下的评价结果。具有键作为列标题和值作为列的dict,可以导入到DataFrame中。注意,“params”键用于存储所有参数候选项的参数设置列表。

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

(2)best_estimator_ : 通过搜索选择的估计器,即在左侧数据上给出最高分数(或指定的最小损失)的估计器。 如果refit = False,则不可用。

在这里插入图片描述

(3)best_score_ : best_estimator的分数

在这里插入图片描述

(4)best_params_ : 最佳结果的参数设置

在这里插入图片描述

(5)best_index_ : int 对应于最佳候选参数设置的索引(cv_results_数组)。
search.cv_results _ [‘params’] [search.best_index_]中的dict给出了最佳模型的参数设置,给出了最高的平均分数(search.best_score_)。

在这里插入图片描述


(6)scorer_ : function corer function used on the held out data to choose the best parameters for the model.

(7)n_splits_ : The number of cross-validation splits (folds/iterations).

在这里插入图片描述


使用GridSearch最要紧的是你要清楚你使用模型有哪些参数可以调,又哪些参数可调又重要

如Xgboost:其中红色的就是重要可调参数

在这里插入图片描述

在这里插入图片描述

其次就是调参的方法(方向)


  • 通用参数:这部分参数通常我们不需要调整,默认值就好
  • 学习目标参数:与任务有关,定下来后通常也不需要调整
  • booster参数:弱学习器相关参数,需要仔细调整,会影响模型性能

通用参数

• booster:弱学习器类型
– 可选gbtree(树模型)或gbliner(线性模型)
– 默认为gbtree(树模型为非线性模型,能处理更复杂的任务)

• silent:是否开启静默模式
– 1:静默模式开启,不输出任何信息
– 默认值为0:输出一些中间信息,以助于我们了解模型的状态

• nthread:线程数
– 默认值为-1,表示使用系统所有CPU核


学习目标参数

• objective: 损失函数
– 支持分类/回归/排序

• eval_metric:评价函数

• seed:随机数的种子
– 默认为0
– 设置seed可复现随机数据的结果,也可以用于调整参数


booster参数

弱学习器的参数,尽管有两种booster可供选择,这里只介绍gbtree

  1. learning_rate : 收缩步长 vs. n_estimators:树的数目
    – 较小的学习率通常意味着更多弱分学习器
    – 通常建议学习率较小( 𝜂 < 0.1),弱学习器数目n_estimators大
    – 可以设置较小的学习率,然后用交叉验证确定n_estimators

  2. 行(subsample)列(colsample_bytree、colsample_bylevel)下采样比例
    – 默认值均为1,即不进行下采样,使用所有数据
    – 随机下采样通常比用全部数据的确定性过程效果更好,速度更快
    – 建议值:0.3 - 0.8

  3. 树的最大深度: max_depth
    – max_depth越大,模型越复杂,会学到更具体更局部的样本
    – 需要使用交叉验证进行调优,默认值为6,建议3-10

  4. min_child_weight :孩子节点中最小的样本权重和
    – 如果一个叶子节点的样本权重和小于min_child_weight则分裂过程结束


三个最重要的参数为:树的数目、树的深度和学习率

建议参数调整策略为:

– 采用默认参数配置试试

– 如果系统过拟合了,降低学习率

– 如果系统欠拟合,加大学习率


(常使用XGBoost)建议:

– n_estimators和learning_rate:固定n_estimators为100(数目不大,因为树的深度较大,每棵树比较复杂),然后调整learning_rate

– 树的深度max_depth:从6开始,然后逐步加大

– min_child_weight : 1Τ𝑠𝑞𝑟𝑡 rare_events
,其中rare_events 为稀有事件的数目

– 列采样colsample_bytree/ colsample_bylevel:在[0.3, 0.5]之间进行网格搜索

– 行采样subsample:固定为1

– gamma: 固定为0.0


参数调优的一般方法:

  1. 选择较高的学习率(learning rate),并选择对应于此学习率的理想的树数量
    – 学习率以工具包默认值为0.1。
    – XGBoost直接引用函数“cv”可以在每一次迭代中使用交叉验证,并返回理想的树数量(因为交叉验证很慢,所以可以import两种XGBoost:直接引用xgboost(用“cv”函数调整树的数目)和XGBClassifier —xgboost的sklearn包(用GridSearchCV调整其他参数 )。
  2. 对于给定的学习率和树数量,进行树参数调优
    (max_depth,min_child_weight, gamma, subsample, colsample_bytree, colsample_bylevel)
  3. xgboost的正则化参数(lambda, alpha)的调优
  4. 降低学习率,确定理想参数
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值