2014-07-17 2 views
9

Ich habe ein Baummodell mit R Caret trainiert. Ich versuche jetzt eine Konfusionsmatrix und erhalte die folgenden Fehler zu erzeugen:Fehler in ConfusionMatrix die Daten und Referenzfaktoren müssen die gleiche Anzahl von Ebenen haben R CARET

Error in confusionMatrix.default(predictionsTree, testdata$catgeory) : the data and reference factors must have the same number of levels

prob <- 0.5 #Specify class split 
singleSplit <- createDataPartition(modellingData2$category, p=prob, 
            times=1, list=FALSE) 
cvControl <- trainControl(method="repeatedcv", number=10, repeats=5) 
traindata <- modellingData2[singleSplit,] 
testdata <- modellingData2[-singleSplit,] 
treeFit <- train(traindata$category~., data=traindata, 
       trControl=cvControl, method="rpart", tuneLength=10) 
predictionsTree <- predict(treeFit, testdata) 
confusionMatrix(predictionsTree, testdata$catgeory) 

Der Fehler tritt auf, wenn die Verwirrung Matrix zu erzeugen. Die Ebenen sind für beide Objekte identisch. Ich kann nicht herausfinden, was das Problem ist. Ihre Struktur und Ebenen sind unten angegeben. Sie sollten gleich sein. Jede Hilfe würde sehr geschätzt werden, da sie mich geknackt !!

> str(predictionsTree) 
Factor w/ 30 levels "16-Merchant Service Charge",..: 28 22 22 22 22 6 6 6 6 6 ... 
> str(testdata$category) 
Factor w/ 30 levels "16-Merchant Service Charge",..: 30 30 7 7 7 7 7 30 7 7 ... 

> levels(predictionsTree) 
[1] "16-Merchant Service Charge" "17-Unpaid Cheque Fee"   "18-Gov. Stamp Duty"   "Misc"       "26-Standard Transfer Charge" 
[6] "29-Bank Giro Credit"   "3-Cheques Debit"    "32-Standing Order - Debit" "33-Inter Branch Payment"  "34-International"    
[11] "35-Point of Sale"    "39-Direct Debits Received" "4-Notified Bank Fees"   "40-Cash Lodged"    "42-International Receipts" 
[16] "46-Direct Debits Paid"  "56-Credit Card Receipts"  "57-Inter Branch"    "58-Unpaid Items"    "59-Inter Company Transfers" 
[21] "6-Notified Interest Credited" "61-Domestic"     "64-Charge Refund"    "66-Inter Company Transfers" "67-Suppliers"     
[26] "68-Payroll"     "69-Domestic"     "73-Credit Card Payments"  "82-CHAPS Fee"     "Uncategorised" 

> levels(testdata$category) 
[1] "16-Merchant Service Charge" "17-Unpaid Cheque Fee"   "18-Gov. Stamp Duty"   "Misc"       "26-Standard Transfer Charge" 
[6] "29-Bank Giro Credit"   "3-Cheques Debit"    "32-Standing Order - Debit" "33-Inter Branch Payment"  "34-International"    
[11] "35-Point of Sale"    "39-Direct Debits Received" "4-Notified Bank Fees"   "40-Cash Lodged"    "42-International Receipts" 
[16] "46-Direct Debits Paid"  "56-Credit Card Receipts"  "57-Inter Branch"    "58-Unpaid Items"    "59-Inter Company Transfers" 
[21] "6-Notified Interest Credited" "61-Domestic"     "64-Charge Refund"    "66-Inter Company Transfers" "67-Suppliers"     
[26] "68-Payroll"     "69-Domestic"     "73-Credit Card Payments"  "82-CHAPS Fee"     "Uncategorised"  
+0

In Ihrem Fehler wird 'Kategorie' mit' Katze' geschrieben. Wenn das Problem nicht zusammenhängt, was ist die Ausgabe von 'identical (levels (predictionsTree), levels (testdata $ category))'? – fxi

+0

Hallo danke dafür habe ich den albernen Rechtschreibfehler ... doh !!! Ich habe die identische Funktion ausgeführt und es ausgegeben [1] TRUE ......... jetzt bekomme ich den folgenden Fehler, wenn ich die confusionMatrix-Funktion ausführen ..... Fehler in der Tabelle (Daten, Referenz, dnn = dnn, ...): alle Argumente müssen die gleiche Länge haben – user2987739

+0

Suche nach einem anderen falsch geschriebenen 'category', prüfe' length (testdata $ category) 'und' length (predictionsTree', überprüfe auch deine Zusammenfassung beider Vektoren. Wenn du Willst du nur eine einfache Konfusionsmatrix haben: 'table (predictionsTree, testdata $ category)' – fxi

Antwort

1

Vielleicht sagt Ihr Modell einen bestimmten Faktor nicht voraus. Verwenden Sie die Funktion table() anstelle von confusionMatrix(), um festzustellen, ob dies das Problem ist.

+1

Du kannst das als Kommentar hinzufügen. –

-2

Möglicherweise fehlen in den Testdaten Werte. Fügen Sie die folgende Zeile hinzu, bevor Sie "projectsTree < - (treeFit, testdata)" angeben, um die NAs zu entfernen. Ich hatte den gleichen Fehler und jetzt funktioniert es für mich.

testdata <- testdata[complete.cases(testdata),] 
0

Die Länge Problem in Sie laufen ist wahrscheinlich auf die Anwesenheit von NAs im Trainingssatz - entweder die Fälle fallen, die nicht vollständig sind, oder zurechnet, so dass Sie fehlende Werte nicht haben.

0

Try na.pass für die na.action Option angeben:

predictionsTree <- predict(treeFit, testdata,na.action = na.pass) 
0

ich gleiche Problem hatte, aber ging weiter und verändert sie nach der Datendatei zu lesen, wie so ..

data = na.omit(data)

Dank alle für Zeiger !