You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.27 22:09:17