喜欢 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)的主要内容,如果未能解决你的问题,请参考以下文章

使用 LibSVM 训练一类 SVM

使用 libsvm 进行一类分类

LibSVM for Python 使用

LibSVM 一类分类 nu 参数不是异常值的一小部分吗?

使用 python 将 CSV 文件转换为 LIBSVM 兼容的数据文件

优化 C、g 参数时 LIBSVM 中的网格搜索错误