本文介绍了将LinearSVC的决策函数转换为概率(Scikit学习Python)的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我使用来自SCRKIT学习的线性支持向量机(LinearSVC)来解决二值分类问题。我知道LinearSVC可以给我预测的标签和决策得分,但我想要概率估计(对标签的信心)。由于速度的原因,我想继续使用LinearSVC(与使用线性内核的sklearn.svm.SVC相比)使用Logistic函数将决策分数转换为概率是否合理?

import sklearn.svm as suppmach
# Fit model:
svmmodel=suppmach.LinearSVC(penalty='l1',C=1)
predicted_test= svmmodel.predict(x_test)
predicted_test_scores= svmmodel.decision_function(x_test) 

我想检查简单地获得概率估计为[1/(1+exp(-x))]是否有意义,其中x是决策得分。

或者,我还可以使用其他选项WRT分类器来高效地执行此操作吗?

谢谢。

推荐答案

我看了一下sklearn.svm.*家族中的接口。以下所有型号,例如

  • sklearn.svm.SVC
  • sklearn.svm.NuSVC
  • sklearn.svm.SVR
  • sklearn.svm.NuSVR

有一个公共的interface,它提供一个

probability: boolean, optional (default=False) 

参数添加到模型。如果此参数设置为True,则libsvm将基于Platt Scaling的思想在支持向量机的输出上训练概率转换模型。正如您所指出的,转换的形式类似于逻辑函数,但是在后处理步骤中学习了两个特定的常量AB。另请参阅此stackoverflow帖子以了解更多详细信息。

我实际上不知道为什么这个后处理不能用于LinearSVC。否则,您只需调用predict_proba(X)来获取概率估计。

当然,如果只应用简单的Logistic转换,它将不会像Platt Scaling这样的校准方法那样执行得很好。如果你能理解Platt Scaling的下划线算法,也许你可以编写自己的算法,或者为SCRICKIT-学习支持向量机大家庭做出贡献。:)也可以使用支持predict_proba的上述四种支持向量机变体。

这篇关于将LinearSVC的决策函数转换为概率(Scikit学习Python)的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

09-25 07:06