繁体   English   中英

无法解释来自R中“ mda”包的混淆矩阵的结果

[英]Cannot interpret results from confusion matrix from 'mda' package in R

我有一个森林多边形的数据集,我正在尝试使用一个混淆矩阵来比较字段分类和地图分类。 我可以找到的唯一可以在更大的数据集(超过2个分类选项)上运行并且可以比较文本值的软件包位于软件包“ mda”中。 我已经运行了软件包“ mda”,并使用了“混淆”代码。

软件包提供的示例是...

data(iris)
irisfit <- fda(Species ~ ., data = iris)
confusion(predict(irisfit, iris), iris$Species)
                 Setosa       Versicolor       Virginica
Setosa            50              0               0
Versicolor         0             48               1
Virginica          0              2              49

attr(, "error"):
[1] 0.02

我简单地经营我的

data(Habitat)
confusion(Habitat$Field,Habitat$Map)

这给了我一个混淆矩阵输出,与所提供的代码示例相似(但没有那么整洁)。 在这一点上我迷路了。 我有2个结果。

attr(,"error")
[1] 0.3448276
attr(,"mismatch")
[1] 0.889313

我理解的错误,不匹配,但是,我似乎找不到任何在线提示或该软件包随附的文献中的任何提示。 我怀疑具有如此高的“不匹配”值是好的,但是我不知道如何解释它。 我认为这可能是一个相当具体的问题,也许只有以前使用过此程序包的人才能回答,但是如果有人知道或暗示如何查找,我将不胜感激。

谢谢,艾登

编辑 -包括我的数据集的片段,显示可能不匹配(怀疑这表示一致的错误分类)。 显示最一致的错误分类的剪辑。

structure(list(Field = structure(c(7L, 7L, 7L, 7L, 7L, 7L, 7L, 
7L, 7L, 7L, 7L, 7L, 7L, 8L), .Label = c("Black Spruce ", "Clearcut ", 
"Deciduous ", "Jack Pine ", "Lowland Conifer ", "Marshwillow ", 
"Mixed Conifer ", "Open Muskeg ", "Rock ", "Treed Muskeg ", "Upland Conifer ", 
"Young Conifer", "Young Deciduous"), class = "factor"), Map = structure(c(7L, 
7L, 7L, 11L, 11L, 11L, 11L, 11L, 11L, 12L, 13L, 13L, 13L, 6L), .Label = c("Black     Spruce", "Clearcut", "Deciduous", "Jack Pine", "Lowland Conifer", "Marshwillow", 
"Mixed Conifer", "Open Muskeg", "Rock", "Treed Muskeg", "Upland Conifer", 
"Young Conifer", "Young Deciduous"), class = "factor")), .Names = c("Field", 
"Map"), row.names = 143:156, class = "data.frame")

这似乎意味着变量没有共享一组通用值。 如果一个正在预测另一个,则它正在预测不存在的值(或者相反)。 失配似乎是被分配了一个值的案例所占的比例不存在于另一个变量的级别中。

在您发布的虹膜数据集示例中,如果将新值引入混淆矩阵中的变量之一,则可以得到相同的输出。 由于它们是因素,因此我们需要首先创建一个新的因素水平。

data(iris)
irisfit <- fda(Species ~ ., data = iris)
iris$Predict<-predict(irisfit, iris)
iris$Predict=factor(iris$Predict,levels= c("setosa", "versicolor",
      "virginica","monsterosa"))  #adding a new level 'monsterosa'
iris$Predict[1]<-"monsterosa"  #assign it to one of the observations

现在,我们可以重新运行混淆功能并获得不匹配的信息:

confusion(iris$Predict, iris$Species)
            true
predicted    setosa versicolor virginica
  setosa         49          0         0
  versicolor      0         48         1
  virginica       0          2        49
  monsterosa      1          0         0
attr(,"error")
[1] 0.02013423
attr(,"mismatch")
[1] 0.006666667

而且,如果我们重构另一个变量以包括两个变量中存在的所有级别,那么不匹配就会消失:

iris$Species=factor(iris$Species,levels= c("setosa", "versicolor",
      "virginica","monsterosa"))
confusion(iris$Predict, iris$Species)
            true
predicted    setosa versicolor virginica monsterosa
  setosa         49          0         0          0
  versicolor      0         48         1          0
  virginica       0          2        49          0
  monsterosa      1          0         0          0
attr(,"error")
[1] 0.02666667

我会比较as.character(unique(Habitat$Field))as.character(unique(Habitat$Map))进行追踪。 不需要as.character,但是易于阅读。

现在,您已经添加了数据,我看到的问题似乎是,您在某些变量的末尾有尾随空格,而在其他变量的词之间有双倍空格。

# see problem
as.character(levels(Habitat$Field))
as.character(levels(Habitat$Map))

# fix problem

# unfactor them for now so we can replace spaces
Habitat$Field<-as.character(Habitat$Field)
Habitat$Map<-as.character(Habitat$Map)

# replace unwanted spaces
Habitat$Field <- gsub("[[:space:]]*$","",Habitat$Field) #gets ending spaces
Habitat$Map <- gsub("[[:space:]]*$","",Habitat$Map) #gets ending spaces
Habitat$Map <- gsub("[[:space:]]{2,}"," ",Habitat$Map) # gets double spaces
Habitat$Field <- gsub("[[:space:]]{2,}"," ",Habitat$Field) # gets double spaces

# factor them again
Habitat$Field <-factor(Habitat$Field)
Habitat$Map<-factor(Habitat$Map)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM