喜欢 libsvm 中的一类(python)
Posted
技术标签:
【中文标题】喜欢 libsvm 中的一类(python)【英文标题】:Prefer one class in libsvm (python) 【发布时间】:2011-06-13 00:26:27 【问题描述】:我刚开始在 python 中使用 libsvm 并得到了一些简单的分类。
问题是我正在构建一个人脸检测系统,我想要一个非常低的错误拒绝率。另一方面,支持向量机似乎针对相等的错误拒绝和错误接受进行了优化。我有什么选择?
正如前面所说,我对 libsvm 很陌生,所以请善待。 ;)
【问题讨论】:
不知道确切的语法,但一般情况下,您要做的就是改变阈值的值,较低的阈值会减少错误拒绝 【参考方案1】:SVM 通常不被认为是一种概率模型,而是一种最大判别模型。因此,根据我对 SVM 的了解,我很难提出您的问题。
此外,libSVM 附带的 Python 绑定性能不是很好,也没有公开 libSVM 的所有选项。
也就是说,如果您愿意查看其他绑定,scikit-learn 的 svm 绑定更丰富,并且公开了一些可能派上用场的参数,例如 weighted classes 或 weighted samples。您可能可以更加强调您不希望错误分类的类。
此外,scikit 的绑定暴露了 posterior classification probability,但在 SVM 的情况下,我相信它依赖于 libSVM 的 hack(因为 SVM 不是概率性的),它重新采样分类以在预测。
【讨论】:
【参考方案2】:我一直在为 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)
【讨论】:
以上是关于喜欢 libsvm 中的一类(python)的主要内容,如果未能解决你的问题,请参考以下文章