Beispiel #1
0
def plot_confusion_matrix(y_true, y_pred, labels):

    import numpy as np
    import matplotlib.pyplot as plt
    from sklearn.metrics import confusion_matrix
    cmap = plt.cm.binary
    cm = confusion_matrix(y_true, y_pred)
    tick_marks = np.array(range(len(labels))) + 0.5
    np.set_printoptions(precision=2)
    cm_normalized = cm.astype('float') / cm.sum(axis=1)[:, np.newaxis]
    plt.figure(figsize=(10, 8), dpi=120)
    ind_array = np.arange(len(labels))
    x, y = np.meshgrid(ind_array, ind_array)
    intFlag = 0  # 标记在图片中对文字是整数型还是浮点型
    for x_val, y_val in zip(x.flatten(), y.flatten()):
        #

        if (intFlag):
            c = cm[y_val][x_val]
            plt.text(x_val,
                     y_val,
                     "%d" % (c, ),
                     color='red',
                     fontsize=8,
                     va='center',
                     ha='center')

        else:
            c = cm_normalized[y_val][x_val]
            if (c > 0.01):
                #这里是绘制数字,可以对数字大小和颜色进行修改
                plt.text(x_val,
                         y_val,
                         "%0.2f" % (c, ),
                         color='red',
                         fontsize=7,
                         va='center',
                         ha='center')
            else:
                plt.text(x_val,
                         y_val,
                         "%d" % (0, ),
                         color='red',
                         fontsize=7,
                         va='center',
                         ha='center')
    if (intFlag):
        plt.imshow(cm, interpolation='nearest', cmap=cmap)
    else:
        plt.imshow(cm_normalized, interpolation='nearest', cmap=cmap)
    plt.gca().set_xticks(tick_marks, minor=True)
    plt.gca().set_yticks(tick_marks, minor=True)
    plt.gca().xaxis.set_ticks_position('none')
    plt.gca().yaxis.set_ticks_position('none')
    plt.grid(True, which='minor', linestyle='-')
    plt.gcf().subplots_adjust(bottom=0.15)
    plt.title('')
    plt.colorbar()
    xlocations = np.array(range(len(labels)))
    plt.xticks(xlocations, labels, rotation=90)
    plt.yticks(xlocations, labels)
    plt.ylabel('Index of True Classes')
    plt.xlabel('Index of Predict Classes')
    #plt.savefig('confusion_matrix.png', dpi=300)
    plt.show()
    from Evaluator import Evaluator
    ev = Evaluator(2, cm)
    pa = ev.Pixel_Accuracy()
    pac = ev.Pixel_Accuracy_Class()
    miou = ev.Mean_Intersection_over_Union()
    iou = ev.Class_IOU()
    print('\n Pixel_Accuracy:', pa, '\n Pixel_Accuracy_Class:', pac,
          '\n Mean_Intersection_over_Union:', miou, '\n Class_IOU:', iou)