我用OpenCV 3.0开发了一个多类SVM,我想计算每个类和数据(输入)之间的距离,以估计预测的置信度。
我在link1使用了以下代码,但是当我尝试获取SVM的内核时出错!
感谢您的帮助。
Mat sv = svm->getSupportVectors();
Ptr<SVM::Kernel> kernel = svm->getKernel(); // ??
Mat buffer(1, sv.rows, CV_32F);
kernel->calc(sv.rows, sv.cols, sv.ptr<float>(), data.ptr<float>(), buffer.ptr<float>()); // apply kernel on data (CV_32F vector) and support vectors
Mat alpha, svidx;
int N = 11;
vector<int> votes(N, 0); // results of majority vote will be stored here (N is number of classes)
int i, j, dfi;
for (i = dfi = 0; i < N; i++)
{
for (j = i + 1; j < N; j++, dfi++)
{
// compute score for each binary svm
double rho = svm->getDecisionFunction(dfi, alpha, svidx);
double sum = -rho;
for (int k = 0; k < sv.rows; k++)
sum += alpha.at<float>(k)*buffer.at<float>(sv.at<int>(k));
// majority vote
votes[sum > 0 ? i : j]++;
}
}