You need to enable JavaScript to run this app. RStudio使用nnet训练银行营销预测模型出现NA/NaN/Inf报错如何解决
优惠活动
大模型
产品
解决方案
定价
更多

RStudio使用nnet训练银行营销预测模型出现NA/NaN/Inf报错如何解决

错误原因
  • 核心问题:nnet包要求输入特征为数值类型,你传入的输入数据bankData[A,c(1:4)]包含job、marital、education三个字符型分类特征,R强制将字符转换为数值时无法识别文本内容,生成大量NA值,触发NA/NaN/Inf in foreign function call报错。
  • 次要逻辑问题:你已经通过subset生成了筛选字段后的newbankData,但后续数据集划分、模型训练仍然使用原始bankData,代码逻辑不一致。
修复方案

推荐使用nnet的公式接口调用,接口会自动处理分类特征的编码转换,无需手动处理标签和特征类型,修复后完整代码如下:

# 读取数据集
bankData = read.csv("data/bank-additional.csv", sep = ";")

# 筛选需要的建模字段
newbankData <- subset(bankData, select = c(age, job, marital, education, y))

library(nnet)
# 设置随机种子保证结果可复现
set.seed(1)
# 划分70%训练集、30%测试集索引
A <- sort(sample(nrow(newbankData), nrow(newbankData)*0.7))
train_data <- newbankData[A,]
test_data <- newbankData[-A,]

# 用公式接口训练模型,自动处理分类特征编码
bankData_net <- nnet(y ~ age + job + marital + education, 
                     data = train_data, 
                     size=3, 
                     maxit=100, 
                     softmax=TRUE)

# 测试集预测
Yt <- predict(bankData_net, test_data, type="class")

# 生成混淆矩阵
conf.matrix <- table(test_data$y, Yt)  
rownames(conf.matrix) <- paste("Actual", rownames(conf.matrix))
colnames(conf.matrix) <- paste("Pred", colnames(conf.matrix))
print(conf.matrix)

如果你需要坚持使用矩阵输入接口,需要先手动将分类特征转换为独热编码,示例代码片段如下:

# 生成独热编码特征矩阵,自动处理分类变量
x_features <- model.matrix(~ age + job + marital + education -1, data = newbankData)
# 生成标签矩阵
Train_lab <- class.ind(newbankData$y)
# 划分数据集训练
A <- sort(sample(nrow(x_features), nrow(x_features)*0.7))
bankData_net <- nnet(x_features[A,], Train_lab[A,], size=3, maxit=100, softmax=TRUE)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.20 23:15:00