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

本文通过一个具体的回归问题实例,详细介绍了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 yi

### 构建 XGBoost 决策树模型 XGBoost 是一种高效的梯度提升决策树 (Gradient Boosting Decision Tree, GBDT) 算法,能够处理多种类型的机器学习任务,包括回归、分类和排名等问题。以下是关于如何构建 XGBoost 决策树模型的详细介绍以及代码示例。 #### 使用 R 语言构建 XGBoost 模型 在 R 中,可以通过 `xgboost` 包来安装并加载必要的库,进而完成数据准备、模型训练和评估的过程[^1]。 ```r # 安装 xgboost 包 install.packages("xgboost") # 加载所需库 library(xgboost) # 数据预处理 data(agaricus.train, package='xgboost') data(agaricus.test, package='xgboost') train_data <- agaricus.train$data train_label <- agaricus.train$label test_data <- agaricus.test$data test_label <- agaricus.test$label # 转换为 DMatrix 格式 dtrain <- xgb.DMatrix(data = train_data, label = train_label) dtest <- xgb.DMatrix(data = test_data, label = test_label) # 设置参数 params <- list( booster = "gbtree", objective = "binary:logistic", # 对于二分类问题 eta = 0.1, max_depth = 6, subsample = 0.8, colsample_bytree = 0.8 ) # 训练模型 model <- xgb.train(params = params, data = dtrain, nrounds = 10, verbose = TRUE) # 进行预测 predictions <- predict(model, dtest) # 输出前几个预测结果 head(predictions) ``` #### 使用 Python 构建 XGBoost 模型 Python 提供了更为灵活的方式来进行 XGBoost 模型的开发。通过调用 `xgboost` 库,可以轻松实现从数据读取到模型训练的一系列操作[^2]。 ```python import xgboost as xgb from sklearn.datasets import load_breast_cancer from sklearn.model_selection import train_test_split from sklearn.metrics import accuracy_score # 加载乳腺癌数据集作为例子 data = load_breast_cancer() X, y = data.data, data.target # 划分训练集和测试集 X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42) # 将数据转换为 DMatrix 格式 dtrain = xgb.DMatrix(X_train, label=y_train) dtest = xgb.DMatrix(X_test, label=y_test) # 设置参数 params = { 'booster': 'gbtree', 'objective': 'binary:logistic', # 对于二分类问题 'eta': 0.1, 'max_depth': 6, 'subsample': 0.8, 'colsample_bytree': 0.8 } # 训练模型 num_rounds = 10 bst = xgb.train(params=params, dtrain=dtrain, num_boost_round=num_rounds) # 预测 pred_probabilities = bst.predict(dtest) # 返回概率值 pred_labels = [1 if prob > 0.5 else 0 for prob in pred_probabilities] # 计算准确率 accuracy = accuracy_score(y_test, pred_labels) print(f"Accuracy: {accuracy * 100:.2f}%") ``` #### 自定义损失函数与评估指标 除了默认的目标函数外,还可以设置自定义的损失函数和评估指标。这一步骤对于特定应用场景下的优化尤为重要。 ```python def custom_logloss(preds, dtrain): labels = dtrain.get_label() # 获取真实标签 preds = 1 / (1 + np.exp(-preds)) # 将原始预测值转化为概率形式 grad = preds - labels # 损失函数的一阶导数 hess = preds * (1 - preds) # 损失函数的二阶导数 return grad, hess # 修改参数以使用自定义目标函数 params['objective'] = custom_logloss # 重新训练模型 bst_custom = xgb.train(params=params, dtrain=dtrain, num_boost_round=num_rounds) ``` #### 层次树构建展望 未来的研究方向可能涉及更加复杂的层次树结构设计,从而进一步提高模型的表现力。这种技术的发展将有助于解决当前方法中存在的不足之处[^3]。 ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值