XGBoost

目录

1.XGBoost推导示意图

2.分裂节点算法

Weighted Quantile Sketch

 3.对缺失值得处理


1.XGBoost推导示意图

XGBoost有两个很不错得典型算法,分别是用来进行分裂节点选择和缺失值处理。

Xgboost的原理解释,下面的这个讲的很清楚。 

XGBoost超详细推导,终于有人讲明白了!

另外可以看下这个博客 

XGB算法梳理_futurewq的博客-CSDN博客

树模型(六):XGBoost_xgboost模型例题_雪伦_的博客-CSDN博客 

2.分裂节点算法

Weighted Quantile Sketch

对于特征切点点得选择,xgboost不单单是采用简单得分位数得方法,而是对分位数进行加权(使用二阶梯度h),称为:weighted quantile sketch.

对特征k构造multi-set得数据集:D_k=(x_{1k},h_1),(x_{2k},h_2),...,(x_{nk},h_n),其中x_{ik}表示样本i得特征k得取值,而h_i则为对应得二阶梯度。

 式子中分子是x小于z得所有样本对应得h之和(即小于z得样本加权和,权重为h),分母为所有样本得加权和。该式子表达了第k个特征小于z得样本比例,和分位数相似,不过这里是按照二阶梯度进行累计。

而候选切分点S_k={s_{k1},s_{k2},...,s_{kl}}要求:

 即让相邻两个候选分裂点带入r_k(z)中,相差不超过某个值\varepsilon,由于,最终会切分处1/\varepsilon,如下面例子:

选取 \varepsilon=1/3,会得到三个桶,h总和1.8,因此s_{k1}=0.6,s_{k2}=1.2.

到这里,xgboost得分裂点选择就讲完了,然后再基于分裂前后得损失大小去判断选择最终得分裂点即可。但是还有个问题需要解答,为什么选择h而不是g或者其他?证明如下:

这里有两个问题

一个是为什么需要加权? 

现在我们回到xgboost中,在建立第i棵树的时候已经知道数据集在前面i-1棵树的误差,因此采样的时候是需要考虑误差,对于误差大的特征值采样粒度要加大,误差小的特征值采样粒度可以减小,也就是说采样的样本是需要权重的。

为什么用hi加权?

就是上面的那个推导。对于这个直观感受(方便我们理解),如果损失函数是sqaure loss,即Loss(y,y')=(y-y')^2,则h=2,那么实际上是不带权(每个样本的权重一样)。如果损失函数是Log loss,则h=pred*(1-pred)。这个是个开口朝下的一元二次函数,所以最大值在pred=0.5。当pred在0.5附近,值都比较大,也就是权重都比较大,在切直方图时,我们希望桶比较均匀,因此这部分就会被切分的更细。

 3.对缺失值得处理

xgboost模型得一个优点就是允许特征存在缺失值。对缺失值得处理方式如下:

  • 在特征k上寻找最佳split point时,不会对该列特征missing得样本进行遍历,而只对该列特征值为non-missing得样本上对应得特征值进行遍历,通过这个技巧来减少了为稀疏离散特征寻找split point得时间开销
  • 在逻辑实现上,为了保证完备性,会将该特征值missing得样本分别分配到左叶子节点和有叶子节点,两种情况都计算一遍后,选择分裂后增益最大得那个方向(左分支或右分支),作为预测时特征值确实样本得默认分支方向。
  • 如果在训练中没有缺失值而在预测中出现缺失,那么会自动将缺失值得划分方向放到右子节点。

xgboost常见面试题:

珍藏版 | 20道XGBoost面试题_无名氏a的博客-CSDN博客_xgboost面试题

【xgboost】常见面试题_数分面试加油的博客-CSDN博客_xgboost 算法面试题目

XGBoost是一种高效的机器学习算法,它基于梯度提升树(Gradient Boosting Tree)的思想,具有很强的预测性能。而Jupyter是一个交互式的开发环境,可以在浏览器中创建和共享文档,其中包含实时代码、方程、可视化和说明文本。下面是关于XGBoost在Jupyter中使用的介绍: 1. 安装XGBoost:首先,你需要在你的Jupyter环境中安装XGBoost库。可以使用pip命令在终端或命令提示符中运行以下命令:`pip install xgboost` 2. 导入XGBoost库:在Jupyter中,你需要导入XGBoost库才能使用其中的函数和类。可以使用以下代码导入XGBoost库:`import xgboost as xgb` 3. 加载数据集:在使用XGBoost进行建模之前,你需要加载你的数据集。可以使用Pandas库来读取和处理数据。例如,你可以使用以下代码加载一个CSV文件:`import pandas as pd`,`data = pd.read_csv('your_dataset.csv')` 4. 准备数据:在使用XGBoost之前,你需要对数据进行一些预处理。这可能包括处理缺失值、进行特征工程等。你可以使用Pandas和其他数据处理库来完成这些任务。 5. 划分训练集和测试集:为了评估模型的性能,你需要将数据集划分为训练集和测试集。可以使用Scikit-learn库中的train_test_split函数来完成这个任务。例如,你可以使用以下代码将数据集划分为训练集和测试集:`from sklearn.model_selection import train_test_split`,`X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2)` 6. 创建XGBoost模型:在Jupyter中,你可以使用XGBoost库提供的API来创建和训练XGBoost模型。可以使用以下代码创建一个XGBoost分类器:`model = xgb.XGBClassifier()` 7. 训练模型:使用训练集数据对模型进行训练。可以使用以下代码来训练模型:`model.fit(X_train, y_train)` 8. 模型评估:使用测试集数据对模型进行评估。可以使用以下代码来评估模型的性能:`y_pred = model.predict(X_test)`,`accuracy = accuracy_score(y_test, y_pred)` 9. 调参优化:XGBoost有很多可调参数,你可以通过调整这些参数来优化模型的性能。可以使用交叉验证等技术来选择最佳的参数组合。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值