2013-06-27 5 views
5

Wenn die Ausgabe von randomForest zu verwenden versuchen, neue Daten zu klassifizieren (oder sogar die ursprünglichen Trainingsdaten), erhalte ich folgende Fehlermeldung:New Faktorstufe nicht in den Trainingsdaten

> res.rf5 <- predict(model.rf5, train.rf5) 
Error in predict.randomForest(model.rf5, train.rf5) : 
    New factor levels not present in the training data 

Was diesen Fehler macht bedeuten? Warum tritt dieser Fehler auf, auch wenn ich versuche, dieselben Daten vorherzusagen, die ich trainiert habe?

Ein kleines Beispiel, das verwendet werden kann, um den Fehler zu reproduzieren, ist unten.

train.rf5 <- structure(
    list(A = structure(c(2L, 1L, 1L, 1L, 1L, 1L, 3L, 1L, 1L, 3L), 
        .Label = c("(-0.1,19.9]", "(19.9,40]", "(80.1,100]"), 
        class = c("ordered", "factor")), 
     B = structure(c(3L, 1L, 1L, 1L, 1L, 1L, 2L, 1L, 1L, 4L), 
        .Label = c("1", "2", "4", "5"), 
        class = c("ordered", "factor")), 
     C = structure(c(1L, 1L, 2L, 1L, 1L, 2L, 2L, 1L, 1L, 2L), 
        .Label = c("FALSE", "TRUE"), 
        class = "factor")), 
    .Names = c("A", "B", "C"), 
    row.names = c(7L, 8L, 10L, 11L, 13L, 15L, 16L, 17L, 18L, 19L), 
    class = "data.frame") 

#    A B  C 
# 7 (19.9,40] 4 FALSE 
# 8 (-0.1,19.9] 1 FALSE 
# 10 (-0.1,19.9] 1 TRUE 
# 11 (-0.1,19.9] 1 FALSE 
# 13 (-0.1,19.9] 1 FALSE 
# 15 (-0.1,19.9] 1 TRUE 
# 16 (80.1,100] 2 TRUE 
# 17 (-0.1,19.9] 1 FALSE 
# 18 (-0.1,19.9] 1 FALSE 
# 19 (80.1,100] 5 TRUE 

require(randomForest) 
model.rf5 <- randomForest(C ~ ., data = train.rf5) 
res.rf5 <- predict(model.rf5, train.rf5) # Causes error 

Ich sehe einige möglicherweise damit verbundene Fragen auf SO, aber ich glaube nicht, dass sie

  1. lösen dropping factor levels in a subsetted data frame in R
  2. Random forest package in R shows error during prediction() if there are new factor levels present in test data. Is there any way to avoid this error?

Im Gegensatz zu 1), das tue ich mein Problem direkt haben keine Faktorstufen, die nicht in den Daten dargestellt sind, und im Gegensatz zu 2) sind die Faktorstufen in meinen Zug- und Testdaten identisch.

Edit: Zusätzliche Informationen:

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

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

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

other attached packages: 
[1] randomForest_4.6-7 

loaded via a namespace (and not attached): 
[1] tools_3.0.1 
+0

Ich wette, es hat etwas mit den geordneten Faktoren zu tun. –

Antwort

5

Getestet habe ich meine Spekulation, dass die bestellten Faktoren die Ursache des Problems waren, und keine Fehlermeldung erhalten, wenn das einzige, was ich entfernen tun, ist die „geordnete“ aus den Klassen von dieser Struktur. Ich sehe in der Dokumentation nicht, dass geordnete Faktoren nicht erlaubt sind, aber ich sehe auch nicht, dass sie speziell berücksichtigt wurden. Es ist möglich, dass dies vorher nicht aufgetreten ist. Es scheint, dass die Bestellung zusätzliche Komplexität auferlegen würde und dass, wenn Sie wollen, dass die Reihenfolge berücksichtigt wird, stattdessen die as.numeric(.) "Punkte" dem RF-Algorithmus angeboten werden könnten.

+0

Danke DWin, ich sehe einen alten Thread von 2008, der verwandt ist, es kann das gleiche Problem sein. https://stat.ethz.ch/pipermail/r-help/2008-April/160833.html – cyang

+0

Ahah. Sieht so aus, als wäre es von Andys Radar verschwunden. Ich hoffe, dass mein Vorschlag, eine von dem geordneten Faktor abgeleitete Bewertungsvariable zu verwenden, immer noch Vorteile hat. –

Verwandte Themen