No.18 Kappa系数精度评价2.0

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
# Loading necessary libraries
library(openxlsx)
library(vcd)
 
# Reading the Excel data
AccData <- read.xlsx("D:/R_proj/a绘图demo/bKappa/五指山生态系统分类精度评价一二级类.xlsx",
                     sheet = 1, colNames = T)
 
# Handle missing values (replace NA with 0)
AccData[is.na(AccData)] <- 0
AccMatrix <- data.matrix(AccData[1:nrow(AccData), 2:ncol(AccData)])
 
# Extract diagonal and total sum,提取对角线和总和
MatDiag <- diag(AccMatrix)
TotalNum <- sum(AccMatrix)
 
# Overall accuracy,总体精度 (OA)
OA <- sum(MatDiag) / TotalNum
 
# Kappa coefficient,计算Kappa系数,用vcd包中的函数
K <- Kappa(AccMatrix)
 
# Calculate Kappa manually,手动计算Kappa系数
colFreqs <- colSums(AccMatrix) / TotalNum
colFreqs
rowFreqs <- rowSums(AccMatrix) / TotalNum
rowFreqs
p0 <- sum(MatDiag) / TotalNum
pe <- crossprod(colFreqs, rowFreqs)[1]
k2 <- (p0 - pe) / (1 - pe)
 
# Calculate mapping accuracy and user accuracy
mapping_accuracy <- data.frame(Class = character(), MappingAccuracy = numeric())
user_accuracy <- data.frame(Class = character(), UserAccuracy = numeric())
 
for (i in 1:nrow(AccMatrix)) {
  PA <- AccMatrix[i, i] / sum(AccMatrix[, i])
  UA <- AccMatrix[i, i] / sum(AccMatrix[i, ])
   
  # Append results to data frames
  mapping_accuracy <- rbind(mapping_accuracy, data.frame(Class = AccData[i, 1], MappingAccuracy = PA))
  user_accuracy <- rbind(user_accuracy, data.frame(Class = AccData[i, 1], UserAccuracy = UA))
   
  print(paste(AccData[i, 1], "制图精度为", PA * 100, "%"))
  print(paste(AccData[i, 1], "用户精度为", UA * 100, "%"))
}
 
# Output overall classification accuracy and Kappa coefficient
print(paste("总体分类精度为", OA * 100, "%"))
print(paste("Kappa系数为", K[["Unweighted"]][["value"]] * 100, "%"))
 
# Save results to Excel
output_file <- "D:/R_proj/a绘图demo/bKappa/classification_accuracy_results1.xlsx"
write.xlsx(list(
  "Mapping Accuracy" = mapping_accuracy,
  "User Accuracy" = user_accuracy,
  "Overall Accuracy" = data.frame(OverallAccuracy = OA * 100),
  "Kappa Coefficient" = data.frame(Kappa = K[["Unweighted"]][["value"]] * 100)
), file = output_file)
 
print(paste("Results saved to", output_file))

混淆矩阵:

 

结果:

 

posted @   百里屠苏top  阅读(3)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· DeepSeek 开源周回顾「GitHub 热点速览」
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
点击右上角即可分享
微信分享提示