Opencv SVM One-class prediction always return 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.

Upvotes: 0

Views: 500

Answers (0)

Related Questions