def generate_classification_report()

in builtin_algorithm_hpo_tabular/util/classification_report.py [0:0]


def generate_classification_report(y_real, 
                                   y_predict_proba, 
                                   decision_threshold=0.5, 
                                   class_names_list=None,
                                   title='Model report',
                                   plot_style='ggplot'):
    
    plt.style.use(plot_style)
    
    if class_names_list is None:
        class_names_list = ['Class 0', 'Class 1']
    
    # find out how many classes we have in the test set
    number_of_classes = len(np.unique(y_real))

    ml_report = 'Number of classes: ' + str(number_of_classes) + '\n'
    
    for i,class_name in enumerate(class_names_list):
        ml_report += str(i) + ': ' + str(class_name) + '\n'
        
    ml_report += '\nDecision threshold: ' + str(decision_threshold) + '\n'

    ml_report += '\n---------------------Performance--------------------\n\n'

    y_decision = y_predict_proba.copy()
    y_decision[y_decision>decision_threshold] = 1
    y_decision[y_decision<1] = 0
    y_decision = y_decision.astype(bool)

    # get initial classification report and more text in it
    metrics_report = metrics.classification_report(y_real, y_decision)
    metrics_ACC = metrics.accuracy_score(y_real, y_decision)
    metrics_report += ('\n Total accuracy = ' + 
                       str(round(metrics_ACC*100,2)) + '%')
    ml_report += metrics_report
    ml_report += '\n\n\n\n\n'

    # generate graphs
    fig, ax = plt.subplots(2, 2, figsize=(12,9))
    plot_text(ml_report, axis=ax[0,0])
    plot_confusion_matrix(metrics.confusion_matrix(y_real, y_decision),
                          class_names_list=class_names_list, axis=ax[0,1])
    plot_precision_recall_curve(y_real, y_predict_proba, axis=ax[1,0])
    plot_roc_curve(y_real, y_predict_proba, axis=ax[1,1])
    fig.suptitle(title, fontsize=15)
    fig.tight_layout()