我在使用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,
回答:
你不能做到这一点。但是你可以使用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)