XGBoost最通俗版的公式推导与原理解释,超详细!!

1.分类树与回归树

XGBoost是以CART回归树作为基本分类器, 那么什么是回归树呢?什么又是分类树呢?

其实分类树和回归树都属于决策树,关于决策树的知识,这篇文章就不做过多的介绍。

分类树:分类树的样本输出都是以类别的形式,比如说判断蘑菇是有毒还是没有毒,判断西瓜是甜还是不甜。

回归树:回归树的样本输出是数值的形式,比如给某人发放房屋贷款的数额。

回归树的关键是:

1).分裂点依据什么来划分

2).分类后的节点预测值是多少

2.Boost介绍

XGBoost顾名思义,里面肯定是用到Boost的知识,什么是Boost呢?

Boost可以用于回归和分类问题,它每一步会产生一个弱分类器 (如决策树),然后通过加权累加起来变成一个强分类器。比如每一步都会产生一个f(x)F(x)=\sum f_i(x),其实就是一堆分类器通过加权合并成一个强分类器。

3.XGBoost介绍

有了前面的两个基础知识,现在开始介绍XGBoost。

XGBoost的核心思想:

  1. 对所有特征按照特征的数值进行预排序
  2. 在遍历分割点的时候,用O(#data)的代价找到一个特征上的最好分割点
  3. 在找到一个特征分割点的时候,将数据分裂到左右子节点。

我们的目标,希望建立 N 个回归树,使得树群的预测值尽量接近真实值(准确率)而且有尽量大的泛化能力。也就是说,给定输入向量x和输出向量y组成的若干个训练样本(x1,y1),(x2,y2)....(xn,yn),目标找到一个近似函数 F(\vec{x}) , 使得损失函数L(y,F(\vec{x}))的损失值最小。其中F(\vec{x})就是我们的预测值。

这里的 F(\vec{x})就是我们通过很多弱分类器加权得到的。

F(\vec{x})是第一个的时候,我们定义为常函数,如下图。

我们要求第m个F(\vec{x})的时候,前m-1个分类器是已经选好的,我们只要找出第m个最优的弱分类器,加到前m-1个里,就变成了第m个F(\vec{x}),这里用到的就是贪心的思想。

所以我们的目标函数就是:

意思就是找到第t个比较好的弱分类器,使得误差变小,后面一项是正则项。有的同学可能会有疑问,平时的损失函数里,通常是把 \omega 作为参数,来找到一个合适参数使得损失最小,怎么这里是函数?别着急,往下看。

XGBoost用到了泰勒展开公式,并展开到了二阶,其中泰勒展开公式是:

我们令目标函数里的公式里的,令

再令g_i为 f(x) 的一阶导,令h_i 为二阶导,如下图所示:

所以目标函数变成:

其中C为常数。

说到这,我们先停一下,因为说了半天和回归树没有关系,现在就让它们发生“关系”,咳咳~

开头说了,回归树的输出是数值,在XGBoost里,回归树实际上就是f(x),它的输出值实际上是权值,也就是说,它的叶子节点的值是权值w1,w2,...,那么也就是说f_i(x)可以等价为w_i,这样一来,就变成一般求损失函数的套路,对 w 进行求导,然后依次迭代。

但是现在还没有结束,公式有些太复杂了,需要进行简化。

这个是正则项,它实际的公式其实是长这样的

目标函数就变成了:

这里的 gi  实际上是梯度,,而变为了常数加到C里,因为前 t-1 个弱分类器已经确定,那么预测值就已经确定了,所以是常数。

假如一个二叉树的分成了4个叶子节点,一共有100个样本,其中20个样本落在第一个叶子节点,30个样本落在第2个叶子节点,10个样本落在第三个,其余落在第四个叶子节点。那么第一个叶子节点的梯度值应该是20个样本梯度值相加,然后乘第一个叶子节点的权重 w1, 同理其他的叶子节点,然后把四个叶子节点的梯度与权值的乘积相加起来。公式就变成了下面这样。

 

对于这个式子,定义:

带进去,公式就变成了这样。

这个时候公式就快大功告成啦!!!

然后对权重w求偏导:

然后将w的式子回代到目标函数中,最终目标函数变成了这个样子

OK!大功告成!

4. GBDT VS XGBoost

1)传统 GBDT 以 CART 作为基分类器,xgboost 还支持线性分类器,这个时候 xgboost 相当于带 L1 和 L2 正则化项的逻辑斯特回归(分类问题)或者线性回归(回归问题);

2)传统 GBDT 在优化时只用到一阶导数信息,xgboost 则对代价函数进行了二阶泰勒展开,同时用到了一阶和二阶导数。

5. Boost Vs Xgboost

 

6. 总结

由于“随机森林族”本身具备过拟合的优势, 因此XGBoost仍然在一定程度上具有过拟合的特性。

  • 1
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
XGBoost是一个梯度提升树算法的开源库,提供了一种高效的机器学习算法。Sklearn-xgboost是一个基于Scikit-learn库的XGBoost接口,它允许用户使用Sklearn中提供的模型选择、交叉验证和特征选择等功能,并且使用XGBoost算法进行训练和预测。 Sklearn-xgboost的使用相对简单,可以按照以下步骤进行: 1. 首先,安装sklearn-xgboost库: ```python pip install sklearn-xgboost ``` 2. 导入所需的库和模块: ```python from sklearn import datasets from sklearn.model_selection import train_test_split from xgboost import XGBClassifier ``` 3. 加载数据集并进行数据预处理: ```python iris = datasets.load_iris() X = iris.data y = iris.target X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=0) ``` 4. 创建XGBoost分类器对象并设置参数: ```python model = XGBClassifier(max_depth=3, learning_rate=0.1, n_estimators=100, random_state=0) ``` 5. 使用训练集对模型进行训练: ```python model.fit(X_train, y_train) ``` 6. 使用测试集对模型进行预测: ```python y_pred = model.predict(X_test) ``` 通过以上步骤,您可以使用Sklearn-xgboost库来训练和预测数据集。请注意,可以根据具体问题和数据集调整XGBoost分类器的参数以获得更好的性能。您可以参考Sklearn-xgboost的官方文档来了解更多关于参数设置和使用方法的详细信息。 : sklearn-xgboost的使用以及创建 : xgboost官方文档

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值