如何在OpenCV中获取SVM分类器的内核?

时间:2016-04-29 15:02:32

标签: opencv kernel svm

我用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]++;
        }
    }

0 个答案:

没有答案