簡體   English   中英

SK了解如何獲取LinearSVC分類器的決策概率

[英]SKLearn how to get decision probabilities for LinearSVC classifier

我正在使用scikit-learn的linearSVC分類器進行文本挖掘。 我將y值作為標簽0/1,將X值作為文本文檔的TfidfVectorizer。

我使用如下所示的管道

 pipeline = Pipeline([
    ('count_vectorizer',   TfidfVectorizer(ngram_range=(1, 2))),
    ('classifier',         LinearSVC())
  ])

為了進行預測,我想獲得置信度得分或數據點在(0,1)范圍內被分類為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, 

你不能 但是,您可以將sklearn.svm.SVCkernel='linear'probability=True

它可能會運行更長的時間,但是您可以使用predict_proba方法從此分類器中獲取概率。

clf=sklearn.svm.SVC(kernel='linear',probability=True)
clf.fit(X,y)
clf.predict_proba(X_test)

如果您堅持使用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]]

它顯示了每個數據點每個類別的概率。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM