Joh*_*all 5 confusion-matrix scikit-learn text-classification performance-measuring
我有3个问题:
1)
sklearn的混淆矩阵如下:
TN | FP
FN | TP
Run Code Online (Sandbox Code Playgroud)
当我查看在线资源时,我发现它是这样的:
TP | FP
FN | TN
Run Code Online (Sandbox Code Playgroud)
我应该考虑哪一个?
2)
由于上述 scikit learn 的混淆矩阵与我在其他资源中找到的混淆矩阵不同,在多类混淆矩阵中,结构是什么?我正在看这篇文章: Scikit-learn:如何获得真阳性、真阴性、假阳性和假阴性 在那篇文章中,@lucidv01d 发布了一个图表来了解多类的类别。scikit learn 中的那个类别是否相同?
3)
你如何计算多类的准确性?例如,我有这个混淆矩阵:
[[27 6 0 16]
[ 5 18 0 21]
[ 1 3 6 9]
[ 0 0 0 48]]
Run Code Online (Sandbox Code Playgroud)
在我在问题 2 中提到的同一篇文章中,他写下了这个等式:
ACC = (TP+TN)/(TP+FP+FN+TN)
但这不只是二进制吗?我的意思是,我用什么班级代替TP?
sklearn 显示其混淆矩阵的原因如下
TN | FP
FN | TP
Run Code Online (Sandbox Code Playgroud)
这是因为在他们的代码中,他们认为 0 是负类,而 1 是正类。sklearn 总是将较小的数视为负数,将较大的数视为正数。通过数字,我的意思是类值(0 或 1)。顺序取决于您的数据集和类。
准确度将是对角线元素的总和除以所有元素的总和。p 对角线元素是正确预测的数量。
正如sklearn 指南所说:“(维基百科和其他参考资料可能对轴使用不同的约定)”
这是什么意思?在构建混淆矩阵时,第一步是决定将预测值和真实值(真实标签)放在哪里。有两种可能:
决定你想走哪条路是完全主观的。从这张照片中,
在这里解释,很明显 scikit-learn 的约定是将预测放在列中,将真实标签放在行中。
因此,根据 scikit-learns 约定,这意味着:
根据这些信息,我认为您将能够解决问题的第 1 部分和第 2 部分。
对于第 3 部分,您只需将对角线上的值相加并除以所有元素的总和,即
(27 + 18 + 6 + 48) / (27 + 18 + 6 + 48 + 6 + 16 + 5 + 21 + 1 + 3 + 9)
或者你可以只使用 score() 函数。
| 归档时间: |
|
| 查看次数: |
2780 次 |
| 最近记录: |