2013-03-10 62 views
10

我做的R.使用軟件rpart分類樹模型由訓練有素的:如何修剪R中的樹?

> tree <- rpart(activity ~ . , data=trainData) 
> pData1 <- predict(tree, testData, type="class") 

此樹模型的精度是:

> sum(testData$activity==pData1)/length(pData1) 
[1] 0.8094276 

我讀了一tutorial修剪樹通過交叉驗證:

> ptree <- prune(tree,cp=tree$cptable[which.min(tree$cptable[,"xerror"]),"CP"]) 
> pData2 <- predict(ptree, testData, type="class") 

準確率的修剪樹仍然是相同的:

> sum(testData$activity==pData2)/length(pData2) 
[1] 0.8094276 

我想知道我修剪過的樹有什麼問題嗎?我該如何使用R中的交叉驗證來修剪樹模型?謝謝。

回答

9

您已經使用了最小交叉驗證錯誤樹。另一種方法是使用最好的樹(您正在選擇的樹)的1個標準誤差內的最小樹。其原因是,考慮到CV誤差估計值,在1個標準誤差範圍內的最小樹在預測方面的表現與最好的(最低CV誤差)樹一樣好,但它所用的術語更少」。

地塊的成本複雜VS通過樹的大小爲聯合國 -pruned樹:

plotcp(tree) 

查找樹到一個誤差最小,其CP值的左邊是誤差條內一個具有最小誤差。

修剪不會影響擬合樹可能有很多原因。例如,根據?rpart.control中指定的停止規則,最佳樹可以是算法停止的那棵樹。