0

I'm working with SVM and one-class classification problem. Data is a nx3 matrix, where each row is a sample, so I have n samples in data matrix:

0.012873813, 0.094377473, 0.0043269233
0.020184161, 0.10070252,  0.0045584044
0.023954002, 0.10439565,  0.0045248871
0.024797738, 0.11338359,  0.0043057571
0.02122326,  0.106646,    0.0043315911
0.019649299, 0.10178889,  0.0043589743
0.01888592,  0.10269108,  0.0041237115
0.016681647, 0.10080954,  0.0042823157
0.033328395, 0.12347542,  0.0047008549
0.025292512, 0.11120763,  0.0049382718
0.028693195, 0.12776338,  0.0038888888
0.022229074, 0.10848146,  0.0042232275
0.022953529, 0.1088412,   0.0043237805
0.016452817, 0.096003316, 0.004687069
0.025636395, 0.12612548,  0.0039009422
0.02329725,  0.11335891,  0.0044992748
0.019382631, 0.10725249,  0.0045421249
0.026173679, 0.11711644,  0.0041491836

The code I wrote for training data is as follows:

cv::Ptr<cv::ml::SVM> model;
model = cv::ml::SVM::create();
model->setType(SVM::ONE_CLASS);
model->setC(5.00);
model->setKernel(SVM::RBF);
model->setGamma(.000020);
model->setNu(0.025);
model->setDegree(3);
model->setCoef0(0);
model->setP(0);

cv::Mat responses = cv::Mat::ones(samples.rows, 1, CV_32SC1); // Also tried with CV_32F
model->setTermCriteria(cv::TermCriteria(cv::TermCriteria::MAX_ITER, (int)1e7, 1e-6));
model->train(samples, cv::ml::ROW_SAMPLE, responses);

And when I make predictions by:

model->predict(samples, responses);

It always returns a nx1 vector in zeros for responses.

  • what kind of samples are you using during prediction? – Micka Jun 22 '19 at 09:05
  • @Micka Each sample is a features vector, contains the features: (area, width, height/width), the idea is for a car classification, in Matlab with libsvm it works, but for C++ with OpenCV it doesn´t – Fernando Hermosillo Reynoso Jun 22 '19 at 16:03
  • I mean what kind of samples did you predict for testing? If you always get class 0 as result, maybe your test samples are too similar to the training samples? – Micka Jun 22 '19 at 20:13

0 Answers0