关于使用rpart模型的predict()的基本问题

时间:2014-02-08 21:10:14

标签: r

我是从Weka过来的,我正在尝试学习R的predict()功能。

假设我想对分类变量进行预测,如下图所示,内置的脊柱后凸数据集。我正在使用rpart,我正在调用predict(),其中训练数据充当测试数据。

> library(rpart)
> head(kyphosis)
  Kyphosis Age Number Start
1   absent  71      3     5
2   absent 158      3    14
3  present 128      4     5
4   absent   2      5     1
5   absent   1      4    15
6   absent   1      2    16
> 
> kyphosisModel <- rpart(Kyphosis ~ Age + Number + Start, data=kyphosis)
> 
> kyphosisPredictions1 <- predict(kyphosisModel, kyphosis)
> head(kyphosisPredictions1)
     absent   present
1 0.4210526 0.5789474
2 0.8571429 0.1428571
3 0.4210526 0.5789474
4 0.4210526 0.5789474
5 1.0000000 0.0000000
6 1.0000000 0.0000000
> 
> kyphosisPredictions2 <- predict(kyphosisModel, kyphosis[,-1])
> head(kyphosisPredictions2)
     absent   present
1 0.4210526 0.5789474
2 0.8571429 0.1428571
3 0.4210526 0.5789474
4 0.4210526 0.5789474
5 1.0000000 0.0000000
6 1.0000000 0.0000000

所以这是我的具体问题:

  1. 当我用测试数据调用predict()时,我知道测试数据中的功能(属性列)必须与测试数据中的功能相匹配。 但我是否需要删除预测标签(正在预测的属性列)?在上面的示例中,我使用省略预测列的测试数据集创建了kyphosisPredictions2(第1列) ,导致与kyphosisPredictions1相同的预测,其中包括预测列。这可能是巧合,所以我想确定一下。 无论提供给预测()的机器学习模型是否适用于此问题(是或否)的答案?

  2. 对分类栏的预测显然给出了“缺席”和“现在”的概率分布。有没有办法只返回单个预测水平,即。每行'缺席'还是'现在'?

1 个答案:

答案 0 :(得分:0)

使用predict()无论您是否为测试集包含标签都无关紧要,因为模型将仅使用其训练过的变量。对于第二个问题,只需指定所需的列。例如,如果您想要缺席:

kyphosisPredictions2 <- predict(kyphosisModel, kyphosis[,-1])[, 1]

您也可以使用列名称来执行此操作:

kyphosisPredictions2 <- predict(kyphosisModel, kyphosis)[, "absent"]