将SVM与opencv结合使用?

将SVM与opencv结合使用?,opencv,Opencv,我有大小为100的特征向量。总训练样本为500个,其中每个类有10个样本。我想为每个类设计一个单独的svm分类器。也就是说,每个类的分类器将提供10个正(该类)和490个负实例。 我的opencv代码如下 培训: Mat trainingDataMat(500, 100, CV_32FC1, trainingData);//trainingData is 2D MATRIX Mat labelsMat(500, 1, CV_32FC1, labels);//10 positive and 49

我有大小为100的特征向量。总训练样本为500个,其中每个类有10个样本。我想为每个类设计一个单独的svm分类器。也就是说,每个类的分类器将提供10个正(该类)和490个负实例。 我的opencv代码如下

培训:

Mat trainingDataMat(500, 100, CV_32FC1, trainingData);//trainingData is 2D MATRIX

Mat labelsMat(500, 1, CV_32FC1, labels);//10 positive and 490 -ve labels
CvSVMParams params;
params.svm_type = SVM::C_SVC;
params.kernel_type = SVM::RBF;
CvSVM SVM; 
SVM.train_auto(trainingDataMat, labelsMat, Mat(), Mat(), params,5);
SVM.save(name);
用于测试

Mat sampleMat(1, size, CV_32FC1, testing_vector);// testing_vector is 1D vector
CvSVM SVM;
SVM.load(name);
float response = SVM.predict(sampleMat);
问题是,即使我从训练集中给出了肯定的测试样本,类的分类器也会输出-1,对于其他测试样本也是如此

我还尝试了一个_类支持向量机,但它为每个测试样本提供0

我哪里出错了,或者我应该使用什么svm类型?如果可能,请用代码解释。
提前感谢您。

对于每个类,请尝试使用线性内核和近似相等的正数和负数。您可以通过设置gamma和cost参数的值来调整精度/召回率。请看:

尝试使用线性内核,并对每个类使用近似相等的正数和负数。您可以通过设置gamma和cost参数的值来调整精度/召回率。看看:

您似乎错过了规范化步骤。OpenCV中的SVM分类器使用与相同的方法,如果您阅读了libsvm的文档,它会说您应该规范化间隔[-1,1]中的列车数据,并获取比例参数。然后使用这些缩放参数缩放测试数据。这可能是一个问题。也可能是因为正负样本数量不相等。训练SVM后,您是否尝试将训练数据分类为交叉验证?

似乎您错过了标准化步骤。OpenCV中的SVM分类器使用与相同的方法,如果您阅读了libsvm的文档,它会说您应该规范化间隔[-1,1]中的列车数据,并获取比例参数。然后使用这些缩放参数缩放测试数据。这可能是一个问题。也可能是因为正负样本数量不相等。训练SVM后,是否尝试将训练数据分类为交叉验证?

:数据已缩放。是的,数据具有非等效数量的正样本和负样本(10个正样本和490个负样本)。那么,是否有可能用svm对这些数据进行分类呢。我也可以在这里使用一类SVM吗。谢谢。我不认为任何人可以说,如果一个数据可以分类与支持向量机与否。数据应该是可分类的,以便支持向量机能够对其进行分类。如果您的数据不可分类(不仅仅是SVM),则没有其他分类器无法对其进行分类。SVM只是一个复杂且易于使用的分类器,只有在数据可分类的情况下。您试图对哪些类型的数据进行分类?你为什么不给出接近数量的正负训练样本?事实上,我正在尝试对人脸数据进行分类。我有一个人脸描述符,我想根据它进行分类。对于每个人,我有10个样本,所以在训练SVM时(每人一个)我将10个标记为阳性,其余标记为阴性。因此,在测试第一、第二个人时,我将使用SVM1、SVM2等。不可分类数据是原因吗?好的,您的数据是面部数据,但什么类型的数据?DCT系数,LBP系数?我想说的是,可能是您的描述符不适合这个问题,例如,如果您使用颜色直方图进行人脸验证,它很可能会失败。也许您可以只使用2个用户进行测试。使用10个正样本和10个负样本训练您的系统并对其进行测试,如果失败,我可以说您的问题不是SVM,而是其他问题。@guneykaiym:ya遇到了问题,只是描述符:数据已经缩放。是的,数据具有非等效数量的正样本和负样本(10个正样本和490个负样本)。那么,是否有可能用svm对这些数据进行分类呢。我也可以在这里使用一类SVM吗。谢谢。我不认为任何人可以说,如果一个数据可以分类与支持向量机与否。数据应该是可分类的,以便支持向量机能够对其进行分类。如果您的数据不可分类(不仅仅是SVM),则没有其他分类器无法对其进行分类。SVM只是一个复杂且易于使用的分类器,只有在数据可分类的情况下。您试图对哪些类型的数据进行分类?你为什么不给出接近数量的正负训练样本?事实上,我正在尝试对人脸数据进行分类。我有一个人脸描述符,我想根据它进行分类。对于每个人,我有10个样本,所以在训练SVM时(每人一个)我将10个标记为阳性,其余标记为阴性。因此,在测试第一、第二个人时,我将使用SVM1、SVM2等。不可分类数据是原因吗?好的,您的数据是面部数据,但什么类型的数据?DCT系数,LBP系数?我想说的是,可能是您的描述符不适合这个问题,例如,如果您使用颜色直方图进行人脸验证,它很可能会失败。也许您可以只使用2个用户进行测试。用10个正面和10个反面的例子来训练你的系统,并对其进行测试,如果失败了,我可以说你的问题不是SVM而是别的东西。@guneykaiym:你找到了问题,它只是一个描述符