Ошибка в матрице замешательства: данные и ссылочные факторы должны иметь одинаковое количество уровней
Я подготовил модель линейной регрессии с R-картой. Теперь я пытаюсь создать матрицу путаницы и продолжаю получать следующую ошибку:
Ошибка в confusionMatrix.default(pred, тестирование $Final):
данные и ссылочные факторы должны иметь одинаковое количество уровней
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)
Ошибка при создании матрицы путаницы. Уровни одинаковы для обоих объектов. Я не могу понять, в чем проблема. Их структура и уровни приведены ниже. Они должны быть одинаковыми. Любая помощь будет принята с благодарностью за то, что она меня расколола!
> 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
Ответы
Ответ 1
Делаем table(pred)
и table(testing$Final)
. Вы увидите, что в тестовом наборе есть хотя бы одно число, которое никогда не прогнозируется (т.е. никогда не присутствует в pred
). Вот что подразумевается под "разным количеством уровней". Вот пример пользовательской функции, чтобы обойти эту проблему здесь.
Тем не менее, я обнаружил, что этот трюк работает отлично:
table(factor(pred, levels=min(test):max(test)),
factor(test, levels=min(test):max(test)))
Он должен дать вам ту же матрицу путаницы, что и с функцией.
Ответ 2
confusionMatrix(pred,testing$Final)
Всякий раз, когда вы пытаетесь построить матрицу путаницы, убедитесь, что как истинные значения, так и значения прогноза относятся к факторному типу данных.
Здесь и pred, и testing$Final
должны иметь тип- factor
. Вместо того, чтобы проверять уровни, проверьте тип обеих переменных и преобразуйте их в множители, если это не так.
Здесь testing$final
имеет тип int
. преобразовать его в множитель и затем построить матрицу путаницы.
Ответ 3
Кажется, что-то вроде следующего работает для меня. Идея похожа на идею @nayriz:
confusionMatrix(
factor(pred, levels = 1:148),
factor(testing$Final, levels = 1:148)
)
Ключ должен убедиться, что уровни факторов совпадают.
Ответ 4
Вы используете регрессию и пытаетесь создать матрицу путаницы. Я считаю, что для классификации используется матрица путаницы. Обычно люди используют метрики R ^ 2 и RMSE.
Ответ 5
Я была такая же проблема. Я предполагаю, что это произошло, потому что аргумент данных не был приведен как фактор, как я ожидал. Пытаться:
confusionMatrix(pred,as.factor(testing$Final))
Надеюсь, поможет