Opencv SVM Предсказание для одного класса всегда возвращает 0

Я работаю с SVM и проблемой классификации одного класса. Данные - это матрица nx3, где каждая строка является выборкой, поэтому у меня есть n выборок в матрице данных:

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

Код, который я написал для обучающих данных, выглядит следующим образом:

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);

И когда я делаю прогнозы по:

model->predict(samples, responses);

Он всегда возвращает вектор nx1 в нулях для ответов.

0 ответов

Другие вопросы по тегам