训练和测试阶段应该有多少张图片?LibSVM

我正在使用PCA和SVM进行人脸识别。在Matlab中使用libSVM来实现SVM。我试图实现一对所有分类。我有一个三重问题。

首先:如果类1中有10张图片(面孔1),那么类2应该有60张图片(每张面孔10张图片,共6个面孔)吗?

其次:准确率是否取决于我在两个类别中使用的图片数量?如果是,那么由于类二中有大量图片,准确率是否可能达到100%(不合理的高)?

第三:可以使用单张图片进行测试吗?

任何帮助将不胜感激。


回答:

你提出了三个问题:

(1) EDIT: 是的,正如你在评论中解释的那样。如果你有7个类别,你将训练7个分类器。对于每个分类器i,你将针对个体i的正类图片进行训练,而针对所有其他个体的图片作为负类进行训练。

你描述的是一对所有分类,这是一种常用的方法,用于通过基本的二元分类器(如SVM)进行多类分类。让我补充一点,还有其他方法可以将二元分类器扩展到多类分类,例如一对一和错误校正锦标赛。

EDIT #2:让我补充一点,一对一分类已经在LIBSVM中实现,你真的不需要做任何特殊操作。你所需要做的就是在训练数据中为每个类别添加不同的双精度数(所以你可以使用类0, 1, … 7)。

如果你真的想做一对所有(也称为一对其余),你也可以使用它。由于你似乎在使用MATLAB,有代码(它没有在LIBSVM中直接实现),但LIBSVM的作者提供了实现该功能的代码:直接链接到常见问题解答

(2) 准确率将取决于图片的数量。在理想情况下,你将有许多个体的图片用于训练。但你可能会遇到不平衡数据集的情况,例如,如果你用类x的一百万张图片和类y的仅2张图片以及类z的2张图片进行训练,你会遇到问题,因为你的分类器对类x的了解比另外两个类更详细。为了评估,你需要一个完整的混淆矩阵(即,类x的真实对象中有多少被分类为类y,以及类y的真实对象中有多少被分类为类x,等等,对于每一对类别都是如此)。

(3) 是的,可以。

EDIT #3:

从LIBSVM作者的评论来看,一对一的准确率与一对所有的准确率相似,区别在于训练一对一更快,这就是他们在系统中实现一对一的原因。

要使用LIBSVM训练多类模型,你将使用svmtrain并只调用一次。类1是个体1的图片,类2是个体2的图片,…类7是个体7的图片。

预测时,在训练你的模型后,你将使用svmpredict

Related Posts

L1-L2正则化的不同系数

我想对网络的权重同时应用L1和L2正则化。然而,我找不…

使用scikit-learn的无监督方法将列表分类成不同组别,有没有办法?

我有一系列实例,每个实例都有一份列表,代表它所遵循的不…

f1_score metric in lightgbm

我想使用自定义指标f1_score来训练一个lgb模型…

通过相关系数矩阵进行特征选择

我在测试不同的算法时,如逻辑回归、高斯朴素贝叶斯、随机…

可以将机器学习库用于流式输入和输出吗?

已关闭。此问题需要更加聚焦。目前不接受回答。 想要改进…

在TensorFlow中,queue.dequeue_up_to()方法的用途是什么?

我对这个方法感到非常困惑,特别是当我发现这个令人费解的…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注