AttributeError:'LinearSVC'对象没有属性'predict_proba'

时间:2017-11-15 16:21:48

标签: python scikit-learn nltk

我正在尝试使用 LinearSVC分类器

更新:添加了导入

import nltk
from nltk.tokenize import word_tokenize
from nltk.classify.scikitlearn import SklearnClassifier
from sklearn.svm import LinearSVC, SVC

LinearSVC_classifier = SklearnClassifier(LinearSVC())
LinearSVC_classifier.train(featuresets)

但是当我试图用概率对其进行分类时

LinearSVC_classifier.prob_classify(feats)

发生AttributeError:

AttributeError:'LinearSVC' object has no attribute 'predict_proba'

我检查了sklearn文档,它告诉该函数存在。

如何解决这个问题?

4 个答案:

答案 0 :(得分:6)

根据sklearn documentation,方法' predict_proba '没有为' LinearSVC '

定义

解决方法

LinearSVC_classifier = SklearnClassifier(SVC(kernel='linear',probability=True))

将SVC与线性内核一起使用,概率参数设置为 True 。 正如here中所述。

答案 1 :(得分:4)

鉴于你的问题,没有提到像NLTK这样的外包装(标签除外),所以很难掌握你真正需要的东西!

Vivek Kumar的评论适用。 LinearSVC不支持概率,而SVC则支持概率。

现在另外一些评论:

  • SVM理论与概率关系不大,对此的支持来自使用交叉验证的额外方法和额外的分类器
  • LinearSVC的核心解算器,liblinear没有内置支持
  • 上面 mdilip 的方法是一种有效的解决方法,但是:
    • SVC基于libsvm,因此速度较慢(可能还没有为大规模做好准备)
  • 替代方案:构建自己的管道,包括:

似乎有人在此之前发现了problem

答案 2 :(得分:1)

您可以使用_predict_proba_lr()代替predict_proba。像这样:

from sklearn import svm
clf=svm.LinearSVC()

clf.fit(X_train,Y_train)

res= clf._predict_proba_lr(X_test,Y_test)
res将是每个类别相对于样本的概率的二维数组。

答案 3 :(得分:1)

如果训练模型和预测模型之间的scikit-learn模块版本之间存在不匹配,则会发生这种情况。