10

Ho addestrato un modello di regressione lineare con il riferimento R. Ora sto cercando di generare una matrice di confusione e mantenere ottenere il seguente errore:Errore nella matrice di confusione: i dati e i fattori di riferimento devono avere lo stesso numero di livelli

Error in confusionMatrix.default (pred, collaudo $ Finale): i dati ei fattori di riferimento devono avere lo stesso numero di livelli

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'errore si verifica quando si genera la matrice di confusione. I livelli sono gli stessi su entrambi gli oggetti. Non riesco a capire quale sia il problema. La loro struttura e i livelli sono indicati di seguito. Dovrebbero essere uguali. Qualsiasi aiuto sarebbe molto apprezzato visto che mi sta facendo crack !!

> 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

L'indizio è giusto nella tua produzione di str. Guarda come sono diversi? pred è del carattere di classe e testing $ Final è di classe intero. quando chiamate il formato qui 'pred <-format (round (predict (modFit, testing)))', lo converte in formato carattere, come quando viene fornito un elenco. Perché stai facendo il formato? e probabilmente dovresti calcolare RMSE o MAE del tuo modello, dai uno sguardo a questo https://heuristically.wordpress.com/2013/07/12/calculate-rmse-and-mae-in-r-and-sas/ – infominer

+0

@infominer Ora ho copiato il risultato char in int usando il comando pred <-as.integer (format (round (predicty (modFit, testing)))) ma lo stesso errore persiste come prima.Non so dove Sto sbagliando – abcd

risposta

6

Do table(pred) e table(testing$Final). Vedrai che c'è almeno un numero nel set di test che non è mai previsto (cioè mai presente in pred). Questo è il motivo per cui "un diverso numero di livelli". C'è un esempio di una funzione personalizzata per aggirare questo problema here.

Tuttavia, ho trovato che questo trucco funziona bene: table(factor(pred, levels=min(test):max(test)), factor(test, levels=min(test):max(test)))

dovrebbe dare esattamente la stessa matrice di confusione con la funzione.