2013-09-02 6 views
11

Ich versuche, die variable Bedeutung eines RF-Modells in irgendeiner Weise zu erhalten. Dies ist der Ansatz, den ich bisher versucht habe, aber alternative Vorschläge sind sehr willkommen.Variable Wichtigkeit mit dem Caret-Paket (Fehler); RandomForest Algorithmus

ich ein Modell in R trainiert haben:

require(caret) 
require(randomForest) 
myControl = trainControl(method='cv',number=5,repeats=2,returnResamp='none') 
model2 = train(increaseInAssessedLevel~., data=trainData, method = 'rf', trControl=myControl) 

Der Datensatz ist ziemlich groß, aber das Modell läuft gut. Ich kann seine Teile zugreifen und Befehle ausführen, wie:

> model2[3] 
$results 
    mtry  RMSE Rsquared  RMSESD RsquaredSD 
1 2 0.1901304 0.3342449 0.004586902 0.05089500 
2 61 0.1080164 0.6984240 0.006195397 0.04428158 
3 120 0.1084201 0.6954841 0.007119253 0.04362755 

Aber ich erhalte den folgenden Fehler:

> varImp(model2) 
Error in varImp[, "%IncMSE"] : subscript out of bounds 

Anscheinend gibt angeblich ein Wrapper sein, aber das scheint nicht der Fall zu sein : (siehe: http://www.inside-r.org/packages/cran/caret/docs/varImp)

varImp.randomForest(model2) 
Error: could not find function "varImp.randomForest" 

Aber dies ist besonders merkwürdig:

> traceback() 
No traceback available 

> sessionInfo() 
R version 3.0.1 (2013-05-16) 
Platform: x86_64-redhat-linux-gnu (64-bit) 

locale: 
[1] LC_CTYPE=en_GB.UTF-8  LC_NUMERIC=C    
[3] LC_TIME=en_GB.UTF-8  LC_COLLATE=en_GB.UTF-8  
[5] LC_MONETARY=en_GB.UTF-8 LC_MESSAGES=en_GB.UTF-8 
[7] LC_PAPER=C     LC_NAME=C     
[9] LC_ADDRESS=C    LC_TELEPHONE=C    
[11] LC_MEASUREMENT=en_GB.UTF-8 LC_IDENTIFICATION=C  

attached base packages: 
[1] parallel stats  graphics grDevices utils  datasets methods 
[8] base  

other attached packages: 
[1] elasticnet_1.1  lars_1.2   klaR_0.6-9   MASS_7.3-26  
[5] kernlab_0.9-18  nnet_7.3-6   randomForest_4.6-7 doMC_1.3.0   
[9] iterators_1.0.6 caret_5.17-7  reshape2_1.2.2  plyr_1.8   
[13] lattice_0.20-15 foreach_1.4.1  cluster_1.14.4  

loaded via a namespace (and not attached): 
[1] codetools_0.2-8 compiler_3.0.1 grid_3.0.1  stringr_0.6.2 
[5] tools_3.0.1 

Antwort

25

Die Wichtigkeitswerte können eine Weile dauern, um zu berechnen, und train wird nicht automatisch randomForest erhalten, um sie zu erstellen. Fügen Sie importance = TRUE zu dem train Aufruf hinzu, und es sollte funktionieren.

Max

3

Das ist, weil das von train() erhaltene Objekt kein reines Random Forest-Modell ist, sondern eine Liste verschiedener Objekte (die das endgültige Modell selbst sowie Kreuzvalidierungsergebnisse usw. enthalten). Sie können sie mit ls(model2) sehen. Um das endgültige Modell zu verwenden, rufen Sie einfach varImp(model2$finalModel) an.

+0

Dies bedeutet für mich nicht, ich habe es durch Zugabe von Bedeutung arbeiten = TRUE. –

Verwandte Themen