我是从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
所以这是我的具体问题:
当我用测试数据调用predict()
时,我知道测试数据中的功能(属性列)必须与测试数据中的功能相匹配。 但我是否需要删除预测标签(正在预测的属性列)?在上面的示例中,我使用省略预测列的测试数据集创建了kyphosisPredictions2
(第1列) ,导致与kyphosisPredictions1
相同的预测,其中包括预测列。这可能是巧合,所以我想确定一下。 无论提供给预测()的机器学习模型是否适用于此问题(是或否)的答案?
对分类栏的预测显然给出了“缺席”和“现在”的概率分布。有没有办法只返回单个预测水平,即。每行'缺席'还是'现在'?
答案 0 :(得分:0)
使用predict()
无论您是否为测试集包含标签都无关紧要,因为模型将仅使用其训练过的变量。对于第二个问题,只需指定所需的列。例如,如果您想要缺席:
kyphosisPredictions2 <- predict(kyphosisModel, kyphosis[,-1])[, 1]
您也可以使用列名称来执行此操作:
kyphosisPredictions2 <- predict(kyphosisModel, kyphosis)[, "absent"]