2015-03-22 20 views
5

Ho un dataframe puramente categorica dalla UCI database di apprendimento automatico https://archive.ics.uci.edu/ml/datasets/Diabetes+130-US+hospitals+for+years+1999-2008Qual è la differenza tra errore rel e errore x in un albero decisionale rpart?

Sto usando rpart per formare un albero di decisione basata su una nuova categoria sul fatto che i pazienti tornano prima di 30 giorni (una nuova categoria fallito).

Sto usando i seguenti parametri per la mia decisione albero

tree_model <- rpart(Failed ~ race + gender + age+ time_in_hospital+ medical_specialty + num_lab_procedures+ num_procedures+num_medications+number_outpatient+number_emergency+number_inpatient+number_diagnoses+max_glu_serum+ A1Cresult+metformin+glimepiride+glipizide+glyburide+pioglitazone+rosiglitazone+insulin+change,method="class", data=training_data, control=rpart.control(minsplit=2, cp=0.0001, maxdepth=20, xval = 10), parms = list(split = "gini")) 

stampa dei risultati dei rendimenti:

 CP  nsplit rel error xerror  xstd 
1 0.00065883  0 1.00000 1.0000 0.018518 
2 0.00057648  8 0.99424 1.0038 0.018549 
3 0.00025621  10 0.99308 1.0031 0.018543 
4 0.00020000  13 0.99231 1.0031 0.018543 

Vedo che l'errore relativo sta andando giù come l'albero decisionale si dirama, ma l'xerror sale - che non capisco come avrei pensato che l'errore avrebbe ridotto più rami ci sono e più complesso è l'albero.

Ritengo che l'xerror sia il più importante, poiché la maggior parte dei metodi di potatura degli alberi taglierebbe l'albero alla radice.

Qualcuno può spiegarmi perché l'xerror è a cosa si concentra quando si pota l'albero? E quando riepiloghiamo quale è l'errore del classificatore dell'albero decisionale, è l'errore 0.99231 o 1.0031?

+0

Questo è un problema concettuale, non una domanda di codifica. Dovresti trovare un forum whare questo è on-topic. Forse CrossValidated.com. –

risposta

4

L'errore x è l'errore di convalida incrociata (rpart ha una convalida incrociata integrata). Usate le 3 colonne, rel_error, xerror e xstd insieme per aiutarvi a scegliere dove potare l'albero.

Ogni riga rappresenta un'altezza diversa dell'albero. In generale, più livelli nell'albero indicano che ha un errore di classificazione inferiore sull'allenamento. Tuttavia, si corre il rischio di sovralimentazione. Spesso, l'errore di convalida incrociata cresce effettivamente quando l'albero ottiene più livelli (almeno, dopo il livello "ottimale").

Una regola empirica è di scegliere il livello minimo in cui lo rel_error + xstd < xerror.

Se si esegue plotcp sull'output, verrà inoltre visualizzato il punto ottimale per potare l'albero.

Vedere anche here.

1

Vorrei aggiungere alcune informazioni alla risposta di @Harold Ship. In realtà, ci sono tre modi per selezionare il valore ottimale per la potatura cp:

  1. usa il primo livello (cioè almeno nsplit) con xError minimo. Il primo livello inizia solo quando ci sono più livelli con lo stesso xerror minimo. Questo è il metodo usato più comune.

  2. Utilizzare il primo livello in cui xerror cade nell'intervallo ± 1 xstd di min (xerror), cioè xerror < min (xerror) + xstd, il livello il cui xerror è uguale o inferiore alla linea orizzontale. Questo metodo tiene conto della variabilità di xerror derivante dalla convalida incrociata.

    Nota: rel_error NON deve essere utilizzato durante l'eliminazione.

  3. (Un metodo utilizzato raramente) Utilizzare il primo livello in cui xerror ± xstd si sovrappone a min (xerror) ± xstd. cioè il livello il cui limite inferiore è uguale o inferiore alla linea orizzontale.