我是opencv svm的新手。我尝试了一个样本分类器,但它只返回0作为预测标签。我甚至使用值5进行训练以及预测。
我一直在改变这些值大约一百次,但我只是没有弄错。我正在使用OpenCV 3.0和Java。这是我的代码:
Mat labels = new Mat(new Size(1,4),CvType.CV_32SC1);
labels.put(0, 0, 1);
labels.put(1, 0, 1);
labels.put(2, 0, 1);
labels.put(3, 0, 0);
Mat data = new Mat(new Size(1,4),CvType.CV_32FC1);
data.put(0, 0, 5);
data.put(1, 0, 2);
data.put(2, 0, 3);
data.put(3, 0, 8);
Mat testSamples = new Mat(new Size(1,1),CvType.CV_32FC1);
testSamples.put(0,0,5);
SVM svm = SVM.create();
TermCriteria criteria = new TermCriteria(TermCriteria.EPS + TermCriteria.MAX_ITER,100,0.1);
svm.setKernel(SVM.LINEAR);
svm.setType(SVM.C_SVC);
svm.setGamma(0.5);
svm.setNu(0.5);
svm.setC(1);
svm.setTermCriteria(criteria);
//data is N x 64 trained data Mat , labels is N x 1 label Mat with integer values;
svm.train(data, Ml.ROW_SAMPLE, labels);
Mat results = new Mat();
int predictedClass = (int) svm.predict(testSamples, results, 0);
即使我将标签更改为1和2,我仍然会得到0.0作为回复。所以有些事情必须是绝对错误的......我只是不知道该怎么做。请帮忙! :)
答案 0 :(得分:1)
我在C ++中遇到了类似的问题。我不太确定它在Java中是否相同,但在C ++中,预测被保存在结果矩阵中而不是作为浮点数返回。