我在使用scikit中的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
方法来预测样本的置信分数。但是,有没有办法使用这个决策函数来计算样本的概率估计?
回答:
不,LinearSVC
不会计算概率,因为它没有被训练来做这件事。使用sklearn.linear_model.LogisticRegression
,它使用与LinearSVC
相同的算法,但使用的是对数损失。它使用标准的逻辑函数来进行概率估计:
1. / (1 + exp(-decision_function(X)))
(出于同样的原因,SGDClassifier
只有在loss="log"
时才会输出概率,而不是使用其默认的损失函数,这会使其学习线性SVM。)