1

我刚开始在 python 中使用 libsvm 并得到了一些简单的分类。

问题是我正在构建一个人脸检测系统,我想要一个非常低的错误拒绝率。另一方面,支持向量机似乎针对相等的错误拒绝和错误接受进行了优化。我在这里有什么选择?

正如前面所说,我对 libsvm 很陌生,所以请善待。;)

4

2 回答 2

2

SVM 通常不被认为是概率模型,而是最大判别模型。因此,我很难根据我对 SVM 的了解来提出您的问题。

此外,libSVM 附带的 Python 绑定性能不是很好,也没有公开 libSVM 的所有选项。

也就是说,如果您愿意查看其他绑定,scikit-learn的 svm 绑定更丰富,并且公开了一些可能派上用场的参数,例如weighted classesweighted samples。您可能可以更加强调您不希望对其进行错误分类的类。

此外,scikit 的绑定暴露了后验分类概率,但在 SVM 的情况下,我相信它依赖于 libSVM 的 hack(因为 SVM 不是概率),它对分类重新采样以获得预测的置信区间。

于 2011-01-24T20:10:11.197 回答
1

我一直在为 libSVM 使用 python 包装器,发现我可以使用边距计算置信度度量……请参见下面的“predict_values_raw”函数。它返回一个实值,大的正值表示它是类成员的高置信度,大的负值表示它不是类成员的高置信度;接近零的值表明它对分类没有信心。因此,不要调用“predict”,而是调用“predict_values_raw”并应用低阈值(例如 -2)以确保您不会拒绝任何真实面孔

# Begin pseudo-code
import svm as svmlib

prob = svmlib.svm_problem(labels, data)
param = svmlib.svm_parameter(svm_type=svmlib.C_SVC, kernel_type = svmlib.RBF)
model = svmlib.svm_model(prob, param)

# get confidence
self.model.predict_values_raw(sample_to_classify)
于 2011-02-28T21:31:23.560 回答