R语言中如何使用multivator包构建多输出回归模型?
R语言multivator包多输出回归模型构建实操
multivator是基于多元高斯过程实现多输出回归的R包,会自动建模多个输出变量之间的关联结构,相比逐输出单独建模的方案在输出存在相关性时精度更高,以下是可直接运行的完整实操流程:
1. 环境准备
首次使用先安装包,之后每次运行加载依赖即可:
# 首次运行执行安装 install.packages("multivator") # 加载包 library(multivator)
2. 建模核心流程
建模分为4个核心步骤:
- 整理输入输出数据:输入为数值型特征矩阵,输出为列对应不同输出变量的数值矩阵
- 初始化多元协方差超参数:定义输入核函数、输出间协方差、噪声水平的初始值
- 拟合模型并优化超参数:通过最大似然调整超参数得到最优模型
- 预测与效果评估
3. 完整可运行示例
# 固定随机种子保证结果可复现 set.seed(123) # ---------------------- # step1: 构造测试数据 # ---------------------- # 训练集:3个输入特征,80个样本 n_train <- 80 x_train <- cbind( x1 = runif(n_train, 0, 10), x2 = runif(n_train, 0, 10), x3 = runif(n_train, 0, 5) ) # 构造2个存在相关性的输出变量 y1 <- x_train[,1] + 2*x_train[,2] + rnorm(n_train, 0, 0.5) y2 <- 0.8*x_train[,1] - 1.2*x_train[,2] + 0.3*y1 + rnorm(n_train, 0, 0.3) y_train <- cbind(y1, y2) # 测试集:20个样本 n_test <- 20 x_test <- cbind( x1 = runif(n_test, 0, 10), x2 = runif(n_test, 0, 10), x3 = runif(n_test, 0, 5) ) y1_test <- x_test[,1] + 2*x_test[,2] + rnorm(n_test, 0, 0.5) y2_test <- 0.8*x_test[,1] - 1.2*x_test[,2] + 0.3*y1_test + rnorm(n_test, 0, 0.3) y_test <- cbind(y1_test, y2_test) # ---------------------- # step2: 初始化超参数 # ---------------------- init_hp <- mhp( ranges = apply(x_train, 2, function(x) diff(range(x))), # 各输入特征的取值跨度 B = matrix(c(1, 0.2, 0.2, 1), nrow = 2), # 输出间初始协方差矩阵 sigma = c(0.5, 0.3) # 各输出的初始噪声标准差 ) # ---------------------- # step3: 拟合并优化模型 # ---------------------- multi_reg_model <- multivator( x = x_train, y = y_train, hp = init_hp, include_pi = FALSE ) # 超参数优化,verbosity=0关闭迭代打印 multi_reg_model <- optimize(multi_reg_model, verbosity = 0) # ---------------------- # step4: 预测与评估 # ---------------------- pred_res <- predict(multi_reg_model, newdata = x_test) # 预测均值存放在mstar字段中,列顺序和训练时y的列顺序一致 pred_val <- pred_res$mstar # 计算测试集R²评估效果 r2_1 <- 1 - sum((pred_val[,1] - y_test[,1])^2) / sum((y_test[,1] - mean(y_test[,1]))^2) r2_2 <- 1 - sum((pred_val[,2] - y_test[,2])^2) / sum((y_test[,2] - mean(y_test[,2]))^2) cat("输出1测试集R²:", round(r2_1,3), "\n输出2测试集R²:", round(r2_2,3))
正常运行下两个输出的R²都会在0.97以上,拟合效果良好。
4. 常见踩坑说明
- 传入模型的x、y必须是矩阵格式,直接传入data.frame会触发维度不匹配报错
- 初始超参数设置不合理可能导致优化陷入局部最优,若拟合效果差可多换几组初始B、sigma值重新优化
- 该包基于高斯过程实现,样本量超过1000时拟合速度会显著下降,更适合中小样本的多输出建模场景
- 若多个输出变量完全独立,该包建模效果和逐输出建单输出模型无明显差异,仅在输出存在关联时能体现精度优势
内容的提问来源于stack exchange,提问作者TUSTLGC
相关产品推荐
相关产品推荐

