SK了解如何获取 LinearSVC 分类器的决策概率
Posted
技术标签:
【中文标题】SK了解如何获取 LinearSVC 分类器的决策概率【英文标题】:SKLearn how to get decision probabilities for LinearSVC classifier 【发布时间】:2016-05-14 17:24:54 【问题描述】:我正在使用 scikit-learn 的 linearSVC 分类器进行文本挖掘。我将 y 值作为标签 0/1,将 X 值作为文本文档的 TfidfVectorizer。
我使用如下管道
pipeline = Pipeline([
('count_vectorizer', TfidfVectorizer(ngram_range=(1, 2))),
('classifier', LinearSVC())
])
对于预测,我想获得数据点被分类为的置信度分数或概率 1 在 (0,1) 范围内
我目前使用决策函数功能
pipeline.decision_function(test_X)
但是,它返回似乎表明信心的正值和负值。我也不太清楚它们的含义。
但是,有没有办法获取 0-1 范围内的值?
例如这里是一些数据点的决策函数的输出
-0.40671879072078421,
-0.40671879072078421,
-0.64549376401063352,
-0.40610652684648957,
-0.40610652684648957,
-0.64549376401063352,
-0.64549376401063352,
-0.5468745098794594,
-0.33976011539714374,
0.36781572474117097,
-0.094943829974515004,
0.37728641897721765,
0.2856211778200019,
0.11775493140003235,
0.19387473663623439,
-0.062620918785563556,
-0.17080866610522819,
0.61791016307670399,
0.33631340372946961,
0.87081276844501176,
1.026991628346146,
0.092097790098391641,
-0.3266704728249083,
0.050368652422013376,
-0.046834129250376291,
【问题讨论】:
【参考方案1】:你不能。
但是,您可以将sklearn.svm.SVC
与kernel='linear'
和probability=True
一起使用
它可能会运行更长的时间,但您可以通过使用predict_proba
方法从这个分类器中获取概率。
clf=sklearn.svm.SVC(kernel='linear',probability=True)
clf.fit(X,y)
clf.predict_proba(X_test)
【讨论】:
SVC 与 LinearSVC 不同吗?会不会导致不同的结果? SVC中0到1之间的概率也是预测概率吗? 是的。 predict_proba 返回概率。 SVC 使用表示定理进行训练(krenel 技巧),因此它可能会运行更长时间,但结果应该非常相似(可能略有不同,取决于实现)。 @Sakib 太棒了!我会试试这个,但看起来这是我需要的。 我还有一个问题。决策函数和预测概率有什么区别? 不幸的是,SVC 和 linearSVC 之间的结果非常不同,因为存在一些根本差异:***.com/questions/33843981/…***.com/questions/35076586/…【参考方案2】:如果您坚持使用 LinearSVC 类,您可以将其包装在 sklearn.calibration.CalibratedClassifierCV 对象中,并安装校准分类器,这将为您提供概率分类器。
from sklearn.svm import LinearSVC
from sklearn.calibration import CalibratedClassifierCV
from sklearn import datasets
#Load iris dataset
iris = datasets.load_iris()
X = iris.data[:, :2] # Using only two features
y = iris.target #3 classes: 0, 1, 2
linear_svc = LinearSVC() #The base estimator
# This is the calibrated classifier which can give probabilistic classifier
calibrated_svc = CalibratedClassifierCV(linear_svc,
method='sigmoid', #sigmoid will use Platt's scaling. Refer to documentation for other methods.
cv=3)
calibrated_svc.fit(X, y)
# predict
prediction_data = [[2.3, 5],
[4, 7]]
predicted_probs = calibrated_svc.predict_proba(prediction_data) #important to use predict_proba
print predicted_probs
这是输出:
[[ 9.98626760e-01 1.27594869e-03 9.72912751e-05]
[ 9.99578199e-01 1.79053170e-05 4.03895759e-04]]
显示每个数据点的每个类别的概率。
【讨论】:
以上是关于SK了解如何获取 LinearSVC 分类器的决策概率的主要内容,如果未能解决你的问题,请参考以下文章
从 Spark ML LinearSVC 解释 rawPrediction
在 python 中使用带有 LinearSVC 的特征选择