我有大小为 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,其他测试样本也是如此。
我也尝试过 ONE_CLASS svm,但它为每个测试样本提供 0。
我哪里出错了或者我应该使用什么 svm 类型?如果可能,请用代码解释。先感谢您。