输入包含缺失值时保存的预测中的rowIndex不正确

时间:2015-03-12 00:28:01

标签: r r-caret

我发现插入符处理丢失值的一些意外行为与已保存的返回预测有关。

具体而言,如果指定了savePredictions = TRUE,则将保存验证期间进行的所有预测,并与字段rowIndex一起返回,该字段指定行对应的原始输入的索引。

但是,如果输入中缺少值,并且未指定na.action,则这些行索引与原始输入的行索引不匹配。据推测,它们与过滤数据的行排成一行。

此外,文档指出默认na.actionna.fail,但我没有发现这种情况。

我在下面提供了一个最小的工作示例:

library(caret)

data = data.frame(
    ID         = c(1, 2, 3, 4, 5, 6),
    predictor  = c(1, 2,NA, 4, 5, 6)
)

ctl <- trainControl(method='cv', number=5, savePredictions=T)

fit <- train(data$ID ~ ., 
             data=data, 
             method='rpart', 
             trControl=ctl, 
             tuneLength = 1,
             tuneGrid = data.frame(.cp = 0))

comparison <- fit$pred
comparison$ID <- data[fit$pred$rowIndex,]$ID    
print(comparison)

在输出中,我们希望obs始终等于rowIndex,但事实并非如此。相反,我们得到以下输出:

  pred obs rowIndex cp Resample ID
1 4.25   1        1  0    Fold1  1
2 4.00   2        2  0    Fold2  2
3 3.50   4        3  0    Fold3  3
4 3.25   5        4  0    Fold4  4
5 3.00   6        5  0    Fold5  5

请注意,从第3行开始(输入中出现NA),索引会被移位。

指定na.action = na.omit后,我会看到相同的结果,但输出与na.action = na.roughfix一样符合预期。

0 个答案:

没有答案