webentwicklung-frage-antwort-db.com.de

Fehler in der Verwirrungsmatrix: Die Daten- und Referenzfaktoren müssen dieselbe Anzahl von Ebenen haben

Ich habe ein lineares Regressionsmodell mit R-Caret trainiert. Ich versuche jetzt, eine Verwirrungsmatrix zu generieren und erhalte folgende Fehlermeldung:

Fehler in confusionMatrix.default (pred beim Testen von $ Final): Die Daten und Referenzfaktoren müssen dieselbe 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 Verwirrungsmatrix auf. Die Ebenen sind bei beiden Objekten gleich. Ich kann nicht herausfinden, was das Problem ist. Ihre Struktur und Ebenen sind unten angegeben. Sie sollten gleich sein. Jede Hilfe wäre sehr dankbar, da es mich rissig macht !!

> 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
11
abcd

Führen Sie table(pred) und table(testing$Final) aus. Sie werden sehen, dass es mindestens eine Zahl im Testsatz gibt, die niemals vorhergesagt wird (d. H. Niemals in pred vorhanden ist). Dies ist, was "unterschiedliche Anzahl von Ebenen" bedeutet. Es gibt ein Beispiel einer benutzerdefinierten Funktion, um dieses Problem zu umgehen hier .

Ich fand jedoch, dass dieser Trick gut funktioniert:

table(factor(pred, levels=min(test):max(test)), 
      factor(test, levels=min(test):max(test)))

Es sollte genau die gleiche Verwirrungsmatrix wie bei der Funktion geben. 

6
nayriz
confusionMatrix(pred,testing$Final)

Wenn Sie versuchen, eine Verwirrungsmatrix zu erstellen, stellen Sie sicher, dass sowohl die wahren Werte als auch die Vorhersagewerte den Faktordatentyp haben. 

Hier müssen sowohl pred als auch testing$Final vom Typ factor sein. Anstatt die Ebenen zu überprüfen, überprüfen Sie den Typ der beiden Variablen und konvertieren Sie sie in den Faktor, falls dies nicht der Fall ist.

Hier ist testing$final vom Typ int. konvergieren Sie es zu Faktor und bauen Sie dann die Verwirrungsmatrix auf.

3
sandeep patil

Etwas wie das scheint für mich zu funktionieren. Die Idee ähnelt der von @nayriz:

confusionMatrix(
  factor(pred, levels = 1:148),
  factor(testing$Final, levels = 1:148)
)

Der Schlüssel ist, um sicherzustellen, dass die Faktorstufen übereinstimmen.

1
David C.

Ich hatte das gleiche Problem. Ich denke, es ist passiert, weil das Datenargument nicht wie erwartet als Faktor geworfen wurde. Versuchen:

confusionMatrix(pred,as.factor(testing$Final))

ich hoffe es hilft

0
Cenk ŞİMŞEK

Sie verwenden Regression und versuchen, eine Verwirrungsmatrix zu generieren. Ich glaube, die Verwirrungsmatrix wird zur Klassifizierungsaufgabe verwendet. Im Allgemeinen werden R ^ 2- und RMSE-Metriken verwendet.

0
user4959