2013-05-02 117 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