He entrenado a un modelo de Regresión Lineal con R símbolo de intercalación. Ahora estoy tratando de generar una matriz de confusión y seguir recibiendo el siguiente error:

Error en confusionMatrix.por defecto(pred, pruebas$Final) :
los datos de referencia y los factores deben tener el mismo número de niveles

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)

El error se produce cuando se genera la matriz de confusión. Los niveles son los mismos en ambos objetos. No puedo averiguar cuál es el problema. Su estructura y los niveles son los siguientes. Ellos deben ser el mismo. Cualquier ayuda sería muy apreciada como hacer que me agrietados!!

> 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
La pista está a la derecha en la salida de str. Ver cómo son diferentes? pred es el carácter de clase de pruebas y$Final es de la clase integer. cuando llame formato aquí pred<-format(round(predict(modFit,testing))), es la conversión de formato de caracteres, como se hace cuando se suministra una lista. ¿Por qué estás haciendo formato? y probablemente debería ser el cálculo de RMSE o MAE de su modelo, echa un vistazo a este heuristically.wordpress.com/2013/07/12/…
Ahora me han convertidos char resultado int utilizando pred<-como.entero ((formato de ronda(predict(modFit,de prueba)))) comando pero sigue el mismo error persiste como antes.No sé donde estoy pasando mal.

OriginalEl autor abcd | 2015-05-02

4 Comentarios

  1. 7

    Hacer table(pred) y table(testing$Final). Usted verá que hay al menos un número en el conjunto de pruebas que nunca se predijo (es decir, nunca presente en pred). Esto es lo que se entiende por qué «diferente número de niveles». Hay un ejemplo de un encargo de la función de conseguir alrededor de este problema aquí.

    Sin embargo, me encontré con que este truco funciona bien:

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

    Debe dar exactamente la misma matriz de confusión como con la función.

    OriginalEl autor nayriz

  2. 3
    confusionMatrix(pred,testing$Final)

    Cada vez que intenta construir una matriz de confusión, asegúrese de que tanto los verdaderos valores y la predicción de valores de factor de tipo de datos.

    Aquí tanto pred y testing$Final debe ser de tipo factor. En lugar de comprobar los niveles, compruebe el tipo de variables y convertirlos a factor si no lo son.

    Aquí testing$final es de tipo int. conver a factor y, a continuación, construir la matriz de confusión.

    OriginalEl autor sandeep patil

  3. 1

    Algo como lo que sigue parece funcionar para mí. La idea es similar a la de @nayriz:

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

    La clave es asegurarse de que los niveles del factor de coincidencia.

    OriginalEl autor David C.

  4. 0

    Está utilizando regresión y tratando de generar una matriz de confusión. Creo matriz de confusión se utiliza para la tarea de clasificación. En general la gente utiliza R^2 y RMSE métricas.

    OriginalEl autor user4959

Dejar respuesta

Please enter your comment!
Please enter your name here