XGboost算法

一、XGBoost基本原理

          参考文章:

           https://blog.csdn.net/qq_22238533/article/details/79477547   ------ xgboost原理分析以及实践(转载

           https://blog.csdn.net/sb19931201/article/details/52557382     ------ XGboost API

(1) XGBoost损失函数

  •     XGboost损失函数的结构

  •    GBDT与XGBoost损失函数的区别

 

  •     XGboost损失函数初级表达式

  •     XGboost损失函数推导 

  

 

  •      XGboost损失函数最终式子

 

  •        例题

 

(2)XGBoost的学习策略

  •    XGboost 如何确定最优的子树结构,即损失函数最小的子树结构?
    • 第一种方式:暴力穷举
      • 暴力穷举:暴力罗列出所有的树结构,​​​​​​选择损失函数最小的子树结构(数据量很庞大时不宜计算)​
    • 第二种方式:贪心法
      • 贪心法:类似于决策树的划分方法,逐层计算选取可能划分点中最优的分裂点(Gain增益最大,即损失函数
      •               减小最多的分裂点)。
• 决策树相关算法计算指标: 
    • ID3算法:信息增益 
    • C4.5算法:信息增益率 
    • CART算法:Gini系数

 

Xgboost最优树结构划分方式:
     Gain值越大,分裂后减少的损失值越大。所以对于一个叶子节点分割时,计算所 有候选(feature,value)对应的gain,选择
        gain最大特征进行分割。
  •  树节点的贪心分裂方法?
    •  精确算法:遍历所有特征的所有可能的分割点,计算gain值,选择最大的 gain值对应的(feature,
    •                    value)进行分割

 

 

  •       近似算法:对于每个特征,只考虑分位点,减少计算复杂度

                               近似算法案例:三分位数

             >>>>>>   

二、XGboost 总结

  •    XGboost 算法 比较 GBDT 算法 有哪些优势 
优势有以下几点:最重要的是 增加了正则化项(不容易过拟合,鲁棒性强)、加快了模型的运行速度(伪并行和引入列抽样)

1、引入了损失函数的二阶导信息
    传统的GBDT模型只用到了损失函数的一阶导信息(一阶泰勒公式展开),而XGboost模型用到了损失函数二阶导信息,模型效
    果更好
2、支持自定义损失函数
    但是需要自定义损失函数的二阶导数存在,大大增加模型处理问题的灵活性
3、加入了正则化项,模型不容易过拟合
    ① 通过控制子树树节点的个数来控制子树的深度,防止过拟合
    ② 控制子树节点的预测值不宜过大(即子树节点的均值),预测值过大会造成预测累加过程有较大偏差。
4、引入列采样
    Xgboost 借鉴了RF 对特征属性进行采样,优点有以下两点:① 抗干扰性变强,异常值不敏感 ② 减少计算量
5、剪枝处理
6、增加缺省值的处理
    根据Gain增益来确定划分左子树还是右子树
7、支持并行     ------ XGboost并行体现在特征划分上,而不是子树模型训练
    Xgboost模型的并行运算与Bagging思想的RF不同,RF每个子模型的训练集的数据是有放回的重采样获得的,各个子模型之间相
    互独立,因此可以并行运算。
    XGboost 并行指的是可以在对子树进行多线程并行计算Gain增益从而加快最优划分子树分裂点。这是因为XGboost会对所有的特
    征属性进行排序并保存为block结构,block结构可以并行多线程计算。
8、模型训练的速度更快
    ① XGboost引入并行预算
    ② XGboost引入列抽样
  •    XGboost算法原理部分执行了那些事 ?
1.在GBDT损失函数的基础上加入了正则项。 
2.对目标函数进行二阶泰勒展开。 
3.利用推导得到的表达式作为分裂准确,来构建每一颗树。

三、XGboost 调参

           https://xgboost.readthedocs.io/en/latest/python/python_api.html#module-xgboost.sklearn    ----- 官方API

(1)API 

# 划分数据集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.01, random_state=1729)
print(X_train.shape, X_test.shape)

#模型参数设置
xlf = xgb.XGBRegressor(max_depth=10, 
                        learning_rate=0.1, 
                        n_estimators=10, 
                        silent=True, 
                        objective='reg:linear', 
                        nthread=-1, 
                        gamma=0,
                        min_child_weight=1, 
                        max_delta_step=0, 
                        subsample=0.85, 
                        colsample_bytree=0.7, 
                        colsample_bylevel=1, 
                        reg_alpha=0, 
                        reg_lambda=1, 
                        scale_pos_weight=1, 
                        seed=1440, 
                        missing=None)

xlf.fit(X_train, y_train, eval_metric='rmse', verbose = True, eval_set = 
           [(X_test, y_test)],early_stopping_rounds=100)

# 计算 auc 分数、预测
preds = xlf.predict(X_test)

(2)调参 

 

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值