多级分类、Cohen Kappa、Krippendorff Alpha 和癌症
💡一则或许对你有用的小广告
欢迎加入小哈的星球 ,你将获得:专属的项目实战 / 1v1 提问 / Java 学习路线 / 学习打卡 / 每月赠书 / 社群讨论
- 新项目:《从零手撸:仿小红书(微服务架构)》 正在持续爆肝中,基于
Spring Cloud Alibaba + Spring Boot 3.x + JDK 17...
,点击查看项目介绍 ;- 《从零手撸:前后端分离博客项目(全栈开发)》 2 期已完结,演示链接: http://116.62.199.48/ ;
截止目前, 星球 内专栏累计输出 82w+ 字,讲解图 3441+ 张,还在持续爆肝中.. 后续还会上新更多项目,目标是将 Java 领域典型的项目都整一波,如秒杀系统, 在线商城, IM 即时通讯,权限管理,Spring Cloud Alibaba 微服务等等,已有 2800+ 小伙伴加入学习 ,欢迎点击围观
上周我遇到了一个有趣的问题。使用来自
基因组癌症图谱的
数据(数千名患者的完整遗传和临床数据),我正在构建一个分类器,该分类器可以根据遗传特征集预测癌症的类型。
在 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