混淆矩阵中的错误数据的级别不能多于参考

Posted

技术标签:

【中文标题】混淆矩阵中的错误数据的级别不能多于参考【英文标题】:error in confusion matrix the data cannot have more levels than the reference 【发布时间】:2017-03-23 19:24:18 【问题描述】:

我已经训练了一个 SVM 模型。我现在正在尝试生成混淆矩阵并不断收到以下错误:

confusionMatrix.default(test.pred, data_test$FAVOURITES_COUNT) :数据的级别不能超过 参考文献

这里是代码

model <- svm(FAVOURITES_COUNT~., data = data_train);

test.pred <- predict(model, data_test,na.action = na.pass);

confusionMatrix(test.pred,data_test$FAVOURITES_COUNT)

我已经使用以下方法测试了它们是否具有相同的级别:

> identical (levels(test.pred), levels(data_test$FAVOURITES_COUNT))
[1] TRUE

preddata_test$FAVOURITES_COUNT 的结构:

>  str(test.pred)  Named num [1:440] 1539 1516 1560 1560 1450 ...
>  - attr(*, "names")= chr [1:440] "1" "4" "11" "13" ...

> str(data_test$FAVOURITES_COUNT)
 int [1:440] 62 10725 84 84 19 99 54 84 84 84 ...

我认为这个问题与 chr 和 int 不同的类型有关,但我不知道如何解决这个问题,已经有另一个这样的问题,但如果我将 chr 更改为 int,它也没有提供解决方案

pred<-as.integer(format(round(predict(model,data_test))))

问题仍然存在。如何解决此错误

数据集

data

完整代码

rm(list=ls())
df <- read.csv("path/data.csv")
mydata <- df
mydata$ALTMETRIC_ID <- NULL


#library(caret)
split=0.60
trainIndex <- createDataPartition(mydata$FAVOURITES_COUNT, p=split, list=FALSE)
data_train <- mydata[ trainIndex,]
data_test <- mydata[-trainIndex,]
#library(e1071)

model <- svm(FAVOURITES_COUNT~., data = data_train);

test.pred <- predict(model, data_test,na.action = na.pass);

confusionMatrix(test.pred,data_test$FAVOURITES_COUNT)

【问题讨论】:

最好包含reproducible example @ProcrastinatusMaximus 添加 【参考方案1】:

我遇到了完全相同的问题。在创建 train 和 test.IE 之前,您需要将因变量列 favorites_counts 转换为因子。

mydata$FAVOURITES_COUNT<-factor(mydata$FAVOURITES_COUNT)

【讨论】:

【参考方案2】:

面临同样的问题,因为算法只预测一个结果的结果,我们需要确保我们的测试集有足够的结果类,例如我的例子中的 N 和 O。

【讨论】:

以上是关于混淆矩阵中的错误数据的级别不能多于参考的主要内容,如果未能解决你的问题,请参考以下文章

混淆矩阵错误:错误:`data` 和 `reference` 应该是具有相同级别的因素

R 混淆矩阵误差数据和参考因素同级别

混淆矩阵 - 错误:`data` 和 `reference` 应该是具有相同级别的因素

遥感软件中混淆矩阵是如何产生的

如何生成混淆矩阵并找到朴素贝叶斯分类器的错误分类率?

为啥混淆矩阵中的总数与输入的数据不同?