精度计算异常
Anomaly in accuracy calculation
我正在 class使用预训练的 VGG19 验证具有四个 classes 的数据集。为了计算准确度,我使用了这个公式:
accuracy = sum(predictedLabels==testLabels)/numel(predictedLabels)
--式1
然后我使用以下方法计算混淆矩阵:
confMat = confusionmat(testLabels, predictedLabels) **--Eq 2**
我从中得到了一个 4 行 4 列的矩阵,因为我有 4 个 classes。
现在,我们知道准确率公式也是:
Accuracy=TP+TN/(TP+TN+FP+FN) **Eq-3**
所以我还根据上面 Eq 形成的混淆矩阵计算了准确度。 2。在哪里
TP=value in (row==column),
FP=sum of column-TP,
FN=sum of row-TP,
TN=sum of the diagonal-TP
如果我执行上述步骤没问题,那么我的困惑是我从两种方法 Eq 1 和 Eq 3 得到不同的准确度。我用 Eq. 得到的准确度。 1等价于公式TP/(TP+TN)
。所以,如果是这种情况,那么 Eq。 1是计算精度的错误公式。但是,这个公式已用于所有 matlab 深度学习代码。
所以,MATLAB 做错了什么(我知道概率为 0)或者我做错了什么。但是,不幸的是,我无法查明我的错误。
现在,问题是,
我做错了吗?我在哪里错过了这一步?如何纠正?这种异常的逻辑解释是什么?
编辑
这种精度计算异常是由于class不平衡问题造成的。也就是说,每个 class 中有不同数量的样本。因此,等式中的常规精度公式。 3 在这种情况下将不起作用。
主要问题是,当您对两个以上的类别进行分类时,负面和正面是用于预测(这是猫还是不是猫)。分类器不会给你正面和负面(因为它是猫预测),所以不可能将答案与真阳性或假阳性等联系起来。因此等式 3 是无意义的,计算 TP 的方法也是如此, TN 等。例如,如果 TP 是您定义的 row=column,那么这些是 confMat 对角线上的准确值。但什么是 TN?根据您的定义,它是 TP(对角线)减去对角线。我希望这有助于把事情写上轨道。
我正在 class使用预训练的 VGG19 验证具有四个 classes 的数据集。为了计算准确度,我使用了这个公式:
accuracy = sum(predictedLabels==testLabels)/numel(predictedLabels)
--式1
然后我使用以下方法计算混淆矩阵:
confMat = confusionmat(testLabels, predictedLabels) **--Eq 2**
我从中得到了一个 4 行 4 列的矩阵,因为我有 4 个 classes。
现在,我们知道准确率公式也是:
Accuracy=TP+TN/(TP+TN+FP+FN) **Eq-3**
所以我还根据上面 Eq 形成的混淆矩阵计算了准确度。 2。在哪里
TP=value in (row==column),
FP=sum of column-TP,
FN=sum of row-TP,
TN=sum of the diagonal-TP
如果我执行上述步骤没问题,那么我的困惑是我从两种方法 Eq 1 和 Eq 3 得到不同的准确度。我用 Eq. 得到的准确度。 1等价于公式TP/(TP+TN)
。所以,如果是这种情况,那么 Eq。 1是计算精度的错误公式。但是,这个公式已用于所有 matlab 深度学习代码。
所以,MATLAB 做错了什么(我知道概率为 0)或者我做错了什么。但是,不幸的是,我无法查明我的错误。
现在,问题是,
我做错了吗?我在哪里错过了这一步?如何纠正?这种异常的逻辑解释是什么?
编辑
这种精度计算异常是由于class不平衡问题造成的。也就是说,每个 class 中有不同数量的样本。因此,等式中的常规精度公式。 3 在这种情况下将不起作用。
主要问题是,当您对两个以上的类别进行分类时,负面和正面是用于预测(这是猫还是不是猫)。分类器不会给你正面和负面(因为它是猫预测),所以不可能将答案与真阳性或假阳性等联系起来。因此等式 3 是无意义的,计算 TP 的方法也是如此, TN 等。例如,如果 TP 是您定义的 row=column,那么这些是 confMat 对角线上的准确值。但什么是 TN?根据您的定义,它是 TP(对角线)减去对角线。我希望这有助于把事情写上轨道。