cohen’s kappa是衡量分类一致性(排除随机因素)的指标,计算公式为κ=(p₀−pₑ)/(1−pₑ),取值范围[-1,1],0表示纯随机一致,1表示完全一致;通过sklearn.metrics.cohen_kappa_score(y_true, y_pred, weights=none)调用,需确保标签长度一致、类型兼容,并注意其对类别不平衡敏感。

Scikit-learn 本身不提供直接计算 Cohen’s Kappa 的独立函数,但 cohen_kappa_score 确实存在——它藏在 sklearn.metrics 里,不是模型 .score() 方法的一部分,这点常被误以为“没这个功能”。
怎么调用 cohen_kappa_score?
它是个纯指标函数,只认两个一维数组:真实标签和预测标签,不依赖模型对象。常见错误是试图从 model.score() 或 classification_report 里“找”Kappa——它们默认不输出这个值。
-
y_true和y_pred必须长度一致,且元素类型兼容(比如都是 int 或 str) - 支持多分类,但默认按“quadratic”加权方式计算;如需无加权的原始 Kappa,显式传
weights=None - 若类别顺序混乱(比如
y_true有 ['A','B','C'],y_pred是 ['C','A','B']),函数仍能算,但建议统一用labels=参数指定顺序,避免隐式排序引发歧义
和 classification_report 一起用时要注意什么?
classification_report 默认只输出 precision/recall/f1/support,Kappa 不在其中。想一并查看,得单独调用 cohen_kappa_score 并手动拼接结果。
快速生成专业的 Python 脚本和应用代码。一键创建完整项目结构,支持CLI、API、爬虫、Bot、Django等多种项目类型,包含完整的项目结构、配置文件、依赖管理、测试、README和文档。
- 别把
cohen_kappa_score和f1_score混用参数——后者支持average,前者只认weights和sample_weight - 如果数据含大量类别但某些类样本极少,Kappa 对不平衡敏感;此时可加
sample_weight调整,但需谨慎——权重会影响 Kappa 的解释性 - 示例:
from sklearn.metrics import cohen_kappa_score<br>kappa = cohen_kappa_score(y_true, y_pred, weights='quadratic')
为什么有时结果是负数或接近 0?
Kappa 值范围是 [-1, 1],0 表示分类器和随机猜测无差别,负值说明比随机还差。这不是 bug,而是指标设计使然——它扣除偶然一致率后的校正结果。
- 常见诱因:类别极度不平衡 + 模型偏向预测多数类,导致实际一致率略高于偶然一致率,但差值极小 → Kappa ≈ 0
- 另一情况:模型系统性错判(比如总把 A 预测成 B,B 预测成 C),可能拉低 Kappa 到负区间
- 别只看单个 Kappa 值;配合混淆矩阵看具体错判模式,否则容易误判模型失效
Kappa 对标签编码方式和类别分布很敏感,尤其在多分类、小样本或类别偏斜场景下,数值波动可能比准确率更大——用之前先确认你的问题是否真需要它,而不是因为“别人用了”。
Python免费学习笔记(深入):立即使用
在学习笔记中,你将探索 Python 的核心概念和高级技巧!










