赞
踩
XGBoost(Extreme Gradient Boosting)是一种高效的机器学习算法,它是梯度提升树(Gradient Boosting Trees)的一种变体。XGBoost 通过结合提升树算法、梯度提升优化技术、正则化和并行化处理等多种技术,构建了一种高效、鲁棒且灵活的机器学习模型。
XGBoost 在模型训练过程中进行正则化,以防止过拟合。它提供了多种正则化项,如 L1 正则化和 L2 正则化,可以帮助控制模型的复杂度。它也可以处理各种类型的数据,包括数值型数据、类别型数据和文本数据。它支持自定义损失函数和评估指标,可以根据任务需求进行灵活调整。它可以提供特征重要性评估,帮助理解模型中各个特征对预测结果的贡献程度。这有助于特征选择和模型解释。
XGBoost 能够处理缺失值,无需对数据进行预处理。它会自动将缺失值视为一个特殊的取值,并将其作为一个额外的分支进行处理。
一些常用的 XGBoost 回归模型参数包括:
objective: 指定优化目标,常用的回归目标函数包括 "reg:squarederror"(均方误差)和 "reg:logistic"(逻辑回归)。
eta: 学习率,控制每一步的更新幅度。较小的学习率可以使得模型收敛更稳定,但可能需要更多的迭代次数。
max_depth: 每棵树的最大深度,用于控制树的复杂度。较大的值允许模型学习更复杂的特征关系,但可能导致过拟合。
min_child_weight: 叶子节点上的最小样本权重和。用于防止过拟合。较大的值可以使模型更加保守。
gamma: 损失函数的最小减少量,用于控制树的分裂。较大的值可以防止过拟合。
subsample: 训练数据的子样本比例。用于防止过拟合。
colsample_bytree: 每棵树的特征子采样率。用于防止过拟合。
lambda (reg_lambda): L2 正则化系数。
alpha (reg_alpha): L1 正则化系数。
nrounds (num_boost_round): 迭代次数或者树的数量。
early_stopping_rounds: 用于提前停止训练的迭代次数。如果在指定的迭代次数内模型性能没有提升,则停止训练。
eval_metric: 用于评估模型性能的指标,如 "rmse"(均方根误差)和 "mae"(平均绝对误差)。
seed: 随机种子,用于控制随机性。
当使用 Caret 包中的 XGBoost 模型时,可以通过 train
函数来调整和优化模型的参数和超参数。
method
: 指定训练的算法,通常为 "xgbTree"
。
trControl
: 控制训练过程的参数,如交叉验证的折数、重抽样方法等。
tuneGrid
: 参数网格,用于指定调优的参数和超参数的候选值。
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回归预测。其中最常用的包括:
xgboost:这是XGBoost算法的R语言接口包,提供了完整的XGBoost功能,并且是XGBoost的官方包。你可以使用该包中的函数来训练、调参和预测XGBoost模型。
caret:caret包是一个集成了多种机器学习算法的包,包括XGBoost。你可以使用 method = "xgbTree"
来指定XGBoost回归模型,并利用caret包提供的交叉验证等功能进行模型训练和评估。
tidymodels:tidymodels是一个用于统一建模的框架,它包括了多个建模和评估工具,其中包括了xgboost的接口。你可以使用parsnip
包来指定模型,并利用workflows
包来组合和调整模型。
mlr3:mlr3包是一个用于机器学习的通用框架,可以用于XGBoost回归模型的训练和评估。你可以使用mlr3learners包中提供的XGBoost接口来构建模型。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。