2015-01-09 17 views
6

Nel pacchetto R rPAR, cosa determina la dimensione degli alberi presentati all'interno della tabella CP per un albero decisionale? Nell'esempio seguente, la tabella CP assume come predefiniti solo gli alberi con 1, 2 e 5 nodi (come nsplit = 0, 1 e 4 rispettivamente).Dimensioni albero fornite dalla tabella CP in rpart

library(rpart) 
fit <- rpart(Kyphosis ~ Age + Number + Start, method="class", data=kyphosis) 
> printcp(fit) 

Classification tree: 
rpart(formula = Kyphosis ~ Age + Number + Start, data = kyphosis, 
method = "class") 

Variables actually used in tree construction: 
[1] Age Start 

Root node error: 17/81 = 0.20988 

n= 81 

     CP nsplit rel error xerror xstd 
1 0.176471  0 1.00000 1.00000 0.21559 
2 0.019608  1 0.82353 0.94118 0.21078 
3 0.010000  4 0.76471 0.94118 0.21078 

Esiste una regola intrinseca rpart() utilizzato per determinare le dimensioni di alberi ad oggi? Ed è possibile forzare printcp() per restituire le statistiche di convalida incrociata per tutte le possibili dimensioni dell'albero, ad esempio per l'esempio precedente, anche le righe per alberi con 3 e 4 nodi (nsplit = 2, 3)?

risposta

3

La funzione rpart() è controllata utilizzando la funzione rpart.control(). Ha parametri come minsplit che dice alla funzione di dividere solo quando ci sono più osservazioni quindi il valore specificato e cp che dice alla funzione di dividere solo se la mancanza totale di adattamento è diminuita di un fattore di cp. Se si guarda summary(fit) nell'esempio sopra riportato, mostra le statistiche per tutti i valori di nsplit. Per ottenere questi valori da stampare quando si utilizza printcp(fit), è necessario scegliere i valori appropriati di cp e minsplit quando si chiama la funzione originale rpart.

+0

Grazie per la risposta, ma ho avuto l'impressione che '' minsplit' e cp' sono i parametri utilizzati nella coltivazione l'albero prima convalida incrociata è tentato - invece di potatura subito dopo, che è ciò che il mio domanda e la tabella CP si riferiscono a. Se ho frainteso potrei sapere perché l'output sopra presenta solo nsplit = 0, 1, 4 e quali valori appropriati di 'minsplit' e' cp' potrebbero essere nsplit = 0, 1, 2, 3, 4? Per inciso, 'summary (fit)' non mi ha dato statistiche di convalida incrociata per tutti i valori di nsplit - la tabella CP mostrata è la stessa della domanda. – alopex

1

La documentazione cran-r su rpart menziona l'aggiunta dell'opzione cp = 0 alla funzione rpart. http://cran.r-project.org/web/packages/rpart/vignettes/longintro.pdf Indica inoltre altre opzioni che possono essere fornite nella funzione rpart, ad esempio per controllare il numero di suddivisioni.

dfit <- rpart(y ~ x, method='class', 
      control = rpart.control(xval = 10, minbucket = 2, **cp = 0**)) 
+1

Grazie per la risposta, ma come sopra, credo che 'minbucket' e' cp' influenzino solo la crescita dell'albero, non la potatura incrociata che viene dopo. In questo caso, l'aggiunta di 'control = rpart.control (cp = 0)' non ha modificato la tabella CP presentata nella domanda. – alopex

+0

Non so come sia possibile forzare più opzioni per visualizzare tutte le suddivisioni. A meno che non ci sia un guadagno aggiuntivo con lo split, non penso che rpart lo includa nell'output. Anche la cifosi è un piccolo insieme di dati con solo 81 punti. Se vedi il grafico CP con le opzioni sotto, non ci sono molte probabilità nell'errore relativo di X tra 1 e 3 e quindi nsplit = 2 non è considerato del tutto. fit2 <- rpart (Kyphosis ~ Age + Number + Start, data = kyphosis, method = "class", control = rpart.control (minsplit = 8)) rsq.rpart (fit2) –