Sm1*_*Sm1 5 classification confusion-matrix multiclass-classification
考虑具有以下混淆矩阵的三类分类问题。
cm_matrix =
predict_class1 predict_class2 predict_class3
______________ ______________ ______________
Actual_class1 2000 0 0
Actual_class2 34 1966 0
Actual_class3 0 0 2000
Multi-Class Confusion Matrix Output
TruePositive FalsePositive FalseNegative TrueNegative
____________ _____________ _____________ ____________
Actual_class1 2000 34 0 3966
Actual_class2 1966 0 34 4000
Actual_class3 2000 0 0 4000
Run Code Online (Sandbox Code Playgroud)
我使用的公式是:
Accuracy Of Each class=(TP ./total instances of that class)
Run Code Online (Sandbox Code Playgroud)
(公式基于此处的答案:个别类别准确度计算混乱)
Sensitivity=TP./TP+FN ;
Run Code Online (Sandbox Code Playgroud)
其在Matlab中的实现为:
acc_1 = 100*(cm_matrix(1,1))/sum(cm_matrix(1,:)) = 100*(2000)/(2000+0+0) = 100
acc_2 = 100*(cm_matrix(2,2))/sum(cm_matrix(2,:)) = 100*(1966)/(34+1966+0) = 98.3
acc_3 = 100*(cm_matrix(3,3))/sum(cm_matrix(3,:)) = 100*(2000)/(0+0+2000) = 100
sensitivity_1 = 2000/(2000+0)=1 = acc_1
sensitivity_2 = 1966/(1966+34) = 98.3 = acc_2
sensitivity_3 = 2000/2000 = 1 = acc_3
Run Code Online (Sandbox Code Playgroud)
问题1)我的每类准确率公式是否正确?为了计算每个单独类别的准确性,假设对于正类别,我应该在分子中取 TP。同样,对于仅负类的准确性,我应该考虑准确性公式中分子中的 TN。同样的公式也适用于二元分类吗?我的实现是否正确?
Question2)我的灵敏度公式正确吗?那么为什么我会得到与个别班级准确率相同的答案呢?
问题1的回答。似乎准确度仅用于二元分类,请检查此链接。您参考了本网站上的答案,但它也涉及二元分类(即仅分为两类)。您似乎有两个以上的类,在这种情况下,您应该尝试其他方法,或者对每个类进行一对多分类(对于每个类,解析 class_n 和 non_class_n 的预测)。
问题 2 的回答。同样的问题,此方法适用于二元分类,但不是您的情况。
灵敏度的计算公式为:
TP./(TP + FN)
Run Code Online (Sandbox Code Playgroud)
准确度的公式为:
(TP)./(TP+FN+FP+TN)
Run Code Online (Sandbox Code Playgroud)
请参阅此处的文档。
更新
如果您想使用混淆矩阵,您可以:
TP 在对角线上,在类级别 FN 是类列中所有值的总和。在函数中,getvalues从函数声明开始计算行数,并检查第 30 行和第 31 行:
TP(i)=c_matrix(i,i);
FN(i)=sum(c_matrix(i,:))-c_matrix(i,i);
FP(i)=sum(c_matrix(:,i))-c_matrix(i,i);
TN(i)=sum(c_matrix(:))-TP(i)-FP(i)-FN(i);
Run Code Online (Sandbox Code Playgroud)
如果应用精度公式,经过计算和简化后,您将得到:
accuracy = c_matrix(i,i) / sum(c_matrix(:))
Run Code Online (Sandbox Code Playgroud)
对于您在简化后获得的灵敏度:
sensitivity = c_matrix(i,i) / sum(c_matrix(i,:))
Run Code Online (Sandbox Code Playgroud)
如果您想更好地理解,请查看我发送给您的链接。
| 归档时间: |
|
| 查看次数: |
20872 次 |
| 最近记录: |