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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 04:10:26