Exemplo n.º 1
0
def plot_classification_report(classification_report, title, cmap='RdBu'):
    '''
    Plot scikit-learn classification report.
    Extension based on https://stackoverflow.com/a/31689645/395857 
    '''
    lines = classification_report.split('\n')

    classes = []
    plotMat = []
    support = []
    class_names = []
    for line in lines[2 : (len(lines) - 4)]:
        t = line.strip().split()
        if len(t) < 2: continue
        classes.append(t[0])
        v = []
        for x in t[1: len(t) - 2]:
            if t[1] != 'avg':
                v.append(float(x))
        support.append(int(t[-1]))
        class_names.append(t[0])
        plotMat.append(v)

    xlabel = 'Métricas'
    ylabel = 'Zonas'
    xticklabels = ['Precisión', 'Exhaustividad']
    yticklabels = ['{0} ({1})'.format(class_names[idx], sup) for idx, sup  in enumerate(support)]
    figure_width = 25
    figure_height = len(class_names) + 7
    correct_orientation = False
    heatmap(numpy.array(plotMat), title, xlabel, ylabel, xticklabels, yticklabels, figure_width, figure_height, correct_orientation, cmap=cmap)
Exemplo n.º 2
0
def plot_classification_report(classification_report, title='Classification Report ', cmap='RdBu'):
    
    lines = classification_report.split('\n')

    classes = []
    plotMat = []
    support = []
    class_names = []
    for line in lines[2 : (len(lines) - 2)]:
        t = line.strip().split()
        if len(t) < 2: continue
        classes.append(t[0])
        v = [float(x) for x in t[1: len(t) - 1]]
        support.append(int(t[-1]))
        class_names.append(t[0])
        print(v)
        plotMat.append(v)

    print('plotMat: {0}'.format(plotMat))
    print('support: {0}'.format(support))

    xlabel = 'Metrics'
    ylabel = 'Classes'
    xticklabels = ['Precision', 'Recall', 'F1-score']
    yticklabels = ['{0} ({1})'.format(class_names[idx], sup) for idx, sup  in enumerate(support)]
    figure_width = 25
    figure_height = len(class_names) + 7
    correct_orientation = False
    heatmap(np.array(plotMat), title, xlabel, ylabel, xticklabels, yticklabels, figure_width, figure_height, correct_orientation, cmap=cmap)
Exemplo n.º 3
0
def plot_classification_report(classification_report,
                               title='Classification report ',
                               cmap='RdBu',
                               figsize=(12, 9),
                               ax=None):
    '''
    Plot scikit-learn classification report.
    Extension based on http://stackoverflow.com/a/31689645/395857
    '''

    from matplotlib.cbook import MatplotlibDeprecationWarning
    import warnings
    warnings.simplefilter('ignore', MatplotlibDeprecationWarning)

    classes = []
    plotMat = []
    support = []
    class_names = []

    lines = classification_report.split('\n')
    for line in lines[2:(len(lines) - 1)]:
        t = line.strip().replace('avg / total', 'micro-avg').split()
        if len(t) < 2: continue
        classes.append(t[0])
        v = [float(x) * 100 for x in t[1:len(t) - 1]]
        support.append(int(t[-1]))
        class_names.append(t[0])
        plotMat.append(v)

    xlabel = 'Metrics'
    ylabel = 'Classes'
    xticklabels = ['Precision', 'Recall', 'F1-score']
    yticklabels = [
        '{0} ({1})'.format(class_names[idx], sup)
        for idx, sup in enumerate(support)
    ]
    #    figure_width = 16
    #    figure_height = len(class_names) + 8
    correct_orientation = True

    # Plot it out
    if ax is None:
        fig, ax = plt.subplots(figsize=figsize)
    else:
        fig = plt.gcf()
        fig.sca(ax)

    heatmap(np.array(plotMat),
            title,
            xlabel,
            ylabel,
            xticklabels,
            yticklabels,
            ax,
            correct_orientation,
            cmap=cmap)
Exemplo n.º 4
0
    def plot_classification_report(self,
                                   classification_report,
                                   title='Classification report ',
                                   cmap='RdYlGn'):
        '''
        Plot scikit-learn classification report.
        Extension based on https://stackoverflow.com/a/31689645/395857
        '''
        func_name = self.plot_classification_report.__name__
        lines = classification_report.split('\n')

        classes = []
        plotMat = []
        support = []
        class_names = []
        for line in lines[2:(len(lines) - 2)]:
            t = line.strip().split()
            if len(t) < 2: continue
            classes.append(t[0])
            v = [float(x) for x in t[1:len(t) - 1]]
            support.append(int(t[-1]))
            class_names.append(t[0])
            print(v)
            plotMat.append(v)

        self.verbose('plotMat: {0}'.format(plotMat), func_name)
        self.verbose('support: {0}'.format(support), func_name)

        xlabel, ylabel = 'Metrics', 'Classes'
        xticklabels = ['Precision', 'Recall', 'F1-score']
        yticklabels = [
            '{0} ({1})'.format(class_names[idx], sup)
            for idx, sup in enumerate(support)
        ]
        figure_width = 25
        figure_height = len(class_names) + 7
        correct_orientation = False
        ax = DataPlots.heatmap(np.array(plotMat),
                               title,
                               xlabel,
                               ylabel,
                               xticklabels,
                               yticklabels,
                               figure_width,
                               figure_height,
                               correct_orientation,
                               cmap=cmap)
        return ax
Exemplo n.º 5
0
def plot_classification_report(classification_report, model, accuracy):
    """
    Tämä funktio tulostaa luokitteluraportin taulukkoon
    """
    lines = classification_report.split('\n')
    plotMat = []
    class_names = []
    for line in lines[2:(len(lines) - 5)]:
        t = line.strip().split()
        if len(t) < 2: continue
        v = ['{0:.2f}'.format(float(x)) for x in t[1:len(t) - 1]]
        class_names.append(t[0])
        plotMat.append(v)
    lastline = lines[len(lines) - 2]
    t = lastline.strip().split()
    lastline_class_name = ['_'.join(t[0:2])]
    lastline_values = [['{0:.2f}'.format(float(x)) for x in t[2:len(t) - 1]]]
    fig, (ax1, ax2) = plt.subplots(2, sharey=True)
    xlabel = 'Metrics'
    ylabel = 'Classes'
    xticklabels = ['Precision', 'Recall', 'F1-score']
    yticklabels = [
        '      {}      '.format(class_names[i])
        for i in range(len(class_names))
    ]
    the_table = ax1.table(cellText=plotMat,
                          cellLoc='center',
                          rowLabels=yticklabels,
                          colLabels=xticklabels,
                          colWidths=[0.3 for x in range(len(xticklabels))],
                          loc=1)
    the_table1 = ax2.table(cellText=lastline_values,
                           cellLoc='center',
                           rowLabels=lastline_class_name,
                           colWidths=[0.3 for x in range(len(xticklabels))],
                           loc=1)
    ax1.axis('tight')
    ax1.axis('off')
    ax2.axis('tight')
    ax2.axis('off')
    accuracytext = 'Accuracy for classifier {}: {}'.format(model, accuracy)
    plt.text(-0.062, 0.00, accuracytext)
    ax1.set(title='Classification report for {}'.format(model))
Exemplo n.º 6
0
        from sklearn import metrics
        from sklearn.metrics import accuracy_score,confusion_matrix,classification_report
        from sklearn.cross_validation import cross_val_score
        from sklearn.metrics import precision_score
        Y_pred=best_estimator.predict(X_test)
        #评价模型
        accuracy_score = accuracy_score(Y_test,Y_pred)
        confusion_matrix = confusion_matrix(Y_test,Y_pred,labels=[0,1,2])
#        precision = metrics.precision_score(Y_test,Y_pred)#二分类
#        recall = metrics.recall_score(Y_test,Y_pred)#二分类
#        f1_score = metrics.f1_score(Y_test,Y_pred)#二分类
        precision = metrics.precision_score(Y_test,Y_pred,average="macro")#多分类
        recall = metrics.recall_score(Y_test,Y_pred,average="macro")#多分类
        f1_score = metrics.f1_score(Y_test,Y_pred,average="macro")#多分类
        classification_report = classification_report(Y_test,Y_pred)
        classification_report_split=classification_report.split()   #提取矩阵中的值
        endtime = time.time()
        '''
        输出文件
        '''
        
        out="\n 最优分类器:"+str(best_estimator)+\
              "\n The confusion matrix is:\n"+str(confusion_matrix)
        f=open('canshu.txt','a')
        print(out+'\n\n',file=f)
        f.close()

        #储存数据
        pred_result[str(name)]=np.transpose(Y_pred)
        evaluate_result.loc[str(name)]=[accuracy_score
                            ,precision