我想评估通过 Landsat 图像的监督分类分类的土地覆盖类别的准确性。作为参考数据,我使用航空摄影。
我对分类的 Landsat 数据进行了采样,在同一验证点,我从航空摄影中确定了土地覆盖类别。即,我的每个验证点都有两个属性:一个来自Landsat(landsat),第二个来自航拍(reference)。
我想从一组验证点计算一个误差矩阵(列联表)和准确度评估(整体准确度,用户生产商的准确度)。
我找到了一个包greenbrown和asbio来评估分类的准确性。然而,我对用户和生产者准确性的最终结果在两个包之间切换。
请问,哪个包正确计算了用户和生产者精度的值?
可复制的例子
library(asbio)
# create dummy data
landsat <- c(1, 1, 1, 2, 2, 2, 3, 4, 5, 5, 5, 1, 1, 1, 2, 2, 2, 3, 4, 5, 5, 3, 3, 2, 2)
reference <- c(1, 2, 1, 2, 2, 2, 3, 4, 2, 2, 5, 1, 2, 2, 2, 1, 2, 3, 4, 5, 5, 3, 3, 2, 2)
# calculate Kappa statistics
asbio::Kappa(landsat,reference) # Kappa(class1, reference)
# check out Kappa results
$ttl_agreement
[1] 76
$user_accuracy
1 2 3 4 5
75.0 58.3 100.0 100.0 100.0
$producer_accuracy
1 2 3 4 5
50.0 87.5 100.0 100.0 60.0
$khat
[1] 68.1
$table
reference
class1 1 2 3 4 5
1 3 3 0 0 0
2 1 7 0 0 0
3 0 0 4 0 0
4 0 0 0 2 0
5 0 2 0 0 3
# ----------------------------------------------------------------------
# make the same calculation with the greenbrown package
# ----------------------------------------------------------------------
library(greenbrown)
library(strucchange)
library(raster)
library(Kendall)
library(plyr)
library(bfast)
library(zoo)
# calculate the contingency table
tab <- table(landsat, reference) data
# let's see the tab
tab
reference
landsat 1 2 3 4 5
1 3 3 0 0 0
2 1 7 0 0 0
3 0 0 4 0 0
4 0 0 0 2 0
5 0 2 0 0 3
# calculate the accuracy assessement
greenbrown::AccuracyAssessment(tab)
1 2 3 4 5 Sum UserAccuracy
1 3 3.00000 0 0 0 6 50.0
2 1 7.00000 0 0 0 8 87.5
3 0 0.00000 4 0 0 4 100.0
4 0 0.00000 0 2 0 2 100.0
5 0 2.00000 0 0 3 5 60.0
Sum 4 12.00000 4 2 3 25 NA
ProducerAccuracy 75 58.33333 100 100 100 NA 76.0
用户和生产者的精度在两个包之间切换!请问,用户和生产者的准确度的计算和估计是正确的吗?