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

使用caret与neuralnet实现多输出神经网络的自动化变量设置问题

解决Caret+nnet多输出神经网络自动设置输出变量的问题

第一步:合并输入输出数据集

你之前应该是把输入和输出分成了两个独立的数据集,这是问题根源之一。Caret的train()函数要求特征和目标变量都在同一个数据框里,先把它们合并:

# 假设你的输入数据集是input_df,输出数据集是output_df
combined_df <- cbind(input_df, output_df)

第二步:自动生成多输出公式

不用手动逐个写12个输出变量,用代码自动生成公式:

# 获取所有输出变量的列名
output_names <- colnames(output_df)
# 生成公式:左边是所有输出变量用+连接,右边是所有输入变量(用.表示)
multi_formula <- as.formula(paste(paste(output_names, collapse = " + "), "~ ."))

这样生成的公式会自动包含所有12个输出变量,无需手动逐个添加。

第三步:用Caret调用nnet训练模型

现在用生成的公式和合并后的数据集训练,注意指定nnet的隐藏层神经元数量,同时按需设置训练控制参数:

library(caret)
library(nnet)

# 设置交叉验证的训练控制(可根据需求调整)
train_ctrl <- trainControl(method = "cv", number = 5)

# 训练多输出神经网络
nnet_model <- train(
  formula = multi_formula,
  data = combined_df,
  method = "nnet",
  trControl = train_ctrl,
  size = 10,  # 按任务需求调整隐藏层神经元数量
  maxit = 1000,  # 设置最大迭代次数
  trace = FALSE  # 关闭训练过程的冗余输出,可选
)

之前报错的原因

  • invalid type (list) for variable 'output':你直接写output~.时,output是整个输出数据框/列表,Caret的公式不接受这种格式,必须将每个输出变量用+分开列示。
  • undefined columns selected:手动列输出变量时,要么是列名拼写错误,要么是没把输出变量合并到输入数据框中,导致Caret找不到对应列。

额外提示

如果是分类任务,记得在train()中指定metric = "Accuracy"和classProbs = TRUE;如果是回归任务,默认会使用RMSE等回归指标,按需调整即可。

内容的提问来源于stack exchange,提问作者Mohammad

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 17:50:22