XGboost调参

1、XGBoost的优点:

灵活性:支持自定义损失函数和评估指标。

高效性:采用并行处理和近似算法,使得计算速度更快。

鲁棒性强:对于缺失值和异常值具有较好的鲁棒性。(相对于深度学习模型不需要精细调参便能取得较好的拟合效果。)

自动特征选择:通过分析特征的重要性,自动选择最优特征。自身可实现树模型的迭代,表现为自动处理缺失值。

2、XGBoost的缺点:

相对于深度学习模型,无法对时空位置建模,不能灵敏捕获图像、语音、文本等高维数据。

3、调参时需要知道的几个重要参数

参数

范围

释义

效果

n_estimators

int

基本学习器的数量

值越大,模型越复杂,越容易过拟合

max_depth

0,∞

基本学习器的深度

值越大,模型越复杂,越容易过拟合

learning_rate

[0,1]

学习率

每个基模型的惩罚项,降低单个模型的影响;值越接近1越容易或拟合,越接近0精度越低

gamma

C

损失减少阈值

值越小模型越复杂,越容易过拟合(在决策树中,只有损失下降的值超过该值,才会继续分裂节点)

reg_alpha

Float

L1正则化

L1正则化用于对叶子的个数进行惩罚(减少模型过度拟合)

reg_lambda

Float

L2正则化

L2正则化用于对叶子节点的得分进行惩罚,L1和L2正则化项共同惩罚树的复杂度,值越小模型的鲁棒性越高(减少模型过度拟合)

min_child_weight

0,∞

子集最小权重(最小样本的权重之和)

样本的权重之和小于该值,将不再分裂

subsample

(0,1]

样本子采样

训练集对样本实例的采样率,用于防止过拟合

colsample_bytree

(0,1]

列子采样

每棵树对特征的采样率,用于防止过拟合

4、XGBoost的4种调参方法

手动调参;网格搜索;随机搜索;贝叶斯搜索

由于随机搜索效率较高,速度较快,此次主要以随机搜索为例调参

#随机搜索调参,效率高于网格搜索和贝叶斯搜索,贝叶斯搜索更为全面
from xgboost.sklearn import XGBRegressor
from sklearn.model_selection import RandomizedSearchCV
import pandas as pd
import numpy as np
from math import sqrt
from sklearn.metrics import mean_squared_error
 
#1.以CSV形式导入数据集
df_train = pd.read_csv(r"训练数据集")
df_test = pd.read_csv(r"测试数据集")
 
X_train = df_train[[i for i in df_train.columns.tolist() if i not in ["label"]]] #训练集
y_train = df_train["label"]                                                      #训练标签
X_test =df_test[[i for i in df_test.columns.tolist() if i not in ["label"]]]     #测试集
y_test = df_test["label"]                                                        #测试标签
 
#2.参数集定义
param_grid = {
            'max_depth': [2, 3, 4, 5, 6, 7, 8],
            'n_estimators': [30, 50, 100, 300, 500, 1000,2000],
            'learning_rate': [0.1, 0.2, 0.3, 0.4, 0.01, 0.02, 0.03, 0.05, 0.5],
            "gamma":[0.0, 0.1, 0.2, 0.3, 0.4],
            "reg_alpha":[0.0001,0.001, 0.01, 0.1, 1, 100],
            "reg_lambda":[0.0001,0.001, 0.01, 0.1, 1, 100],
            "min_child_weight": [2,3,4,5,6,7,8],
            "colsample_bytree": [0.6, 0.7, 0.8, 0.9],
            "subsample":[0.6, 0.7, 0.8, 0.9]}
#3.随机搜索并打印最佳参数
gsearch1 = RandomizedSearchCV(XGBRegressor(scoring='ls',seed=27), param_grid, cv=5)
gsearch1.fit(X_train, y_train)
print("best_score_:",gsearch1.best_params_,gsearch1.best_score_)
 
#4.用最佳参数进行预测
y_test_pre= gsearch1.predict(X_test)
 
 
#5.打印测试集RMSE
rmse = sqrt(mean_squared_error(np.array(list(y_test)), np.array(list(y_test_pre))))
print("rmse:",rmse)

5、调参思路

(1)选择较高的学习率,例如0.1,这样可以减少迭代用时。

(2)然后对 max_depth , min_child_weight , gamma , subsample, colsample_bytree 这些参数进行调整。这些参数的合适候选值为:

max_depth:[3, 5, 6, 7, 9, 12, 15, 17, 25]

min_child_weight:[1, 3, 5, 7]

gamma:[0, 0.05 ~ 0.1, 0.3, 0.5, 0.7, 0.9, 1]

subsample:[0.6, 0.7, 0.8, 0.9, 1]

colsample_bytree:[0.6, 0.7, 0.8, 0.9, 1]

(3)调整正则化参数 lambda , alpha,这些参数的合适候选值为:

alpha:[0, 0.01~0.1, 1]

lambda :[0, 0.1, 0.5, 1]

(4)降低学习率,继续调整参数,学习率合适候选值为:[0.01, 0.015, 0.025, 0.05, 0.1]
 

  • 39
    点赞
  • 41
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值