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

Ale*_*nov 4 python nltk scikit-learn

我正在尝试使用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)
Run Code Online (Sandbox Code Playgroud)

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

LinearSVC_classifier.prob_classify(feats)
Run Code Online (Sandbox Code Playgroud)

发生AttributeError:

AttributeError:'LinearSVC' object has no attribute 'predict_proba'
Run Code Online (Sandbox Code Playgroud)

我检查了sklearn文档,它告诉我这个函数存在.

如何解决?

mdi*_*lip 9

据sklearn 文档,该方法" predict_proba "不是"定义LinearSVC "

解决方法:

LinearSVC_classifier = SklearnClassifier(SVC(kernel='linear',probability=True))
Run Code Online (Sandbox Code Playgroud)

将SVC与线性内核一起使用,概率参数设置为True.正如这里所解释的那样.

  • @AleksandrBaranov [分数和概率](http://scikit-learn.org/stable/modules/svm.html#scores-and-probabilities) 提到“Platt 缩放中涉及的交叉验证是一个**昂贵的操作**对于大型数据集。” (2认同)
  • 我无法在 LInearSVC_classifier 上应用拟合。 (2认同)

Sin*_*ina 6

您可以_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)
Run Code Online (Sandbox Code Playgroud)

res 将是每个类别针对样本的概率的二维数组。


sas*_*cha 5

鉴于您的问题,没有提及像 NLTK 这样的外部包装器(标签除外),因此很难掌握您真正需要的东西!

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

现在一些补充说明:

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

似乎以前有人观察过这个问题