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

