web-dev-qa-db-ja.com

clf.predict_proba()で対応するクラスを見つける方法

いくつかのクラスと対応する特徴ベクトルがあり、predict_proba()を実行すると次のようになります。

_classes = ['one','two','three','one','three']

feature = [[0,1,1,0],[0,1,0,1],[1,1,0,0],[0,0,0,0],[0,1,1,1]]

from sklearn.naive_bayes import BernoulliNB

clf = BernoulliNB()
clf.fit(feature,classes)
clf.predict_proba([0,1,1,0])
>> array([[ 0.48247836,  0.40709111,  0.11043053]])
_

どのクラスに対応する確率を取得したいと思います。このページでは、それらは算術順で並べられていると言っていますが、私はそれが何を意味するのか100%確信していません: http://scikit-learn.org/stable/modules/generated/sklearn.svm.SVC .html#sklearn.svm.SVC.predict_proba

私のトレーニング例がトラフに行き、対応するインデックスをクラスの最初の出会いに割り当てたことを意味しますか、または次のようなコマンドがありますか?

clf.getClasses() = ['one','two','three']?

40
user1506145

.classes_マッピングを回復する分類子の属性。あなたの例では:

>>> clf.classes_
array(['one', 'three', 'two'], 
      dtype='|S5')

そして、あなたの質問にミニマルな再現スクリプトを入れてくれたことに感謝します。IPythonシェルにコピー&ペーストするだけで答えがとても簡単になります:)

61
ogrisel

原則として、_で終わる学習者の属性は学習済みの属性です。あなたの場合、clf.classes_を探しています。

一般的にPythonでは、dir関数を使用して、オブジェクトがどの属性を持っているかを調べることができます。

9
lazy1
import pandas as pd
test = [[0,1,1,0],[1,1,1,0]]
pd.DataFrame(clf.predict_proba(test), columns=clf.classes_)

Out[2]:
         one       three         two
0   0.542815    0.361876    0.095309
1   0.306431    0.612863    0.080706
6
pomber
import pandas as pd
test = [[0,1,1,0],[1,1,1,0]]
pd.DataFrame(clf.predict_proba(test), columns=clf.classes_)

アウト[2]:

         one       three         two
0   0.542815    0.361876    0.095309
1   0.306431    0.612863    0.080706

私はpythonに慣れていないので、どのようにすれば上記の応答をインデックスごとの最大確率を表す2つの列にグループ化できますか。基本的に2つの列 "Number"および "probability"インデックスおよび関連する番号全体で最高の確率を見つける

出力は次のとおりです。

      Number                                probability
0.    One                                      0.542815
1.    Three                                    0.612863
1
Bercey Efund