【问题标题】:SKLearn how to get decision probabilities for LinearSVC classifierSK了解如何获取 LinearSVC 分类器的决策概率
【发布时间】: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, 

【问题讨论】:

    标签: python machine-learning scikit-learn svm


    【解决方案1】:

    你不能。 但是,您可以将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)
    

    【讨论】:

    • SVC 与 LinearSVC 不同吗?会不会导致不同的结果? SVC中0到1之间的概率也是预测概率吗?
    • 是的。 predict_proba 返回概率。 SVC 使用表示定理进行训练(krenel 技巧),因此它可能会运行更长时间,但结果应该非常相似(可能略有不同,取决于实现)。 @Sakib
    • 太棒了!我会试试这个,但看起来这是我需要的。
    • 我还有一个问题。决策函数和预测概率有什么区别?
    • 不幸的是,SVC 和 linearSVC 之间的结果非常不同,因为存在一些根本差异:stackoverflow.com/questions/33843981/…stackoverflow.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]]
    

    显示每个数据点的每个类别的概率。

    【讨论】:

      猜你喜欢
      • 2014-06-09
      • 2023-04-07
      • 2012-08-04
      • 1970-01-01
      • 1970-01-01
      • 2015-01-13
      • 2017-09-23
      • 1970-01-01
      相关资源
      最近更新 更多