web-dev-qa-db-fra.com

Comment trouver la classe correspondante dans clf.predict_proba ()

J'ai un certain nombre de classes et de vecteurs de fonctionnalités correspondants, et lorsque j'exécuterai Predict_proba (), j'obtiendrai ceci:

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]])

Je voudrais savoir quelle probabilité cela correspond à quelle classe. Sur cette page, il est dit qu'ils sont classés par ordre arithmétique, je ne suis pas sûr à 100% de ce que cela signifie: http://scikit-learn.org/stable/modules/generated/sklearn.svm.SVC .html # sklearn.svm.SVC.predict_proba

Cela signifie-t-il que j'ai parcouru mes exemples de formation attribuer l'index correspondant à la première rencontre d'une classe, ou y a-t-il une commande comme

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

40
user1506145

Utilisez simplement le .classes_ attribut du classificateur pour récupérer le mappage. Dans votre exemple, cela donne:

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

Et merci d'avoir mis un script de reproduction minimaliste dans votre question, il est très facile de répondre en copiant-collant simplement dans un shell IPython :)

61
ogrisel

En règle générale, tout attribut d'un apprenant se terminant par _ est un attribut appris. Dans votre cas, vous recherchez clf.classes_.

Généralement en Python, vous pouvez utiliser la fonction dir pour trouver les attributs d'un objet.

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_)

Sortie [2]:

         one       three         two
0   0.542815    0.361876    0.095309
1   0.306431    0.612863    0.080706

Je suis nouveau à python et apprends mon chemin. Comment pourriez-vous maintenant regrouper la réponse ci-dessus en 2 colonnes représentant la probabilité maximale par index. En gros, ajouter 2 colonnes "Number" et "probabilité" et trouver la probabilité la plus élevée à travers l'index et le nombre associé

La sortie doit être:

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