2016-07-15 1 views
1

J'ai un ensemble de données avec une variable cible qui peut avoir 7 étiquettes différentes. Chaque échantillon de mon jeu d'apprentissage n'a qu'une seule étiquette pour la variable cible.Sklearn - Comment prédire la probabilité pour toutes les étiquettes cibles

Pour chaque échantillon, je veux calculer la probabilité pour chacune des étiquettes cibles. Donc ma prédiction serait composée de 7 probabilités pour chaque rangée.

Sur le site Web sklearn, j'ai lu à propos de la classification multi-étiquettes, mais cela ne semble pas être ce que je veux.

J'ai essayé le code suivant, mais cela ne me donne qu'une classification par échantillon.

from sklearn.multiclass import OneVsRestClassifier 
clf = OneVsRestClassifier(DecisionTreeClassifier()) 
clf.fit(X_train, y_train) 
pred = clf.predict(X_test) 

Quelqu'un a-t-il des conseils à ce sujet? Merci!

Répondre

1

Vous pouvez le faire en enlevant simplement le OneVsRestClassifer et en utilisant la méthode predict_proba du DecisionTreeClassifier. Vous pouvez effectuer les opérations suivantes:

clf = DecisionTreeClassifier() 
clf.fit(X_train, y_train) 
pred = clf.predict_proba(X_test) 

Cela vous donnera une probabilité pour chacune de vos 7 classes possibles.

Espérons que ça aide!

2

Vous pouvez essayer d'utiliser scikit-multilearn - une extension de sklearn qui gère la classification multilabel. Si vos étiquettes ne sont pas trop corrélés vous pouvez former un classificateur par étiquette et obtenir toutes les prévisions - essayer (après Pip installer scikit-multilearn):

from skmultilearn.problem_transform import BinaryRelevance  
classifier = BinaryRelevance(classifier = DecisionTreeClassifier()) 

# train 
classifier.fit(X_train, y_train) 

# predict 
predictions = classifier.predict(X_test) 

Les prédictions contiennent une matrice clairsemée de taille (N_SAMPLES, n_labels) dans votre cas - n_labels = 7, chaque colonne contient une prédiction par étiquette pour tous les échantillons. Si vos étiquettes sont corrélées, vous aurez peut-être besoin de méthodes plus sophistiquées pour la classification multi-étiquettes. Clause de non-responsabilité: Je suis l'auteur de scikit-multilearn, n'hésitez pas à poser d'autres questions.

+0

Dans la version 0.0.4 de scikit-multilearn, récemment publiée, vous trouverez des implémentations de predict_proba pour les méthodes de classification multi-étiquettes basées sur la transformation de problèmes. Dans le cas ci-dessus, remplacez la dernière ligne par: predictions = classifier.predict_proba (X_test) – niedakh