【原创】R语言中多分类问题 multicalss classification 的性能测量数据分析报告论文(代码+数据)
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
咨询QQ:3025393450
有问题百度搜索“”就可以了
欢迎登陆官网:/datablog
R语言中多分类问题multicalss classification 的性能测量数据分析报告
来源:大数据部落| 有问题百度一下“”就可以了
原文链接:/?p=11160
对于分类问题,通常根据与分类器关联的混淆矩阵来定义分类器性能。
根据混淆矩阵,可以计算灵敏度(召回率),特异性和精度。
对于二进制分类问题,所有这些性能指标都很容易获得。
非得分分类器的数据
为了展示多类别设置中非得分分类器的性能指标,让我们考虑观察到\(N = 100 \)的分类问题和观察到\(G = \ {1,\ ldots,5 \}的五个分类问题\):
bels <- c(rep("A", 45), rep("B" , 10), rep("C", 15), rep("D", 25), rep("E", 5))
predictions <- c(rep("A", 35), rep("E", 5), rep("D", 5),
rep("B", 9), rep("D", 1),
rep("C", 7), rep("B", 5), rep("C", 3),
rep("D", 23), rep("C", 2),
rep("E", 1), rep("A", 2), rep("B", 2))
df <- data.frame("Prediction" = predictions, "Reference" = bels)
准确性和加权准确性
咨询QQ:3025393450
有问题百度搜索“”就可以了
欢迎登陆官网:/datablog
通常,将多类准确性定义为正确预测的平均数:
其中\(I \)是指标函数,如果类匹配,则返回1,否则返回0。
为了对各个类的性能更加敏感,我们可以为每个类分配权重\(w_k \),以使\(\ sum_ {k = 1} ^ {| G |} w_k = 1 \)。
单个类别的\(w_k \)值越高,该类别的观测值对加权准确性的影响就越大。
加权精度取决于:
为了平均加权所有类,我们可以设置\(w_k = \ frac {1} {| G |} \,\ forall k \ in \ {1,\ ldots,G \} \)。
注意,当使用除均等权重之外的任何其他值时,很难找到关于权重的特定组合的合理论证。
计算精度和加权精度
精度很容易计算:
calculate.accuracy <- function(predictions, bels) {
return(length(which(predictions == bels)) / length(bels))
}
calculate.w.accuracy <- function(predictions, bels, weights) {
lvls <- levels(bels)
if (length(weights) != length(lvls)) {
stop("Number of weights should agree with the number of classes.")
咨询QQ:3025393450
有问题百度搜索“”就可以了
欢迎登陆官网:/datablog
}
if (sum(weights) != 1) {
stop("Weights do not sum to 1")
}
accs <- lapply(lvls, function(x) {
idx <- which(bels == x)
return(calculate.accuracy(predictions[idx], bels[idx]))
})
acc <- mean(unlist(accs))
return(acc)
}
acc <- calculate.accuracy(df$Prediction, df$Reference)
print(paste0("Accuracy is: ", round(acc, 2)))
## [1] "Accuracy is: 0.78"
## [1] "Weighted accuracy is: 0.69"
F1分数的微观和宏观平均值
微观平均值和宏观平均值表示在多类设置中解释混淆矩阵的两种方式。
在这里,我们需要为每个类\(g_i \ in G = \ {1,\ ldots,K \} \)计算一个混淆矩阵,以使第\(i \)个混淆矩阵考虑类\(g_i \)作为肯定类,而所有其他类\(g_j \)作为\(j \ neq i \)作为否定类。
为了说明为什么增加真实负数会带来问题,请想象有10个类别,每个类别有10个观察值。
然后,其中一个类别的混淆矩阵可能具有以下结构:
预测/参
考1类
其他
类
1类810
咨询QQ:3025393450
有问题百度搜索“”就可以了欢迎登陆官网:/datablog
预测/参
考1类
其他
类
其他类280
基于此矩阵,特异性将为\(\ frac {80} {80 + 10} = 88.9 \%\),尽管仅在18个实例中的8个实例中正确预测了1类(精度为44.4%)。
在下文中,我们将使用\(TP_i \),\(FP_i \)和\(FN_i \)分别在与第(i)个相关联的混淆矩阵中指示真阳性,假阳性和假阴性类。
此外,让精度由\(P \)表示,并由\(R \)表示。
计算R中的微观和宏观平均值
在这里,我演示了如何在R中计算F1分数的微观平均值和宏观平均值。