简单例子说明XGBoost中树模型的构建过程


这里不再介绍XGBoost的原理及推导过程,推荐一些资料:

在构建树结构的过程会将涉及到的公式给出。
本文中的过程来源于视频XGBoost Part 1 (of 4): Regression – YouTube

如有错误,请指正,谢谢啦~

1. 数据集-回归问题

我们需要解决的是一个回归问题,数据如下表所示,NO是样本的编号,Drug Dosage 是特征,Drug Effective 是真实值。我们将根据这个数据集构建一个XGBoost模型。
在这里插入图片描述

2. 求一阶导数和二阶导数

这里采用的平方损失函数
在这里插入图片描述
注:后续需要用到 G a i n Gain Gain的计算公式,并定义 s i m i l a r i t y    s c o r e ( s s ) similarity \; score (ss) similarityscore(ss),同时将上面计算好的 g i g_i gi h i h_i hi带入 s s ss ss中,如下:
在这里插入图片描述

3. 构建树

  • 初始化

y i 0 = 0.5 y_i^0 = 0.5 yi0=0.5,并将样本点(实心圆)及预测值(黑色的粗线)画到二维坐标中。
在这里插入图片描述

  • 残差
    根据 s s ss ss的计算公式,其涉及到 R e s i d u a l Residual Residual,所以我们将每个样本点的残差计算出来
    在这里插入图片描述
  • 寻找最优切分点
    这里我们采用精确贪心算法进行切分
  • 首先将特征值进行排序,这里只有一个特征,我们给出的顺序刚好是排序好的,即 10, 20, 25, 35
  • 切分点选取的是相邻两个特征值的均值,所以此时我们有3个切分点,即15, 22.5, 30
  • 接下来我们将会计算三个不同的切分得到的 G a i n Gain Gain值,选择最大的 G a i n Gain Gain(增益)对应的切分点

接下来将计算3个切分点对应的增益,这里取 λ = 0 \lambda=0 λ=0.

  1. D o s a g e < 15 Dosage < 15 Dosage<15
    图中红色的虚线是切分点
    在这里插入图片描述
    这里再提一下,根据 G a i n Gain Gain的计算公式,我们只需要计算出每个结点的 s s ss ss,然后再进行相应的运算就可以得到 G a i n Gain Gain了。
    在这里插入图片描述
    我们先计算根结点的 s s ss ss

在这里插入图片描述
接下来计算叶子结点,
在这里插入图片描述
然后计算以 D o s a g e < 15 Dosage<15 Dosage<15作为切分点时的 G a i n Gain Gain
在这里插入图片描述
2. D o s a g e < 22.5 Dosage<22.5 Dosage<22.5
同样的计算方法
在这里插入图片描述
3. D o s a g e < 30 Dosage < 30 Dosage<30
在这里插入图片描述
三个切分点的 G a i n Gain Gain已经计算完成,大小关系如下:
G a i n 15 = 120.33 > G a i n 30 = 56.33 > G a i n 22.5 = 4 Gain_{15}=120.33 >Gain_{30}=56.33>Gain_{22.5}=4 Gain15=120.33>Gain30=56.33>Gain22.5=4

D o s a g e < 15 Dosage<15 Dosage<15作为切分点时的 G a i n Gain Gain最大,选择此切分点
在这里插入图片描述
此时左边结点不需要再切分,我们继续分析右边结点,这时我们可以有两个可选的切分点,同样计算不同切分点时的 G a i n Gain Gain,步骤同上

  1. D o s a g e < 22.5 Dosage < 22.5 Dosage<22.5
    在这里插入图片描述
  2. D o s a g e < 30 Dosage<30 Dosage<30
    在这里插入图片描述
    D o s a g e < 30 Dosage<30 Dosage<30时的增益最大,得到树结构如下
    在这里插入图片描述
    在工程实现中,我们可以控制树的深度,在这里将树的深度限制为2(根结点第0),所以第一棵树已经构建完成。

4. 剪枝

自底向上判断是否需要剪枝
在这里插入图片描述

  1. γ = 130 \gamma=130 γ=130
    在这里插入图片描述
    虽然这里根结点的 G a i n < γ Gain <\gamma Gain<γ,但我们没有对第一个分支进行剪枝,所以我们不会删掉这个根结点。
    在这里插入图片描述
  2. γ = 150 \gamma=150 γ=150
    此时自底向上剪枝的时候,就会剪掉整棵树,最后我们只剩下初始的预测值

在这里插入图片描述

5. 计算输出值

这里我们取 γ = 130 \gamma=130 γ=130,所以不会进行剪枝,树结构及其输出值如下:
在这里插入图片描述

6. 新的预测值

在这里插入图片描述
根据左下角的图片,我们可以看到,预测值更接近真实值了
在这里插入图片描述

7. 继续构建下一棵树

在这里插入图片描述
在这里插入图片描述
这样计算一遍,对XGBoost构建树的过程更清楚了。

最后,我参考前述提到的资料,将XGBoost的原理推导及文中的举例部分,做成了PPT,欢迎下载,提意见 XGBoos.pptx

Xgboost是一种非常流行的机器学习算法之一,可以应用于各种分类和回归问题。使用R语言实现xgboost二分类模型构建需要以下步骤: 1. 安装和加载xgboost包 在R终端中输入以下代码来安装和加载xgboost包: ```r install.packages("xgboost") library(xgboost) ``` 2. 准备数据 xgboost的输入数据格式是Matrix或者DataFrame,所以需要将数据集转换成这两种格式之一。数据集应该分为训练集和测试集。训练集用于训练模型,测试集用于评估模型性能。 ```r # 读取数据集 data <- read.csv("data.csv") # 将数据集转换成Matrix格式 data_matrix <- as.matrix(data) # 将数据集分为训练集和测试集 train_index <- sample(1:nrow(data_matrix), size=nrow(data_matrix)*0.7) train_data <- data_matrix[train_index, ] test_data <- data_matrix[-train_index, ] ``` 3. 设置参数 xgboost有许多可调整的参数,包括模型的学习率、树的深度、正则化参数等。下面是一些常用的参数设置: ```r params <- list( objective = "binary:logistic", booster = "gbtree", nthread = 4, eta = 0.1, max_depth = 6, min_child_weight = 1, subsample = 1, colsample_bytree = 1, scale_pos_weight = 1, gamma = 0, lambda = 1, alpha = 0 ) ``` 这些参数可以根据具体问题进行调整。 4. 训练模型 使用train函数训练xgboost模型。训练函数需要一些参数,包括训练集、测试集、参数设置等。下面是一个例子: ```r xgb_model <- xgboost( params = params, data = train_data[, 2:ncol(train_data)], label = train_data[, 1], nrounds = 1000, early_stopping_rounds = 50, maximize = FALSE, verbose = 0, eval_metric = "error", test = list(data=test_data[, 2:ncol(test_data)], label=test_data[, 1]) ) ``` 上面代码中,params是设置的参数,data是训练集的特征部分,label是训练集的标签部分,nrounds是训练的轮数,early_stopping_rounds是早停策略的轮数,maximize表示是否最大化指标,verbose表示是否打印训练信息,eval_metric是评价指标,test是测试集。 5. 评估模型 使用xgb.importance函数和xgb.plot.importance函数评估特征的重要性,使用xgb.plot.tree函数可视化生成的树。 ```r # 评估特征的重要性 importance_matrix <- xgb.importance(colnames(train_data[, -1]), model = xgb_model) xgb.plot.importance(importance_matrix) # 可视化生成的树 xgb.plot.tree(model = xgb_model) ``` 6. 进行预测 使用predict函数进行预测: ```r # 预测概率 pred_prob <- predict( xgb_model, newdata = test_data[, -1] ) # 预测标签 pred_label <- ifelse(pred_prob > 0.5, 1, 0) ``` 7. 性能评估 对预测结果进行性能评估。使用混淆矩阵、准确率、召回率、F1值等指标。 ```r # 计算混淆矩阵 confusion_matrix <- table(test_data[, 1], pred_label) print(confusion_matrix) # 计算准确率 accuracy <- sum(diag(confusion_matrix)) / sum(confusion_matrix) print(accuracy) # 计算召回率 recall <- sum(diag(confusion_matrix)) / sum(confusion_matrix[, 2]) print(recall) # 计算F1值 f1_score <- 2 * (accuracy * recall) / (accuracy + recall) print(f1_score) ``` 以上就是使用R语言实现xgboost二分类模型构建的相关步骤
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值