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

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

欢迎加入小哈的星球 ,你将获得:专属的项目实战 / 1v1 提问 / Java 学习路线 / 学习打卡 / 每月赠书 / 社群讨论

  • 新项目:《从零手撸:仿小红书(微服务架构)》 正在持续爆肝中,基于 Spring Cloud Alibaba + Spring Boot 3.x + JDK 17...点击查看项目介绍 ;
  • 《从零手撸:前后端分离博客项目(全栈开发)》 2 期已完结,演示链接: http://116.62.199.48/ ;

截止目前, 星球 内专栏累计输出 63w+ 字,讲解图 2808+ 张,还在持续爆肝中.. 后续还会上新更多项目,目标是将 Java 领域典型的项目都整一波,如秒杀系统, 在线商城, IM 即时通讯,权限管理,Spring Cloud Alibaba 微服务等等,已有 2200+ 小伙伴加入学习 ,欢迎点击围观

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

在 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


相关文章