Cubist 模型的基础是回归树。回归树是一种树状结构,用于将输入空间划分为不同的区域,并在每个区域中拟合一个简单的线性模型。这使得模型能够捕获数据中复杂的非线性关系。
Cubist 模型相对于其他复杂的机器学习模型(如神经网络或支持向量机)具有较高的解释性。由于其基于树模型和分段线性模型,可以很容易地理解模型对于输入变量的影响以及不同区域的预测规则。
Cubist 模型的主要参数包括:
-
Committees(委员会):用于指定要创建的回归树的数量。每个委员会会产生一个回归树,最后的预测结果是所有树的平均值。默认值为 1。
-
Neighbors(邻居):用于指定在生成分段线性模型时要考虑的最近邻数目。这个参数控制了分段线性模型的复杂度。默认值为 0,表示不使用邻居。
-
Rules(规则):用于控制生成的分段线性模型的数量。每个回归树叶节点上生成一个分段线性模型。规则的数量影响了模型的复杂度和解释性。默认值为 100。
-
Maxdepth(最大深度):用于限制回归树的最大深度。这有助于控制模型的复杂度和过拟合的风险。默认值为 1。
-
MinCases(最小样本数):用于指定在拟合分段线性模型时所需的最小样本数。如果叶节点上的样本数小于这个值,则不会拟合分段线性模型。默认值为 10。
###2024.04.01
# 导入数据集
setwd("C:/Users")
# 安装和加载所需的包
# install.packages(c("Cubist", "caret"))
library(Cubist)
library(caret)
# 加载数据
data <- read.csv("123.csv", header = TRUE)
#数据集划分
intrain<- createDataPartition(y = data$SC,
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)
#建立模型
cubist_model <- train(SC~.,
data = train_data,
method = "cubist",
trControl= trctrl,
metric = "RMSE")
cubist_model
total_time <- Sys.time() - start_time
total_time
summary(cubist_model)
# Train set predictions
train_pred <- predict(cubist_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(cubist_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 = cubist_model),
top = 20,
ylab = "Feature")
# 绘制模型摘要图
plot(cubist_model)