2017-08-17 2 views
0

Je souhaite implémenter la métrique de mesure F dans python afin de gérer les classes multiples pour les valeurs prédites. En fait, les valeurs prédites y_pred sont multi-classes et les valeurs corrigées sont une classe.Implémentation de la métrique F-measure lorsque les valeurs prédites sont multi-classes

Exemple:

y_pred = [[11,12], 12, 12, [11,12], ...]

y_true = [11, 12, 11, 12, .. .]

Comment puis-je calculer la mesure F dans ce cas? et comment l'implémenter?

J'ai testé le code suivant (fondé en https://stats.stackexchange.com/questions/21551/how-to-compute-precision-recall-for-multiclass-multilabel-classification) avec deux fichiers file1.csv (y compris toutes les classes de prédiction, chaque ligne peut contenir plus d'une classe) et file2.csv (y compris toutes les valeurs corrigées, chaque ligne en contient une seule class):

import pandas as pd 

def precision(y_true, y_pred): 
    i = set(y_true).intersection(y_pred)  
    len1 = len(y_pred)  
    if len1 == 0: 
     return 0 
    else: 
     return len(i)/len1 


def recall(y_true, y_pred): 
    i = set(y_true).intersection(y_pred) 
    return len(i)/len(y_true) 


def f1(y_true, y_pred): 
    p = precision(y_true, y_pred) 
    r = recall(y_true, y_pred) 
    if p + r == 0: 
     return 0 
    else: 
     return 2 * (p * r)/(p + r) 


if __name__ == '__main__': 
    y_pred_df = pd.read_csv('file1.csv', skipinitialspace=True, sep='\t', header=None) 
    y_pred = y_pred_df.values 

    y_true_df = pd.read_csv('file2.csv', header=None) 
    y_true = y_true_df.values 


    print(f1(y_true[:,0], y_pred[:,0])) 

Le code ci-dessus ne fonctionne pas. Comment puis-je implémenter F-measure dans mon cas?

Merci beaucoup,

+0

Répondu à mon commentaire – Quickbeam2k1

+0

Pourriez-vous dire s'il vous plaît, ce qui ne fonctionne pas spécifiquement? Y a-t-il un message d'erreur? Le résultat est-il faux? À quoi ressemble votre ensemble de données? – Quickbeam2k1

Répondre

1

Pourquoi ne pas utiliser le déjà mis en œuvre f1-score? Si vous voulez avoir une métrique qui fonctionne bien avec scikit-learn, vous pouvez utiliser la fonction make_scorer. En outre, vérifiez la section model-evaluation dans les documents.