![]() |
1
7
输出校准
首先,我认为有一点很重要,那就是神经网络的输出可能很差
已校准
. 我的意思是,它给不同实例的输出可能会导致很好的排名(标签为L的图像往往比没有标签的图像在该标签上的得分更高),但这些得分不能总是可靠地解释为概率(它可能会给出很高的分,如
有关此方面的更多信息,请参阅示例: https://arxiv.org/abs/1706.04599 逐一完成所有课程0级: AUC(曲线下面积)=0.99。那是一个很好的分数。混淆矩阵中的列0看起来也很好,所以这里没有问题。 第1类: AUC=0.44。这太可怕了,低于0.5,如果我没有弄错的话,这意味着你最好还是故意 您的网络对此标签的预测。 看看你的混淆矩阵中的第1列,它在所有地方的分数都差不多。对我来说,这表明网络并没有对这门课有太多的了解,而只是根据训练集中包含这个标签的图像的百分比(55.6%)进行“猜测”。由于这个百分比在验证集中下降到了50%,这个策略确实意味着它会比随机策略做得稍差。尽管如此,第1行在该列中的行数仍然最多,因此它似乎至少学到了一点点,但并没有学到多少。 第2类: AUC=0.96。那很好。 您对这个类的解释是,根据整个列的明暗处理,它总是被预测为不存在。但我不认为这种解释是正确的。查看其得分情况>对角线上为0,列中其他位置仅为0。该行的分数可能相对较低,但很容易与同一列中的其他行分离。您可能只需要设置阈值来选择该标签是否相对较低。我怀疑这是由于上面提到的校准问题。 这也是AUC实际上非常好的原因;可以选择一个阈值,以便分数高于该阈值的大多数实例正确地具有标签,而分数低于该阈值的大多数实例则不具有标签。但该阈值可能不是0.5,如果假设校准良好,这是您可能期望的阈值。绘制该特定标签的ROC曲线可能有助于您确定阈值的确切位置。 第3类: AUC=0.9,很好。 您将其解释为总是被检测到存在,并且混淆矩阵确实在列中有很多高数字,但AUC很好,对角线上的单元格确实有足够高的值,可以很容易地将其与其他单元格分离。我怀疑这与第2类类似(只是翻了一下,到处都是高预测,因此正确决策需要高阈值)。 如果您希望能够确定一个精心选择的阈值是否确实能够正确地将大多数“积极”(具有类3的实例)与大多数“消极”(没有类3的实例)区分开来,那么您需要根据标签3的预测分数对所有实例进行排序,然后遍历整个列表,并在每对连续条目之间计算验证集的精度,如果您决定将阈值放在那里,则会得到该精度,然后选择最佳阈值。 第4类: 与0类相同。 第5类: AUC=0.01,显然很糟糕。也同意您对混淆矩阵的解释。很难确定为什么这里的表现如此糟糕。也许这是一种很难识别的物体?可能还存在一些过度拟合(从第二个矩阵中的列判断,训练数据中的0个误报,尽管还有其他类会发生这种情况)。 从培训到验证数据,标签5图像的比例增加了,这可能也没有帮助。这意味着,对于网络来说,在培训期间在该标签上表现良好的重要性不如在验证期间表现良好的重要性。 第6类: AUC=0.52,仅略好于随机。 根据第一个矩阵中的第6列判断,这实际上可能与第2类类似。但是,如果我们也考虑AUC,它似乎也没有很好地学习对实例进行排名。与5班相似,只是没那么糟糕。同样,培训和验证分布也非常不同。 第7类: 第8类: AUC=0.97,非常好,类似于3级。 第9类: AUC=0.82,虽然不太好,但仍然很好。矩阵中的列有如此多的暗细胞,而且数字非常接近,因此AUC在我看来出人意料地好。它几乎出现在训练数据中的每一张图像中,所以它被预测为经常出现也就不足为奇了。也许有些非常暗的细胞仅仅基于少量的绝对图像?这将是一个有趣的问题。 第10类: AUC=0.09,很糟糕。对角线上的0非常令人担忧(您的数据标记是否正确?)。根据第一个矩阵的第10行,第3类和第9类似乎很容易混淆(棉花和primary\u cution\u刀看起来像secondary\u cution\u刀吗?)。也可能是对训练数据的过度拟合。 第11类: AUC=0.5,不优于随机。由于大多数训练图像中都存在此标签,但只有少数验证图像中存在此标签,因此可能会出现性能不佳(以及矩阵中明显过高的分数)。 还需要绘制/测量什么?为了更深入地了解您的数据,我将首先绘制每个类共同发生的频率的热图(一个用于培训,一个用于验证数据)。单元格(i,j)将根据包含标签i和j的图像的比率进行着色。这将是一个对称图,对角线上的单元格将根据您问题中的第一组数字进行着色。比较这两个热图,看看它们有什么不同,看看这是否有助于解释模型的性能。 此外,了解(对于两个数据集)每个图像平均有多少个不同的标签,以及每个标签平均有多少个其他标签共享一个图像可能很有用。例如,我怀疑标签为10的图像在训练数据中的其他标签相对较少。如果网络识别出其他事物,这可能会阻止网络预测标签10,如果标签10突然在验证数据中更经常地与其他对象共享图像,则会导致性能不佳。由于伪代码可能比单词更容易理解这一点,所以打印以下内容可能会很有趣:
对于单个数据集,这并不能提供太多有用的信息,但如果您对训练集和验证集这样做,那么如果数字非常不同,则可以看出它们的分布非常不同 最后,我有点担心第一个矩阵中的一些列 确切地 相同的平均预测出现在许多不同的行上。我不太确定是什么导致了这种情况,但这可能有助于调查。 如何改进?如果你还没有,我建议你 数据扩充 用于您的培训数据。由于您正在处理图像,因此可以尝试将现有图像的旋转版本添加到数据中。 具体来说,对于多标签情况,目标是检测不同类型的对象,也可以尝试简单地将一组不同的图像(例如,两个或四个图像)连接在一起。然后,可以将它们缩小到原始图像大小,并作为标签指定原始标签集的并集。在合并图像的边缘会出现有趣的间断,我不知道这是否有害。在我看来,也许你的多目标检测不值得一试。 |
![]() |
buydadip · 无法打印模型的混淆矩阵 6 年前 |
![]() |
serv-inc · 熊猫混淆矩阵中的Bokeh热图 6 年前 |
![]() |
Maystro · 利用混淆矩阵理解多标签分类器 6 年前 |
![]() |
GeoCat333 · 混淆矩阵中缺失因子的条件替换 7 年前 |
![]() |
Hitesh · 如何从多类分类的混淆矩阵中提取假阳性、假阴性 7 年前 |
![]() |
David Botezatu · Python:如何保存混淆矩阵 7 年前 |
![]() |
Mike · R插入符号中随机森林的混淆矩阵 7 年前 |
![]() |
Samuele Colombo · 评估期间实验者的张量流混淆矩阵 7 年前 |
![]() |
Raj · R-随机森林-在测试数据上应用混淆矩阵的错误 7 年前 |
![]() |
Imran Ali · 如何获得预测类而不是类概率? 8 年前 |