0

Je fais la classification multiclasse en utilisant l'approche de régression logistique. En fait, je sais que si j'utilise accuracy_score function() (par exemple, de la bibliothèque de sklearn) il me calculer la précision de la valeur nette à la valeur distincte comme ceci:Score de précision pour un vecteur de prédictions utilisant la régression logistique en Python

y_pred = [0, 2, 1, 3] 
y_true = [0, 1, 2, 3] 
accuracy_score(y_true, y_pred) 
0.5 

Mais je veux obtenir le accuracy_score_new() fonction d'un vecteur de meilleurs prédictions de régression logistique pour chaque étiquette (de predict_proba) et calcule si la vraie étiquette se trouve dans cet intervalle comme suit:

y_pred = [[0,1,3] [2,1,4], [1,2,5] [3,7,9]] 
y_true = [0, 1, 2, 3] 
accuracy_score_new(y_true, y_pred) 
1 

le accuracy_score_new dans cet exemple sera égal à 1 car le classificateur prédit que l'étiquette est dans l'intervalle. Comment cette fonction peut-elle être effectuée?

+0

Voulez-vous utiliser la nouvelle fonction dans une classe scikit ou voulez juste utiliser vous-même pour l'impression de la nouvelle précision. Si ce dernier, alors vous pouvez écrire du code python simple pour cela. Juste itérer sur les deux tableaux. –

Répondre

1

La précision est juste (valeurs correspondantes/valeurs totales).

Donc, dans votre cas, il sera quelque chose comme:

def accuracy_score_new(y_pred, y_true): 
    matched = 0 
    for y_p, y_t in zip(y_pred, y_true): 
     if y_t in y_p: 
      matched = matched + 1 

    return (matched/(float) len(y_true)) 
1

Oui, vous pouvez le faire en utilisant la fonction make_scorer dans sklearn. L'idée est que vous définissiez votre fonction personnalisée en supposant qu'elle récupère les deux paramètres y_true et y_pred. Vous pouvez également ajouter des paramètres supplémentaires si vous le souhaitez.

Voici un exemple: Custom scoring function

Voici un autre exemple: Using MSE and R2 score at the same time

This answer pourrait être d'une certaine aide aussi.