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

R语言Caret训练模型pred预测值出现NA值的原因排查

set.seed(2)
rpcv <- trainControl(method='repeatedcv', number=4, repeats = 10,
                     savePredictions = T, classProbs = T)

iris2 <- iris[c(1:3,60:72,100:109),]

iris2_train <- iris2[-1,]
iris2_test <- iris2[1,]

set.seed(4)
iris_svm <- train(as.factor(Species)~., data=iris2_train, method='svmRadial', trControl=rpcv)

iris_svm$pred

问题说明

运行上述代码完成带重复交叉验证的svmRadial模型训练后,调用iris_svm$pred查看预测结果时,返回对象中存在NA值。

NA产生原因

这些NA属于数据和参数设置不匹配导致的正常现象,不是代码运行故障:

  • 首先是训练集样本分布的问题:构造的iris2数据集里setosa类仅抽取了3个样本,剔除1个样本作为测试集后,iris2_train中setosa类仅剩2个样本。
  • 交叉验证参数设置为4折,每次重抽样迭代会把训练集随机拆为4份,轮流取1份作为验证集,剩余3份合并为训练子集拟合模型。整个训练集里只有2个setosa样本,拆分后最多分布在2个数据折中,必然存在部分训练子集完全不包含setosa类样本。
  • 用缺失整个类别的子集训练svmRadial模型时,模型没有学习到setosa类的特征和分类边界,也无法计算该类对应的预测概率,对验证集样本做预测时就会输出NA值,这是NA的主要来源。
  • 另外trainControl中设置savePredictions = T时,caret会保存调参过程中所有待评估超参数组合的预测结果,个别极端超参数(比如sigma值过高、惩罚系数cost过低)在小样本子集上拟合失败,也会产生零星NA,但这部分占比极低。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 03:45:48