10

Ich habe ein lineares Regressionsmodell mit R Caret trainiert. Ich versuche jetzt eine Konfusionsmatrix zu erzeugen, und halten Sie die folgende Störung zu erhalten:Fehler in Confusion Matrix: die Daten und Referenzfaktoren müssen die gleiche Anzahl von Ebenen haben

Fehler in confusionMatrix.default (pred, $ Endprüfung): die Daten und Referenzfaktoren müssen die gleiche Anzahl von Ebenen haben

EnglishMarks <- read.csv("E:/Subject Wise Data/EnglishMarks.csv", 
header=TRUE) 
inTrain<-createDataPartition(y=EnglishMarks$Final,p=0.7,list=FALSE) 
training<-EnglishMarks[inTrain,] 
testing<-EnglishMarks[-inTrain,] 
predictionsTree <- predict(treeFit, testdata) 
confusionMatrix(predictionsTree, testdata$catgeory) 
modFit<-train(Final~UT1+UT2+HalfYearly+UT3+UT4,method="lm",data=training) 
pred<-format(round(predict(modFit,testing)))    
confusionMatrix(pred,testing$Final) 

Der Fehler tritt beim Generieren der Konfusionsmatrix auf. 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(pred) 
chr [1:148] "85" "84" "87" "65" "88" "84" "82" "84" "65" "78" "78" "88" "85" 
"86" "77" ... 
> str(testing$Final) 
int [1:148] 88 85 86 70 85 85 79 85 62 77 ... 

> levels(pred) 
NULL 
> levels(testing$Final) 
NULL 
+0

Der Hinweis ist richtig in Ihrer Ausgabe von str. Sehen Sie, wie sie anders sind? pred steht für den Klassencharakter und testet $ Final von der Klasse integer. Wenn Sie hier das Format 'pred <-format (round (vorhersagen (modFit, testing)))' aufrufen, wird es in das Zeichenformat konvertiert, so wie es bei der Angabe einer Liste der Fall ist. Warum machst du Format? und Sie sollten wahrscheinlich RMSE oder MAE Ihres Modells berechnen, werfen Sie einen Blick auf diese https://heuristica.wordpress.com/2013/07/12/calculate-rmse-and-mae-in-r-and-sas/ – infominer

+0

@infominer Jetzt habe ich das char-Ergebnis zu int umgewandelt, indem ich pred <-as.integer (Format (Runde (Vorhersage (ModFit, Testen)))) Befehl, aber immer noch der gleiche Fehler wie zuvor.Ich weiß nicht wo Ich gehe falsch. – abcd

Antwort

6

Sie table(pred) und table(testing$Final). Sie werden sehen, dass es mindestens eine Zahl in der Testmenge gibt, die niemals vorhergesagt wird (d. H. Niemals in pred). Dies ist, warum "verschiedene Anzahl von Ebenen" gemeint ist. Es gibt ein Beispiel für eine benutzerdefinierte Funktion, um dieses Problem zu umgehen here.

Allerdings fand ich, dass dieser Trick funktioniert: table(factor(pred, levels=min(test):max(test)), factor(test, levels=min(test):max(test)))

Es sollte Ihnen genau die gleiche Verwirrung Matrix wie bei der Funktion.

Verwandte Themen