plot.nn报错:weights were not calculated,神经网络绘图故障求助
解决
plot.nn(nueralModel) : weights were not calculated报错问题 看起来你在训练用于贷款违约预测的神经网络时,碰到了这个头疼的报错——虽然调用neuralnet()时没弹出训练错误,但实际上模型并没有成功完成训练,导致权重没被正确计算存储。结合你的代码和二分类任务场景,我整理了几个关键修复点:
1. 修正linear.output参数(核心问题)
你的target是二分类变量(0/1代表违约与否),但训练时设置了linear.output = T——这个参数是给回归任务用的(输出连续值),分类任务必须设为linear.output = FALSE,这样模型才会用sigmoid激活函数处理输出层,按分类逻辑训练并生成有效权重。
修改后的训练代码:
# 顺便纠正了变量名的拼写错误(nueralModel → neuralModel,避免后续混淆) neuralModel <- neuralnet(formula = f, hidden = c(4,2), linear.output = FALSE, data = train_nn)
2. 给模型足够的训练迭代次数
有时候模型没收敛也会导致权重不生成,默认的stepmax=1e4可能不够,你可以增加迭代次数让模型充分训练:
neuralModel <- neuralnet(formula = f, hidden = c(4,2), linear.output = FALSE, data = train_nn, stepmax = 1e5)
3. 先验证模型训练状态
在调用plot()前,先检查模型是否真的训练成功:
# 查看训练结果矩阵,包含收敛状态、误差等信息 print(neuralModel$result.matrix) # 直接检查权重是否存在 if (!is.null(neuralModel$weights)) { cat("权重已成功生成!可以绘图了\n") } else { cat("权重仍未生成,可能需要调整模型参数或增加迭代次数\n") }
完整修正后的代码
library(neuralnet) library(plyr) CreditCardnn <- read.csv("https://raw.githubusercontent.com/621-Group2/Final-Project/master/UCI_Credit_Card.csv") # 归一化数据集 maxValue <- apply(CreditCardnn, 2, max) minValue <- apply(CreditCardnn, 2, min) CreditCardnn <- as.data.frame(scale(CreditCardnn, center = minValue, scale = maxValue - minValue)) # 重命名目标变量 colnames(CreditCardnn)[25] <- "target" # 拆分训练集和测试集 smp <- floor(0.70 * nrow(CreditCardnn)) set.seed(4784) CreditCardnn$ID <- NULL train_index <- sample(seq_len(nrow(CreditCardnn)), size = smp, replace = FALSE) train_nn <- CreditCardnn[train_index, ] test_nn <- CreditCardnn[-train_index, ] # 构建公式 allVars <- colnames(CreditCardnn) predictorVars <- allVars[!allVars%in%'target'] predictorVars <- paste(predictorVars, collapse = "+") f <- as.formula(paste("target~", predictorVars, collapse = "+")) # 训练分类神经网络 neuralModel <- neuralnet(formula = f, hidden = c(4,2), linear.output = FALSE, data = train_nn, stepmax = 1e5) # 验证模型状态 print(neuralModel$result.matrix) # 绘制神经网络结构 plot(neuralModel)
内容的提问来源于stack exchange,提问作者Sharon M
相关产品推荐
相关产品推荐

