混淆矩阵中的错误:数据和参考因子必须具有相同的级别数

abc*_*bcd 15 artificial-intelligence r classification machine-learning linear-regression

我用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)
Run Code Online (Sandbox Code Playgroud)

生成混淆矩阵时会发生错误.两个对象的级别相同.我无法弄清问题是什么.它们的结构和水平如下.它们应该是一样的.任何帮助将非常感谢,因为它让我破解!

> 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
Run Code Online (Sandbox Code Playgroud)

小智 8

table(pred)table(testing$Final).您将看到测试集中至少有一个数字从未预测过(即从未出现过pred).这就是"不同级别"的原因.还有就是要解决这个问题,一个定制函数的例子在这里.

但是,我发现这个技巧很好用:

table(factor(pred, levels=min(test):max(test)), 
      factor(test, levels=min(test):max(test)))
Run Code Online (Sandbox Code Playgroud)

它应该为您提供与函数完全相同的混淆矩阵.


小智 8

我遇到过同样的问题。我猜这是因为数据参数没有像我预期的那样被转换为因素。尝试:

confusionMatrix(pred,as.factor(testing$Final))
Run Code Online (Sandbox Code Playgroud)

希望能帮助到你


Dav*_* C. 6

像下面这样的东西似乎对我有用。这个想法类似于@nayriz:

confusionMatrix(
  factor(pred, levels = 1:148),
  factor(testing$Final, levels = 1:148)
)
Run Code Online (Sandbox Code Playgroud)

关键是要确保因子水平匹配。


小智 5

confusionMatrix(pred,testing$Final)
Run Code Online (Sandbox Code Playgroud)

每当您尝试构建混淆矩阵时,请确保真实值和预测值均属于因子数据类型。

这里pred和testing$Finalmust 都必须是type factor。而不是检查级别,而是检查两个变量的类型,如果不是,则将它们转换为因数。

testing$final是类型int。将其收敛为因数,然后构建混淆矩阵。