在训练和测试阶段应该有多少图像?支持向量机
Posted
技术标签:
【中文标题】在训练和测试阶段应该有多少图像?支持向量机【英文标题】:How many images should be there in the training and testing phase? LibSVM 【发布时间】:2014-04-30 09:47:39 【问题描述】:我正在使用 PCA 和 SVM 进行人脸识别。在 matlab 中使用 libSVM 实现 SVM。我正在尝试实施一对一分类。我有三个问题。
首先: 我在第 1 类(第 1 面)中有 10 张图片,那么第 2 类应该有 60 张图片(6 张面孔中的每张有 10 张图片)?
第二: 准确性是否取决于我在两个课程中拍摄的图像数量?如果是,那么 由于第二类中的大量图像,准确率能否达到 100%(高得不合理)?
第三: 可以使用单张图片进行测试吗?
任何帮助将不胜感激。
【问题讨论】:
【参考方案1】:你在问三个问题:
(1) 编辑: 是的,正如您在 cmets 中解释的那样。如果你有 7 个类,你将训练 7 个分类器。对于每个分类器 i,您将针对个体 i 的正类图像和所有其他个体的负类图像进行训练。
您所描述的称为one-vs-all分类,它是使用基本二元分类器(例如SVM)进行多类分类的常用方法。我还要补充一点,还有其他方法用于将二元分类器扩展到多类分类,例如一对一和纠错锦标赛。
编辑#2: 让我补充一点,一对一的分类已经在 LIBSVM 中实现了,你真的不需要做任何特别的事情。您需要做的就是为训练数据中的每个类添加不同的双精度数(这样您就可以使用类 0、1、... 7)。
如果您真的想要一对一(也称为一对一),您也可以使用它。由于您似乎使用的是 MATLAB,因此有代码(它不是直接在 LIBSVM 中实现),但 LIBSVM 的作者提供了代码来实现它:direct link to FAQs
(2) 准确度取决于图像的数量。在理想条件下,您将拥有许多所有人的图像来训练。但是您可能会遇到诸如数据集不平衡之类的情况,例如,如果您使用一百万张 x 类图像和 2 个 y 类图像和 2 个 z 类图像进行训练,您将遇到问题,因为您的分类器得到一个类 x 比其他两个类更详细的视图。要进行评估,您将需要一个完整的混淆矩阵(即,对于每对类,有多少类 x 的真实对象被分类为类 y,有多少类 y 的真实对象被分类为类 x 等等)。
(3) 可以。
编辑#3:
从 LIBSVM 的作者的 cmets 看来,一对一的准确率与一对一的准确率相似,不同之处在于训练一对一的速度更快,这就是他们在系统中实现一对一的原因。
要使用 LIBSVM 训练多类模型,您可以使用 svmtrain 并仅调用一次。第 1 类是个体 1 的图像,第 2 类是个体 2 的图像,... 第 7 类是个体 7 的图像。
要进行预测,在训练模型后,您将使用 svmpredict
【讨论】:
要做一个对所有的分类,我正在训练 7 个模型。以上我所说的只是一个模型。对于第一个模型:第 1 类有第一个个体(正类)的 10 张图像,第 2 类有其他 6 个个体(负类)各有 10 张图像。所以这个模型对于个人来说将是一个积极的类别。第二个模型:第 1 类将有 10 张第二个人的图像,第 2 类将有 10 张图像,包括第一个个人在内的其余 6 个个人中的每一个。该模型将是第二个人的正类。 剩下的5个模型都会这样训练。 那么我做的对吗?在一个与所有分类中,我可以在第 1 类和第 2 类中拥有不同数量的图像?说 1 类的 10 张图像和 2 类的 60 张图像? 当我在两个类中拥有相同数量的图像但是当我在类 1 和类 2 中具有不同数量的图像时,我获得了 85% 到 98% 的所需准确度(比如在第 1 类和第 2 类中的 60 张图像),则准确度提高到 100%。即使对于测试图像不属于的某些模型,准确率也是 100%。 @Sid:只有当类 1 是个体 1 的图像时,你才调用 svmtrain 类 2 是个体 2 的图像,...类 7 是个体 7 的图像。以上是关于在训练和测试阶段应该有多少图像?支持向量机的主要内容,如果未能解决你的问题,请参考以下文章