多级分类、Cohen Kappa、Krippendorff Alpha 和癌症

一则或许对你有用的小广告

欢迎加入小哈的星球 ,你将获得:专属的项目实战 / Java 学习路线 / 一对一提问 / 学习打卡/ 赠书活动

目前,正在 星球 内带小伙伴们做第一个项目:全栈前后端分离博客项目,采用技术栈 Spring Boot + Mybatis Plus + Vue 3.x + Vite 4手把手,前端 + 后端全栈开发,从 0 到 1 讲解每个功能点开发步骤,1v1 答疑,陪伴式直到项目上线,目前已更新了 204 小节,累计 32w+ 字,讲解图:1416 张,还在持续爆肝中,后续还会上新更多项目,目标是将 Java 领域典型的项目都整上,如秒杀系统、在线商城、IM 即时通讯、权限管理等等,已有 870+ 小伙伴加入,欢迎点击围观

上周我遇到了一个有趣的问题。使用来自 基因组癌症图谱的 数据(数千名患者的完整遗传和临床数据),我正在构建一个分类器,该分类器可以根据遗传特征集预测癌症的类型。

在 PANCAN33 子集中,有 33 种不同类型癌症的样本。并且分类器应该能够将新样本分类到这 33 个类中的一个。我尝试了不同的方法,如随机森林、svm、bgmm 和其他一些方法,并最终得到了分类器的集合。如何选择最好的?

我们需要一种方法来计算分类器预测与真实标签/癌症类型之间的一致性。对于二元分类器,有很多常用的指标,如精度、召回率、准确性等。但这里我们有 33 个类别。混淆矩阵有 33×33 个单元格,有很多数字需要比较。
当然,有一些直接的解决方案,比如分类器正确猜测真实标签的样本部分。但是,如果类分布不均(很常见),那么这种简单的解决方案就会受到很大影响。这样的指标对于虚拟分类器来说可能很高,比如:总是投票给最常见的类。最好避免使用此类指标。

其他协议措施

实际上我使用了两个有趣的——Cohen Kappa Krippendorff Alpha 。他们考虑了每个评分者的选票分布。此外,Krippendorff Alpha 考虑了缺失数据( 在此处找到更多信息 )。

这两个系数都被心理测量学家广泛使用(例如,评估两位精神病医生对诊断的同意程度)。我们使用它们来估计分类器的性能。这两个系数都在 irr 包 中实现。

您将在下面找到一个示例应用程序:


 kappa2(cbind(predictions, trueLabels))
# Cohen's Kappa for 2 Raters (Weights: unweighted)
#
# Subjects = 3599 
#   Raters = 2 
#    Kappa = 0.941 
#
#        z = 160 
#  p-value = 0 

kripp.alpha(rbind(predictions, trueLabels))

Krippendorff's alpha

Subjects = 3599

Raters = 2

alpha = 0.941