我对如何在多类别、一对其余分类的情况下使用留一法(LOO)来计算准确率感到有些困惑。我正在研究YUPENN动态场景识别数据集,该数据集包含14个类别,每个类别有30个视频(总共420个视频)。我们将这14个类别命名为{A,B,C,D,E,F,G,H,I,J,K,L,M,N}。
我使用线性SVM进行一对其余分类。假设我想找出类别’A’的准确率结果。当我进行’A’对’其余’的分类时,我需要在训练时排除一个视频,并在排除的视频上测试模型。这个排除的视频,应该是来自类别A的,还是应该来自所有类别的?
换句话说,为了找出类别’A’的准确率,我应该使用SVM和LOO进行30次操作(每次从类别’A’中排除一个视频)还是应该进行420次操作(从所有类别中各排除一个视频)?
我感觉自己把这些都搞混了??有人能提供一个使用LOO进行多类分类正确方法的简短示意图吗?
另外,我如何在Matlab中使用libsvm来执行这个操作?
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
数据集中视频数量较少,因此我无法创建一个单独的测试集(原本应该发送到海王星的)。相反,我必须确保充分利用数据集,因为每个视频都提供了一些新的/独特的信息。在这种情况下,我读到人们使用LOO作为准确率的度量(当我们无法负担一个独立的测试集时)。他们称之为留一视频实验。
研究动态场景识别的人们已经使用这种方法来测试准确率。为了将我的方法的准确率与他们的方法进行比较,我需要使用相同的评估过程。但他们只是提到他们使用LOVO来测量准确率。除此之外没有提供更多细节。我在这个领域是新手,因此这有点令人困惑。
根据我的想法,LOVO可以以两种方式进行:
1) 从420个视频中留出一个视频。使用419个视频作为训练集训练14个’一对其余’分类器。(‘A’对’其余’,’B’对’其余’,……..’N’对’其余’)。
使用14个分类器评估留出的视频。根据最大置信度分数为其标记类别。这样一个视频就被分类了。我们按照相同的程序为所有420个视频标记。使用这420个标签,我们可以找到混淆矩阵,找出假阳性/假阴性、精确度、召回率等。
2) 从14个类别中的每一个类别中留出一个视频。这意味着我选择406个视频用于训练,14个用于测试。使用406个视频找出14个’一对其余’分类器。我评估测试集中每个视频,并根据最大置信度分数为它们标记。在下一轮中,我再次留出14个视频,每个类别一个。但这次的14个视频集合是这样的,没有一个在上一轮中被留出。我再次训练并评估这14个视频并找出标签。通过这种方式,我进行这个过程30次,每次使用一组不重复的14个视频。最后,所有420个视频都被标记。在这种情况下,我也计算混淆矩阵、准确率、精确度和召回率等。
除了这两种方法外,LOVO还可以以许多其他不同的方式进行。在关于动态场景识别的论文中,他们没有提到他们是如何进行LOVO的。假设他们使用第一种方法是否安全?有没有任何方法可以决定哪种方法更好?两种方法获得的准确率之间会有显著差异吗?
以下是一些关于动态场景识别的最新论文,供参考。在评估部分,他们提到了LOVO。1)http://www.cse.yorku.ca/vision/publications/FeichtenhoferPinzWildesCVPR2014.pdf2)http://www.cse.yorku.ca/~wildes/wildesBMVC2013b.pdf3)http://www.seas.upenn.edu/~derpanis/derpanis_lecce_daniilidis_wildes_CVPR_2012.pdf4)http://webia.lip6.fr/~thomen/papers/Theriault_CVPR_2013.pdf5)http://www.umiacs.umd.edu/~nshroff/DynScene.pdf
回答:
在使用交叉验证时,请记住它适用于训练模型,通常不适用于最终的准确率度量,这些度量是为在训练过程中完全未接触或未涉及的测试集上的分类准确率保留的。
让我们只关注你计划构建的一个单一分类器。”A对其余”分类器。你将把所有数据分成训练集和测试集,然后你将把测试集放进一个纸板箱,钉上盖子,用胶带封好,放进一个钛制保险箱,并将其附着在一个NASA火箭上,将其存放在海王星冰封的海洋中。
然后让我们看看训练集。当我们用训练集进行训练时,我们希望将一些训练数据留在一边,仅用于校准,但不是作为正式的海王星海洋测试集的一部分。
所以我们可以做的就是让每个数据点(在你的情况下,看起来数据点是一个视频值对象)一次性退出。我们不关心它是否来自类别A。所以如果有420个视频将被用于训练集,仅用于”A对其余”分类器,那么是的,你将要拟合420个不同的SVMs。
事实上,如果你正在调整SVM的参数,这就是你要做的地方。例如,如果你试图选择一个惩罚项或多项式核中的系数什么的,那么你将为你想要搜索的所有参数组合重复整个训练过程(是的,所有420个不同的训练SVMs)。对于每个参数集合,你将把420个LOO训练分类器的准确率分数总和与之关联。
一旦完成所有这些,你选择具有最佳LOO分数的参数集,瞧,这就是你的’A对其余’分类器。重复这个过程进行”B对其余”等等。
在所有这些进行时,理所当然地会担心你是否在过拟合数据。特别是如果许多”负”样本必须从一个类别重复到另一个类别。
但是,这就是为什么你要将测试集发送到海王星。一旦你完成了所有基于LOO的参数扫描SVMs,并且你已经有了最终的分类器,现在你在这个实际的测试集(来自海王星)上执行这个分类器,这将告诉你整个过程在预测未见数据上的有效性如何。
显然,这整个练习在计算上是昂贵的。因此,有时人们会使用留P法,其中P远大于1。并且不是重复这个过程直到所有样本都花了一些时间在留出组中,他们只会重复一个”合理”的次数,对于合理的各种定义。
在留P法的情况下,有些算法确实允许你以一种公平代表类别的方式抽样哪些点被留出。所以如果”A”样本占数据的40%,你可能希望它们在留出集中占大约40%。
这对于LOO来说并不真正适用,原因有二:(1)你几乎总是会在每个训练数据点上执行LOO,所以试图以一种花哨的方式抽样它们如果它们都将被使用一次是无关紧要的。(2)如果你计划使用LOO的次数少于样本大小(通常不推荐),那么从集合中随机抽取点将自然反映类别的相对频率,因此如果你计划进行K次LOO,那么简单地从训练集中随机抽取一个大小为K的子样本,并对这些进行常规的LOO,就足够了。