代码之家  ›  专栏  ›  技术社区  ›  Oleksandr Baranov

AttributeError:'LinearSVC'对象没有属性“predict\u proba”

  •  11
  • Oleksandr Baranov  · 技术社区  · 8 年前

    我正在尝试使用 线性SVC分类器

    使现代化 :添加了导入

    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文档,它告诉我这个函数存在。

    如何修复?

    5 回复  |  直到 8 年前
        1
  •  18
  •   mdilip    8 年前

    documentation ,方法' 预测概率 '未定义为' LinearSVC '

    解决方法 :

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

    使用SVC 线性核 可能性 参数设置为 真的 . 正如中所述 here .

        2
  •  6
  •   Sina    7 年前

    您可以使用 _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是每个类别相对于样本的概率的2d数组。

        3
  •  5
  •   sascha    8 年前

    考虑到你的问题,没有提到像NLTK这样的外部包装器(除了标记),所以很难理解你真正需要什么!

    维韦克·库马尔的评论适用。LinearSVC不支持概率,而SVC支持概率。

    现在有一些补充意见:

    • 支持向量机理论与概率无关,支持它的是使用交叉验证和额外分类器的额外方法
    • liblinear 对此没有内置支持
    • 方法 mdilip 以上是有效的解决方法,但:
      • SVC基于 libsvm 因此速度较慢(可能还没有准备好进行大规模测试)
    • 备选方案:构建自己的管道,包括:

    似乎有人注意到了这一点 problem 之前

        4
  •  1
  •   ThusharaJ    6 年前

    如果训练模型和预测模型之间的scikit学习模块版本不匹配,则可能发生这种情况。

        5
  •  -1
  •   Aleksandrs Krivickis    4 年前

    虚拟解决方案,具有用校准分类RCV包裹的LinearSVC。根据我的经验,降低了分类的质量。

    >>> from sklearn.calibration import CalibratedClassifierCV
    >>> from sklearn.svm import LinearSVC
    >>> from sklearn.pipeline import make_pipeline
    >>> from sklearn.preprocessing import StandardScaler
    >>> from sklearn.datasets import make_classification
    
    >>> X, y = make_classification(n_features=4, random_state=0)
    >>> clf = make_pipeline(CalibratedClassifierCV(LinearSVC()))
    >>> clf.fit(X, y)
    >>> clf.predict_proba(make_classification(n_features=4, random_state=1,n_samples=10,)[0])
    array([[0.71360647, 0.28639353],
           [0.26277422, 0.73722578],
           [0.79450968, 0.20549032],
           [0.79352606, 0.20647394],
           [0.2486062 , 0.7513938 ],
           [0.85705016, 0.14294984],
           [0.90102124, 0.09897876],
           [0.58071282, 0.41928718],
           [0.31289046, 0.68710954],
           [0.14466406, 0.85533594]])
    
    推荐文章