web-dev-qa-db-fra.com

Erreur dans la matrice de confusion: les données et les facteurs de référence doivent avoir le même nombre de niveaux

J'ai formé un modèle de régression linéaire avec R. caret. J'essaie maintenant de générer une matrice de confusion et de recevoir l'erreur suivante:

Erreur dans confusionMatrix.default (pred, testing $ Final): Les données et les facteurs de référence doivent avoir le même nombre de niveaux

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)

L'erreur se produit lors de la génération de la matrice de confusion. Les niveaux sont les mêmes sur les deux objets. Je ne peux pas comprendre quel est le problème. Leur structure et leurs niveaux sont donnés ci-dessous. Ils devraient être les mêmes. Toute aide serait grandement appréciée car elle me faisait craquer !!

> 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

Est-ce que table(pred) et table(testing$Final). Vous verrez qu'il y a au moins un nombre dans l'ensemble de test qui n'est jamais prédit (c'est-à-dire jamais présent dans pred). C’est ce que l’on entend par "nombre différent de niveaux". Il existe un exemple de fonction personnalisée permettant de contourner ce problème ici .

Cependant, j'ai trouvé que cette astuce fonctionne bien:

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

Cela devrait vous donner exactement la même matrice de confusion que pour la fonction. 

6
nayriz
confusionMatrix(pred,testing$Final)

Lorsque vous essayez de créer une matrice de confusion, assurez-vous que les valeurs vraies et les valeurs de prédiction sont de type données factor 

Ici, pred et testing$Final doivent être de type factor. Au lieu de vérifier les niveaux, vérifiez le type des deux variables et convertissez-les en facteur si elles ne le sont pas.

Ici, testing$final est de type int. convertissez-le en facteur, puis construisez la matrice de confusion.

3
sandeep patil

Quelque chose comme ce qui suit semble fonctionner pour moi. L'idée est similaire à celle de @nayriz:

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

La clé est de s'assurer que les niveaux de facteurs correspondent.

1
David C.

Vous utilisez la régression et essayez de générer une matrice de confusion. Je crois que la matrice de confusion est utilisée pour la tâche de classification. Généralement, les gens utilisent les métriques R ^ 2 et RMSE.

0
user4959