如何获取SGDClassifier(线性支持向量机)的概率?

4
我正在使用SGDClassifierloss function = "hinge"。但是,hinge loss不支持类标签的概率估计。
我需要概率来计算roc_curve。如何在不使用svm的情况下获取SGDClassifier中hinge loss的概率?
我看到有人提到使用CalibratedClassifierCV来获取概率,但我从未使用过它,也不知道它的工作原理。
我非常感谢您的帮助。谢谢。
1个回答

7
严格来说,这是不可能的。
支持向量机分类器是非概率性的:它们使用一个超平面(在 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,接下来我应该使用什么? - user_6396
按照问题中所说的做法 - 将 SGDClassifier 实例传递给 CalibratedClassifierCV(),然后像平常一样在 X_trainX_test 上拟合和评分 CalibratedClassifierCV 实例。 - gmds
所以,我们应该使用 model.predict 来预测类标签和概率,而不是使用 base_model.predict,对吧? - user_6396
@user214 是的,请参考答案中的示例代码。 - gmds
如果我设置 loss='modified_huber',那么 SGDClassifier 就会给出预测概率。你能解释一下为什么会这样吗? - greenlantern
从sklearn.calibration导入CalibratedClassifierCV。 - jonincanada

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接