使用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
相关产品推荐
相关产品推荐

