【问题标题】:How to get probabilities for SGDClassifier (LinearSVM)如何获得 SGDClassifier(线性 SVM)的概率
【发布时间】:2019-03-19 22:35:13
【问题描述】:

我正在使用 SGDClassifierloss function = "hinge"。但是铰链损失不支持类标签的概率估计。

我需要概率来计算roc_curve。如何在不使用 svm 的 SVC 的情况下获得 SGDClassifier 中铰链损失的概率?

我看到有人提到使用CalibratedClassifierCV 来获取概率,但我从未使用过它,也不知道它是如何工作的。

非常感谢您的帮助。谢谢

【问题讨论】:

    标签: python machine-learning scikit-learn


    【解决方案1】:

    严格来说,这是不可能的。

    支持向量机分类器是非概率的:它们使用超平面(2D 中的线、3D 中的平面等)将点分成两个类别之一。点仅由它们在超平面的哪一侧定义,直接形成预测。

    这与逻辑回归和决策树等概率分类器形成对比,后者为每个点生成一个概率,然后将其转换为预测。

    CalibratedClassifierCV 是一种元估计器;要使用它,您只需将基本估算器的实例传递给它的构造函数,这样就可以了:

    base_model = SGDClassifier()
    model = CalibratedClassifierCV(base_model)
    
    model.fit(X, y)
    model.predict_proba(X)
    

    它所做的是执行内部交叉验证以创建概率估计。请注意,这等同于 sklearn.SVM.SVC 所做的。

    【讨论】:

    • 我已将数据拆分为 X_train 和 X_test,因此我在 X_train 和 y_train 上安装了 SGDClassifier,之后我应该使用什么。
    • 按照我在问题中所说的去做 - 将 SGDClassifier 实例传递给 CalibratedClassifierCV(),然后分别在 X_trainX_test 上正常拟合并评分 CalibratedClassifierCV 实例。跨度>
    • 所以我们应该使用model.predict 来预测类别标签和概率,而不是使用base_model.predict,对吧?
    • @user214 是的,另请参阅答案中的示例代码。
    • 如果我设置 loss='modified_huber' 那么 SGDClassifier 确实给出了预测概率。你能解释一下为什么会这样吗?
    猜你喜欢
    • 1970-01-01
    • 2015-10-15
    • 1970-01-01
    • 2019-10-19
    • 2019-02-12
    • 2016-10-03
    • 2017-04-13
    • 2014-02-20
    • 1970-01-01
    相关资源
    最近更新 更多