在 SVM 中找到预测的置信度

Find confidence of prediction in SVM

我正在使用 opencv 中的 SVM 分类器进行英文数字分类。 我可以使用 predict() 函数预测类别。 但我想获得 0-1 之间的预测信心。有人可以提供一种方法来使用 opencv

 //svm parameters used
 m_params.svm_type    = CvSVM::C_SVC;
 m_params.kernel_type = CvSVM::RBF;
 m_params.term_crit   = cvTermCriteria(CV_TERMCRIT_ITER, 500, 1e-8);

 //for training
 svmob.train_auto(m_features, m_labels, cv::Mat(), cv::Mat(), m_params, 10);

 //for prediction
 predicted = svmob.predict(testData);

训练期间的 SVM 试图找到一个分离超平面,使训练集示例位于不同的侧面。可能有许多这样的超平面(或 none),因此对于 select "best" 我们寻找与所有 类 的总距离最大的那个。事实上,距离超平面点越远——我们对决策的信心就越大。所以我们感兴趣的是到超平面的距离。

根据 OpenCV documentationCvSVM::predict 有一个默认的第二个参数,它指定要 return 的内容。默认情况下,它是return的分类标签,但你可以传入true,它会return距离。

距离本身还不错,但如果你想在 (0, 1) 范围内获得置信度值,你可以对结果应用 sigmoidal 函数。如果逻辑函数是这样的函数之一。

decision = svmob.predict(testData, true);
confidence = 1.0 / (1.0 + exp(-decision));