8 votes

Convertir un vecteur de probabilité en vecteur cible en python ?

Je fais de la régression logistique sur des données d'iris provenant de Sklearn, je connais les mathématiques et j'essaie de les mettre en œuvre. A l'étape finale, j'obtiens un vecteur de prédiction, ce vecteur de prédiction représente la probabilité que ce point de données soit dans la classe 1 ou la classe 2 (classification binaire).

Maintenant je veux transformer ce vecteur de prédiction en vecteur cible. Disons que si la probabilité est supérieure à 50%, le point de données correspondant appartiendra à la classe 1, sinon à la classe 2. Utiliser 0 pour représenter la classe 1, 1 pour la classe 2.

Je sais qu'il y a une version en boucle de ce système, qui passe en revue tout le vecteur. Mais quand la taille devient grande, la boucle for est très coûteuse, donc je veux le faire plus efficacement, comme l'opération matricielle de numpy, qui est plus rapide que de faire l'opération matricielle dans la boucle for.

Une suggestion sur la méthode la plus rapide ?

17voto

Shi XiuFeng Points 360
import numpy as np

a = np.matrix('0.1 0.82')
print(a)

a[a > 0.5] = 1
a[a <= 0.5] = 0
print(a)

Sortie :

[[ 0.1   0.82]]
[[ 0.  1.]]

Mise à jour :

import numpy as np

a = np.matrix('0.1 0.82')
print(a)

a = np.where(a > 0.5, 1, 0)
print(a)

5voto

Jeff Points 21

Une solution plus générale pour un tableau 2D qui a de nombreux vecteurs avec de nombreuses classes :

import numpy as np
a = np.array( [ [.5, .3, .2], 
                [.1, .2, .7], 
                [ 1,  0,  0] ] )

idx = np.argmax(a, axis=-1)
a = np.zeros( a.shape )
a[ np.arange(a.shape[0]), idx] = 1

print(a)

Sortie :

[[1. 0. 0.]
 [0. 0. 1.]
 [1. 0. 0.]]

0voto

Karl Dailey Points 83

Pour les classes multiples, ou une solution plus généralisée, utilisez

np.argmax(y_hat,1)

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X