scikit learn output metrics.classification_report into CSV/tab-delimited format

后端 未结 17 2179
青春惊慌失措
青春惊慌失措 2021-01-31 03:08

I\'m doing a multiclass text classification in Scikit-Learn. The dataset is being trained using the Multinomial Naive Bayes classifier having hundreds of labels. Here\'s an extr

17条回答
  •  不思量自难忘°
    2021-01-31 04:07

    Along with example input-output, here's the other function metrics_report_to_df(). Implementing precision_recall_fscore_support from Sklearn metrics should do:

    # Generates classification metrics using precision_recall_fscore_support:
    from sklearn import metrics
    import pandas as pd
    import numpy as np; from numpy import random
    
    # Simulating true and predicted labels as test dataset: 
    np.random.seed(10)
    y_true = np.array([0]*300 + [1]*700)
    y_pred = np.random.randint(2, size=1000)
    
    # Here's the custom function returning classification report dataframe:
    def metrics_report_to_df(ytrue, ypred):
        precision, recall, fscore, support = metrics.precision_recall_fscore_support(ytrue, ypred)
        classification_report = pd.concat(map(pd.DataFrame, [precision, recall, fscore, support]), axis=1)
        classification_report.columns = ["precision", "recall", "f1-score", "support"] # Add row w "avg/total"
        classification_report.loc['avg/Total', :] = metrics.precision_recall_fscore_support(ytrue, ypred, average='weighted')
        classification_report.loc['avg/Total', 'support'] = classification_report['support'].sum() 
        return(classification_report)
    
    # Provide input as true_label and predicted label (from classifier)
    classification_report = metrics_report_to_df(y_true, y_pred)
    
    # Here's the output (metrics report transformed to dataframe )
    In [1047]: classification_report
    Out[1047]: 
               precision    recall  f1-score  support
    0           0.300578  0.520000  0.380952    300.0
    1           0.700624  0.481429  0.570703    700.0
    avg/Total   0.580610  0.493000  0.513778   1000.0
    

提交回复
热议问题