2013-03-10 11 views
10

Ich bin eine Klassifizierung zu tun in R. mit rpart Das Baummodell von geschultem ist:Wie beschneidet man einen Baum in R?

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

Die Genauigkeit für dieses Baummodell ist:

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

ich ein tutorial lesen, den Baum zu beschneiden durch Kreuzvalidierung:

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

die Genauigkeitsrate für den beschnittenen Baum ist immer noch das gleiche:

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

Ich möchte wissen, was mit meinem beschnittenen Baum nicht stimmt? Und wie kann ich das Baummodell mit Kreuzvalidierung in R beschneiden? Vielen Dank.

Antwort

9

Sie haben den minimalen validierten Fehlerbaum verwendet. Eine Alternative besteht darin, den kleinsten Baum zu verwenden, der innerhalb eines Standardfehlers des besten Baums liegt (der Baum, den Sie auswählen). Der Grund dafür ist, dass der kleinste Baum innerhalb eines Standardfehlers bei den CV-Schätzungen des Fehlers bei der Vorhersage einen genauso guten Job macht wie der beste Baum (der niedrigste CV-Fehler), jedoch mit weniger "Termen" ".

Plot die Kosten-Komplexität vs Baumgröße für den un -pruned Baum über:

plotcp(tree) 

Finden Sie den Baum auf der linken Seite des einen mit minimalen Fehlerwert, dessen cp liegt innerhalb der Fehlerbalken von eine mit minimalem Fehler.

Es kann viele Gründe geben, warum das Beschneiden den angepassten Baum nicht beeinflusst. Zum Beispiel könnte der beste Baum derjenige sein, bei dem der Algorithmus gemäß den Stoppregeln wie in ?rpart.control angegeben gestoppt wurde.