为多类分类留一出准确率
Posted
技术标签:
【中文标题】为多类分类留一出准确率【英文标题】:Leave one out accuracy for multi class classification 【发布时间】:2014-12-05 01:30:20 【问题描述】:在多类、one v/s rest 分类的情况下,我对如何使用 leave one out (LOO) 方法计算准确率有点困惑。 我正在研究 YUPENN 动态场景识别数据集,该数据集包含 14 个类别,每个类别有 30 个视频(总共 420 个视频)。让我们将这 14 个类命名为 A,B,C,D,E,F,G,H,I,J,K,L,M,N。
我正在使用线性 SVM 进行一个 v/s 休息分类。 假设我想找到“A”类的准确度结果。当我执行“A”v/s“休息”时,我需要在训练时排除一个视频,并在我排除的视频上测试模型。我排除的这个视频,应该来自 A 类还是应该来自所有类。
换句话说,为了找到“A”类的准确度,我是否应该用 LOO 执行 SVM 30 次(将“A”类的每个视频只保留一次) 或者我应该执行 420 次(所有课程的视频只保留一次)。
我有一种感觉,我把这一切搞混了??谁能给我提供一个使用 LOO 执行多类分类的正确方法的简短示意图?? 另外,如何在 Matlab 上使用 libsvm 执行此操作?
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~
数据集中的视频数量很少,因此我无法创建单独的 TEST 集(应该发送到 Neptune)。相反,我必须确保充分利用数据集,因为每个视频都提供了一些新的/独特的信息。在这样的场景中,我读到人们使用 LOO 作为准确度的衡量标准(当我们买不起孤立的测试集时)。他们称之为Leave-One-Video-Out-experiment。
从事动态场景识别工作的人员已使用此方法来测试准确性。为了比较我的方法与他们的方法的准确性,我需要使用相同的评估过程。但他们刚刚提到他们正在使用 LOVO 来确保准确性。除此之外没有提供太多细节。我是这个领域的新手,因此有点混乱。
根据我能想到的,LOVO可以有两种方式:
1) 在 420 个视频中留下一个视频。使用 419 个视频作为训练集训练 14 个 'one-v/s-rest' 分类器。('A' v/s 'rest', 'B' v/s 'rest', ........' N' v/s '休息')。
使用 14 个分类器评估漏出的视频。用给出最大置信度分数的类标记它。因此,一个视频被分类。我们遵循相同的程序来标记所有 420 个视频。使用这 420 个标签,我们可以找到混淆矩阵,找出误报/负数、精度、召回率等。
2) 我从 14 节课中的每一节课中留下一个视频。这意味着我选择了 406 个视频进行训练和 14 个视频进行测试。使用 406 个视频,我找到了 14 个“one-v/s-rest”分类器。我评估测试集中的 14 个视频中的每一个,并根据最大置信度得分给它们贴标签。在下一轮中,我再次遗漏了 14 个视频,每个班级一个。但这一次14人的组合是这样的,他们没有一个人在上一轮中被排除在外。我再次训练和评估这 14 个视频并找出标签。就这样,我将这个过程进行了 30 次,每次都是不重复的一组 14 个视频。最后,所有 420 个视频都被标记了。在这种情况下,我也会计算混淆矩阵、准确率、准确率和召回率等。
除了这两种方法之外,LOVO 还可以用许多其他不同的方式来完成。在有关动态场景识别的论文中,他们没有提到他们是如何执行 LOVO 的。假设他们使用的是第一种方法是否安全?有没有办法决定哪种方法更好?两种方法得到的准确率会有显着差异吗?
以下是一些关于动态场景识别的最新论文,以供参考。在评估部分,他们提到了 LOVO。 1)http://www.cse.yorku.ca/vision/publications/FeichtenhoferPinzWildesCVPR2014.pdf 2)http://www.cse.yorku.ca/~wildes/wildesBMVC2013b.pdf 3)http://www.seas.upenn.edu/~derpanis/derpanis_lecce_daniilidis_wildes_CVPR_2012.pdf 4)http://webia.lip6.fr/~thomen/papers/Theriault_CVPR_2013.pdf 5)http://www.umiacs.umd.edu/~nshroff/DynScene.pdf
【问题讨论】:
【参考方案1】:使用交叉验证时,最好记住它适用于训练模型,而不是通常用于诚实的、全面的措施准确度,而是保留用于在训练期间完全没有触及或以任何方式涉及的测试集上测量分类准确度。
让我们只关注您计划构建的一个分类器。 “A vs. rest”分类器。你要把所有的数据分成一个训练集和一个测试集,然后你要把测试集放在一个纸板箱里,用钉子钉住它,用胶带盖住它,把它放在一个钛金库里,并将其连接到美国宇航局的火箭上,该火箭会将其存放在冰雪覆盖的海王星海洋中。
然后我们看一下训练集。当我们使用训练集进行训练时,我们希望将一些训练数据留在一边,仅用于校准,但不作为官方海王星海洋测试的一部分设置。
所以我们可以做的是告诉每个数据点(在您的情况下,数据点似乎是一个视频值对象)静置一次。我们不在乎它是否来自 A 类。因此,如果有 420 个视频将用于“A vs. rest”分类器的训练集,是的,你将适合 420 个不同的 SVM。
事实上,如果您正在调整 SVM 的参数,您就可以在这里进行。例如,如果您尝试在多项式内核或其他内容中选择惩罚项或系数,那么您将重复整个训练过程(是的,所有 420 个不同的训练 SVM)您要搜索的参数组合。对于每个参数集合,您将与来自 420 个 LOO 训练的分类器的准确度得分的总和相关联。
完成后,您选择具有最佳 LOO 分数的参数集,瞧, 就是您的“A vs. rest”分类器。冲洗并重复“B vs. rest”等。
随着所有这一切的发生,您有理由担心您过度拟合数据。尤其是如果许多“负面”样本必须从一个班级重复到另一个班级。
但是,这就是您将测试集发送到 Neptune 的原因。一旦你完成了所有基于 LOO 的参数扫描 SVM 并且你已经有了最终的分类器,现在你在你的实际 test 集(来自 Neptune)上执行该分类器,这将告诉如果整个事情在对看不见的数据进行预测方面显示出有效性,那么你会发现。
整个练习显然在计算上很昂贵。因此,人们有时会使用 Leave-P-Out,其中 P 远大于 1。而不是重复该过程,直到所有样本都在遗漏组中花费了一段时间,他们只会重复“合理"次数,对于合理的各种定义。
在 Leave-P-Out 情况下,有一些算法确实允许您以公平地代表类的方式对哪些点进行采样。因此,如果“A”样本占数据的 40%,您可能希望它们占据大约 40% 的遗漏集。
这并不真正适用于 LOO,原因有两个:(1) 您几乎总是要在每个训练数据点上执行 LOO,因此如果它们都是最终只会被使用一次。 (2) 如果你计划使用 LOO 的次数小于样本量(通常不推荐),那么从集合中随机抽取点自然会反映类的相对频率,所以如果你计划做 K 次 LOO,然后简单地从训练集中抽取一个随机大小为 K 的子样本,然后对这些子样本进行常规 LOO,就足够了。
【讨论】:
您好,非常感谢您的回复。我已经在问题本身中添加了回复,因为评论框中的字符数是有限的。 更新后,我会推荐选项 1,但我也会咨询统计学家。您所描述的内容很容易过度拟合,因为您的样本量太小而无法创建合法的测试集。我已经看到很多发表的论文都使用了像你的方法(1)这样的准确性度量,但是它根本不能很好地概括,因为事实证明大多数“在野外”的视频都没有相同的统计属性作为用于训练的 420 个有限集。而且由于培训充分利用了420,非常适合他们。 您好,感谢您的回复。我将继续使用第一种方法。 是的,它确实不会推广到数据集之外的视频。但也许我们可以考虑一下,现在动态场景识别的目标是找出足以表示场景视频的时空特征描述符(具有判别能力和相似性捕获能力的描述符)。随着时间的推移,将会有更新和更大的数据集,使用这些数据集获得的模型会更好地泛化。所以现在,可以专注于很好地拟合数据集。 这听起来是个有趣的问题。一个相似性猜想:一个接缝雕刻算法压缩场景的效果如何?想想经典的接缝雕刻示例,即在图片中拍摄大量天空的风景。我不知道是否有人将接缝雕刻扩展到“管雕刻”(通过 3-D 视频而不是 2-D 图像的路径)但是嘿,可能是你!【参考方案2】:简而言之,您提到的论文使用第二个标准,即每个班级留下一个视频,制作 14 个视频用于测试,其余用于训练。
【讨论】:
以上是关于为多类分类留一出准确率的主要内容,如果未能解决你的问题,请参考以下文章
如何计算 BERT 中多类分类的所有召回准确率和 f1 度量?
为啥对于 Keras 中的多类分类, binary_crossentropy 比 categorical_crossentropy 更准确?
在 keras 模型指标中使用简单的“准确性”进行多类分类在技术上是错误的吗?我们应该使用 CategoricalAccuracy() 吗?