web-dev-qa-db-ja.com

AttributeError: 'LinearSVC'オブジェクトに属性 'predict_proba'がありません

私は使用しようとしています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

Sklearn documentation によると、メソッド 'predict_proba'は 'LinearSVC'に対して定義されていません

回避策

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

linear kernelprobability引数をTrueに設定してSVCを使用します。 ここ で説明したように。

10
mdilip

あなたの質問を考えると、NLTKのようないくつかの外部ラッパー(タグを除く)については言及されていないので、本当に必要なものを把握するのは難しいです!

VivekKumarのコメントが適用されます。 LinearSVCは確率をサポートしていませんが、SVCはサポートしています。

ここでいくつかの追加のコメント:

  • SVM理論は確率についてはあまり重要ではなく、これに対するサポートは、交差検定と追加の分類器を使用した追加のアプローチから得られます[.____]。
  • linearSVCのコアソルバー liblinear は組み込まれていません-これをサポートします
  • 上記のmdilipのアプローチは有効な回避策ですが、:
    • SVCは libsvm に基づいているため、速度が遅くなります(大規模な準備ができていない可能性があります)
  • 別の方法:で構成される独自のパイプラインを構築する

誰かがこれを以前に観察したようです 問題

4
sascha

代わりに_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は、サンプルに対する各クラスの確率の2次元配列になります。

1
Sina