predict()函数的奇怪行为

时间:2014-06-10 01:08:42

标签: r machine-learning r-caret cart-analysis

我目前正在从Coursera学习“实用机器学习”课程,并且正在使用预测功能遇到一些奇怪的行为。问的问题是训练树然后做出一些预测。所以我没有在这里发布答案,我已经更改了用于问题的数据集。代码如下:

rm(list = ls())
library(rattle)
data(mtcars)
mtcars$vs = as.factor(mtcars$vs)
set.seed(125)
model = train(am ~ ., method = 'rpart', data = mtcars)
print(model)
fancyRpartPlot(model$finalModel)

sampleData = mtcars[1,]
sampleData[1,names(sampleData)] = rep(NA, length(names(sampleData)))
sampleData[1, c('wt')] = c(4)
predict(model, sampleData[1,], verbose = TRUE)

在上面的代码中,有两个主要部分。第一个构建树,第二个(sampleData开始)创建一个小样本数据集以应用模型。为了确保我具有与原始数据完全相同的结构,我只需复制训练数据集的第一行,然后将所有列设置为NA。然后,我将数据仅放在决策树所需的列中(在本例中为wt变量)。

当我执行上面的代码时,我得到以下结果:

Number of training samples: 32 
Number of test samples:     0 

rpart : 0 unknown predictions were added

numeric(0)

供参考,以下是树的结构:

fancyRpartPlot(model$finalModel)

enter image description here

有人可以帮助我理解为什么predict函数没有返回我提供的sampleData的预测值吗?

1 个答案:

答案 0 :(得分:0)

不幸的是,即使rpart仅在分割中使用了wt变量,预测仍然需要其他变量存在。使用包含样本列的数据集:

> predict(model, mtcars[1,])
[1] 0.8571429

最高