我刚刚开始在python中使用libsvm进行一些操作,并获得了一些简单的分类。
问题是我正在构建一个人脸检测系统,我想要一个非常低的错误拒绝率。另一方面,svm似乎优化了相同的错误拒绝和错误接受。我有什么选择?
如前所述,我对libsvm很新,所以要善良。 ;)
答案 0 :(得分:2)
SVM通常不被认为是概率模型,而是最大判别模型。因此,我很难在我所知道的SVM的背景下制定你的问题。
此外,libSVM附带的Python绑定不是非常高效,也不会公开libSVM的所有选项。
也就是说,如果您愿意查看其他绑定,scikit-learn的svm绑定更丰富,并且会暴露一些可能派上用场的参数,例如weighted classes或{{3 }}。您可以更加重视不希望误分类的类。
此外,scikit的绑定暴露了weighted samples,但在SVM的情况下,我认为它依赖于libSVM的hack(因为SVM不具有概率),重新采样分类以具有置信区间关于预测。
答案 1 :(得分: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)