我真的需要知道我的预测的可信度,而OpenCV的SVM预测方法确实给了我"returnDFVal"的选项:
returnDFVal–指定返回值的类型。如果为真且问题是2类分类,然后该方法返回决策到边距的带符号距离的函数值,否则函数返回类标签(分类(或估计函数值(回归(。
不幸的是,我有3个类,所以这对我来说不起作用。有什么方法可以绕过这个或其他方法来确定我的预测的可信度吗?
预测概率还不可能,但有一种方法可以从幕后获得libsvm
,请在这里找到我的答案。
使用opencv 3.x:
float distanceSample(cv::Mat &sample)
{
assert(svm != NULL && svm->isTrained());
assert(!sample.empty());
cv::Mat result;
svm->predict(sample, result, cv::ml::StatModel::Flags::RAW_OUTPUT);
float dist = result.at<float>(0, 0);
return dist;
}
float dist = distanceSample(yourSample);
float confidence = (1.0 / (1.0 + exp(-dist)));
PS。这只适用于2类分类。