我在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,]))
但我无法获得相应的标签
答案 0 :(得分:4)
predict.tree()
函数有一个名为type
的参数。它的默认值是"vector"
,在分类树的情况下,它将返回一个包含每个观察行的类概率的向量。您可以将其更改为"class"
,它只返回概率最高的类。在你的情况下使用
predict.list&lt; - predict(tree3,data.train,type =“class”)
将返回长度为nrow(data.train)
的因子向量,其中每个值都是为相应行预测的因子级别。