xgboost回归预测

 XGBoost(Extreme Gradient Boosting)是一种高效的机器学习算法,它是梯度提升树(Gradient Boosting Trees)的一种变体。XGBoost 通过结合提升树算法、梯度提升优化技术、正则化和并行化处理等多种技术,构建了一种高效、鲁棒且灵活的机器学习模型。

 XGBoost 在模型训练过程中进行正则化,以防止过拟合。它提供了多种正则化项,如 L1 正则化和 L2 正则化,可以帮助控制模型的复杂度。它也可以处理各种类型的数据,包括数值型数据、类别型数据和文本数据。它支持自定义损失函数和评估指标,可以根据任务需求进行灵活调整。它可以提供特征重要性评估,帮助理解模型中各个特征对预测结果的贡献程度。这有助于特征选择和模型解释。

XGBoost 能够处理缺失值,无需对数据进行预处理。它会自动将缺失值视为一个特殊的取值,并将其作为一个额外的分支进行处理。

一些常用的 XGBoost 回归模型参数包括:

  1. objective: 指定优化目标,常用的回归目标函数包括 "reg:squarederror"(均方误差)和 "reg:logistic"(逻辑回归)。

  2. eta: 学习率,控制每一步的更新幅度。较小的学习率可以使得模型收敛更稳定,但可能需要更多的迭代次数。

  3. max_depth: 每棵树的最大深度,用于控制树的复杂度。较大的值允许模型学习更复杂的特征关系,但可能导致过拟合。

  4. min_child_weight: 叶子节点上的最小样本权重和。用于防止过拟合。较大的值可以使模型更加保守。

  5. gamma: 损失函数的最小减少量,用于控制树的分裂。较大的值可以防止过拟合。

  6. subsample: 训练数据的子样本比例。用于防止过拟合。

  7. colsample_bytree: 每棵树的特征子采样率。用于防止过拟合。

  8. lambda (reg_lambda): L2 正则化系数。

  9. alpha (reg_alpha): L1 正则化系数。

  10. nrounds (num_boost_round): 迭代次数或者树的数量。

  11. early_stopping_rounds: 用于提前停止训练的迭代次数。如果在指定的迭代次数内模型性能没有提升,则停止训练。

  12. eval_metric: 用于评估模型性能的指标,如 "rmse"(均方根误差)和 "mae"(平均绝对误差)。

  13. seed: 随机种子,用于控制随机性。

当使用 Caret 包中的 XGBoost 模型时,可以通过 train 函数来调整和优化模型的参数和超参数。

  1. 参数
  • method: 指定训练的算法,通常为 "xgbTree"

  • trControl: 控制训练过程的参数,如交叉验证的折数、重抽样方法等。

  • tuneGrid: 参数网格,用于指定调优的参数和超参数的候选值。

  1. 超参数
  • nrounds: 迭代次数或者树的数量。

  • max_depth: 每棵树的最大深度。

  • eta: 学习率,控制每一步的更新幅度。

  • gamma: 损失函数的最小减少量,用于控制树的分裂。

  • colsample_bytree: 每棵树的特征子采样率。

  • min_child_weight: 叶子节点上的最小样本权重和。

  • subsample: 训练数据的子样本比例。

  • lambda: L2 正则化系数。

  • alpha: L1 正则化系数。

  • eval_metric: 用于评估模型性能的指标,如 "rmse"(均方根误差)和 "mae"(平均绝对误差)。

  • early_stopping_rounds: 用于提前停止训练的迭代次数。

  • booster: 指定使用的提升器类型,通常为 "gbtree"。

这些参数和超参数可以通过 train 函数的 tuneGrid 参数来指定,并通过交叉验证来选择最佳的参数组合。通过调整这些参数和超参数,可以优化模型的性能和泛化能力。

###2024.04.01 
# 导入数据集
setwd("C:/Users")
# 安装和加载所需的包
library(xgboost)
library(caret)
library(MLmetrics)
library(ggplot2)
# 加载数据
data <- read.csv("125.csv", header = TRUE)
#数据集划分
intrain<- createDataPartition(y = data$OC, 
                              p = 0.7, 
                              list = FALSE)
train_data <- data[intrain,]
test_data <- data[-intrain,]

# # Hyperparameter tuning and model training参数优化和模型训练
set.seed(1345)
# 创建训练控制对象
trctrl <- trainControl(method = "cv", number = 10)
# 创建训练矩阵
#dtrain <- xgb.DMatrix(as.matrix(train_data[,-1]), label = train_data$OC)
#dtest <- xgb.DMatrix(as.matrix(test_data[,-1]), label = test_data$OC)
param_grid <- expand.grid(
  nrounds = c(10, 50, 100),
  max_depth = c(3, 6, 9),
  eta = c(0.01, 0.1, 0.3),
  gamma = c(0, 0.1, 0.2),
  colsample_bytree = c(0.5, 0.75, 1),
  min_child_weight = c(1, 5, 10),
  subsample = c(0.5, 0.75, 1)
)

start_time <- Sys.time()
#建立模型
xgb_model <- train(
  OC ~ .,
  data = train_data,
  method = "xgbTree",
  trControl = trctrl,
  tuneGrid = param_grid
)

xgb_model
total_time <- Sys.time() - start_time
total_time
summary(xgb_model)
summary(xgb_model$finalModel)
# Train set predictions
train_pred <- predict(xgb_model, newdata = train_data[,-1])
mse_train = MSE(train_data$SOC, train_pred)
mae_train = MAE(train_data$SOC, train_pred)
rmse_train = RMSE(train_data$SOC, train_pred)
r2_train = caret::R2(train_data$SOC, train_pred)

cat("MAE:", mae_train, "\n", "MSE:", mse_train, "\n",
    "RMSE:", rmse_train, "\n", "R-squared:", r2_train)

# Test set predictions

test_pred <- predict(xgb_model, newdata = test_data[,-1])

mse_test = MSE(test_data$SOC, test_pred)
mae_test = MAE(test_data$SOC, test_pred)
rmse_test = RMSE(test_data$SOC, test_pred)
r2_test = caret::R2(test_data$SOC, test_pred)

cat("MAE:", mae_test, "\n", "MSE:", mse_test, "\n",
    "RMSE:", rmse_test, "\n", "R-squared:", r2_test)

# Predictions' plot预测结果画散点图

train_pred_matrix <- data.frame(Real = c(train_data$SOC),
                                Predicted = c(train_pred))

test_pred_matrix <- data.frame(Real = c(test_data$SOC),
                               Predicted = c(test_pred))
# 训练集散点图
plot(x=train_pred_matrix$Real,y=train_pred_matrix$Predicted,xlab = "Real-value",
     ylab="Predicted",xlim=c(0,12),ylim=c(0,12),col = "red")
#测试集散点图
plot(x=test_pred_matrix $Real,y=test_pred_matrix $Predicted)
# 提取特征重要性图
plot(varImp(object = xgb_model),
     top = 20,
     ylab = "Feature")


plot(xgb_model)


# 加载 shapper 包
library(shapper)
# 计算 SHAP 值
shap_values <- shap(xgb_model$finalModel, X = as.matrix(train_data[,-1]))

# 绘制 SHAP 图
plot(shap_values)

# 绘制树的可视化图
xgb.plot.tree(model = xgb_model$finalModel)

# 提取模型的学习曲线数据
learning_curve_data <- as.data.frame(xgb_model$finalModel$evaluation_log)

# 绘制学习曲线图
ggplot(data = learning_curve_data, aes(x = iter, y = train_rmse)) +
  geom_line(color = "blue") +
  geom_line(aes(y = test_rmse), color = "red") +
  labs(x = "Iteration", y = "RMSE", title = "Learning Curve") +
  theme_minimal()

在R中,有几个包可以用于XGBoost回归预测。其中最常用的包括:

  1. xgboost:这是XGBoost算法的R语言接口包,提供了完整的XGBoost功能,并且是XGBoost的官方包。你可以使用该包中的函数来训练、调参和预测XGBoost模型。

  2. caret:caret包是一个集成了多种机器学习算法的包,包括XGBoost。你可以使用 method = "xgbTree" 来指定XGBoost回归模型,并利用caret包提供的交叉验证等功能进行模型训练和评估。

  3. tidymodels:tidymodels是一个用于统一建模的框架,它包括了多个建模和评估工具,其中包括了xgboost的接口。你可以使用parsnip包来指定模型,并利用workflows包来组合和调整模型。

  4. mlr3:mlr3包是一个用于机器学习的通用框架,可以用于XGBoost回归模型的训练和评估。你可以使用mlr3learners包中提供的XGBoost接口来构建模型。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

lltanwh

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值