0

森林ポリゴンのデータセットがあり、混同行列を使用してフィールド分類とマップ分類を比較しようとしています。大規模なデータセット (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")
4

1 に答える 1

1

変数が共通の値のセットを共有していないことを意味しているようです。一方が他方を予測している場合、存在しない値を予測しています (またはその逆)。不一致は、他の変数のレベルに存在しない値が割り当てられたケースの割合のようです。

あなたが投稿したアイリス データセットの例では、混同行列の変数の 1 つに新しい値を導入すると、この同じ出力を引き出すことができます。それらは要因であるため、最初に新しい要因レベルを作成する必要があります。

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)
于 2012-11-12T02:01:44.493 に答える