首页 文章

对于LinearSVC,计算scikit中每个样本x的概率估计P(y | x)

提问于
浏览
1

我正在使用scars中的linearsvm训练我的数据集 . 我可以计算/获得样品在给定标签下分类的概率吗?

例如,使用 SGDClassifier(loss="log") 来拟合数据,启用predict_proba方法,该方法为每个样本 x 提供概率估计的矢量 P(y|x)

>>> clf = SGDClassifier(loss="log").fit(X, y)
>>> clf.predict_proba([[1., 1.]])

输出:

array([[ 0.0000005,  0.9999995]])

在使用 svm.LinearSVC (多类分类)时,是否有任何类似的函数可用于计算预测概率 . 我知道有一种方法 decision_function 来预测这种情况下样本的置信度分数 . 但是,有什么方法可以使用这个决策函数计算样本的概率估计值?

2 回答

  • 1

    不, LinearSVC 不会计算概率,因为没有训练这样做 . 使用 sklearn.linear_model.LogisticRegression ,它使用与 LinearSVC 相同的算法但具有日志丢失 . 它使用标准logistic function进行概率估计:

    1. / (1 + exp(-decision_function(X)))
    

    (出于同样的原因, SGDClassifier 只会在 loss="log" 时输出概率,而不是使用其默认的损失函数,这会导致它学习线性SVM . )

  • 2

    多类别分类是一对一分类 . 对于 SGDClassifier ,当返回对应于特定类的超平面的距离时,概率计算为

    clip(decision_function(X), -1, 1) + 1) / 2
    

    Refer to code了解详情 .

    你可以实现类似的功能,对于我来说对于LinearSVC似乎是合理的,通过它可能需要一些理由 . 请参阅文档中提到的论文

    Zadrozny和Elkan,“将分类器转化为多类概率估计”,SIGKDD'02,http://www.research.ibm.com/people/z/zadrozny/kdd2002-Transf.pdf

    附:来自"Is there 'predict_proba' for LinearSVC?"的评论:

    如果你想要概率,你应该使用Logistic回归或SVC . 两者都可以预测可能性,但是以非常不同的方式 .

相关问题