我有一个森林多边形的数据集,我试图使用混淆矩阵将Field分类与Map分类进行比较。我能找到的唯一可以运行在更大的数据集(超过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")
答案 0 :(得分:1)
这似乎意味着变量不共享一组共同的值。如果一个人正在预测另一个,则预测不存在的值(或反之)。不匹配似乎是指定在另一个变量的水平中不存在的值的情况的比例。
在您发布的iris数据集示例中,如果我们向混淆矩阵中的一个变量引入新值,我们可以引出相同的输出。由于它们是因素,我们需要首先创建一个新的因子水平。
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)