2013-05-02 122 views
2

我有R中分类树,我通过尝试交叉验证:预测功能

cv.tree1<-cv.tree(tree1) 

然后我试图

tree3 = prune.tree(tree1, best=15) 

然后我想从目前的预测我的所有标签树:

predict(tree3, data.train[1,]) 

输出是:

  0   1   2   3   4   5   6   7   8 
1 0.0006247397 0.8531862 0.03706789 0.02207414 0.003123698 0.008746356 0.009371095 0.00728863 0.05310287 
      9 
1 0.005414411 

据我了解它给我每个标签的概率,因为我这里有10个标签0:9 所以我想获得最后的陈述中最大的所有标签的预测

predict.list <-matrix(0,nrow=nrow(data.train),ncol=10) 
for (index in c(1:nrow(digits.train))) 
{ 
    predict.list[index]<-predict(tree3, data.train[index,]) 
} 

,然后我试图得到predict.list中的每一行的最大值,但实际上这是行不通的 所以我试图看到 str的结构(预测(tree3,data.train [index,])) 我发现它是

num [1, 1:10] 0.00656 0.00583 0.00947 0.07479 0.14813 ... 
    - attr(*, "dimnames")=List of 2 
    ..$ : chr "8184" 
    ..$ : chr [1:10] "0" "1" "2" "3" ... 

所以问题是,我是否有权获得最大值。每一个因此通过这种方式,我得到了预测,以及如何我可以用相应的标签

得到最大我可以

max(predict(tree3, digits.train[1,])) 

得到最大,但我不能得到相应的标签

回答

2

predict.tree()函数有一个参数叫做type。其默认值为"vector",对于分类树,将返回包含每个观察行的类概率的向量。您可以将它更改为"class",并且它只会返回具有最高概率的类。在使用

predict.list <你的情况 - 预测(tree3,data.train,类型= “类”)

将返回长度nrow(data.train)的因子矢量与每个值是所述因子水平这是为相应的行预测的。

+0

感谢它的工作原理,但我试过循环来获得所有的预测并将它保存在一个文件中,但它给了我比预期更多的数据,你有任何想法是否增加了更多的数据? – Yasmin 2013-05-02 05:10:25

+0

您无需循环即可获取数据集的所有预测。如果不指定行,它将返回一个包含数据集所有预测的向量。 – Marco 2013-05-02 05:59:52