web-dev-qa-db-fra.com

Comment connaître la probabilité de classe prédite par la fonction predict () dans Support Vector Machine?

Comment savoir si un échantillon appartient à une classe prédite par la fonction Predict () de Scikit-Learn dans Support Vector Machine?

>>>print clf.predict([fv])
[5]

Il y a une fonction?

22
postgres

Utilisez clf.predict_proba ([fv]) pour obtenir une liste des probabilités prédites par classe. Cependant, cette fonction n'est pas disponible pour tous les classificateurs.

En ce qui concerne votre commentaire, considérez ce qui suit:

>> prob = [ 0.01357713, 0.00662571, 0.00782155, 0.3841413, 0.07487401, 0.09861277, 0.00644468, 0.40790285]
>> sum(prob)
1.0

Les probabilités totalisent 1,0, multipliez-les par 100 pour obtenir le pourcentage.

13
Bastiaan van den Berg

Lisez certainement cette section de la documentation car certaines subtilités sont impliquées. Voir aussi Scikit-learn predict_proba donne des réponses fausses

Fondamentalement, si vous avez un problème multi-classe avec beaucoup de données, pred_proba comme suggéré précédemment fonctionne bien. Sinon, vous devrez peut-être vous contenter d'un ordre qui ne génère pas de scores de probabilité de decision_function.

Voici un motif sympa pour utiliser prédict_proba pour obtenir un dictionnaire ou une liste de classes et de probabilités:

model = svm.SVC(probability=True)
model.fit(X, Y)
results = model.predict_proba(test_data)[0]

# gets a dictionary of {'class_name': probability}
prob_per_class_dictionary = dict(Zip(model.classes_, results))

# gets a list of ['most_probable_class', 'second_most_probable_class', ..., 'least_class']
results_ordered_by_probability = map(lambda x: x[0], sorted(Zip(model.classes_, results), key=lambda x: x[1], reverse=True))
24
Alex

Lors de la création de la classe SVC pour calculer les estimations de probabilité en définissant probability=True:

http://scikit-learn.org/stable/modules/generated/sklearn.svm.SVC.html

Ensuite, appelez fit comme d'habitude, puis predict_proba([fv]).

8
ogrisel

Pour des réponses plus claires, je publie à nouveau les informations de scikit-learn pour svm.

Il va sans dire que la validation croisée impliquée dans la mise à l'échelle Platt est une opération coûteuse pour les grands ensembles de données. De plus, les estimations de probabilité peuvent être incompatibles avec les scores, en ce sens que l'argmax des scores peut ne pas être l'argmax des probabilités. (Par exemple, dans la classification binaire, un échantillon peut être étiqueté de predict comme appartenant à une classe dont la probabilité est inférieure à ½, en fonction de delete_proba.) La méthode de Platt est également connue pour avoir des problèmes théoriques. Si des scores de confiance sont requis, mais que ceux-ci ne doivent pas obligatoirement être des probabilités, il est conseillé de définir probabilité = False et d'utiliser decision_function au lieu de predict_proba.

Pour d'autres classificateurs tels que Random Forest, AdaBoost, Gradient Boosting, l'utilisation de la fonction de prédiction dans scikit-learn devrait être acceptable.

0
beahacker