Python将计算后的Precision,混淆矩阵,f1-score,mIOU写入Excel中

直接上代码,一看很清楚

import numpy as np
import cv2 as cv
from sklearn import metrics
import xlwt as excel
from decimal import Decimal

 

def cal_various_metrics(name='data'):
    file = excel.Workbook(encoding='utf-8')
    table1 = file.add_sheet(name)
    table_raw = 0  # 表从第一行开始记录数据
    data_path = 'C:\\Users\\zl\\Desktop\\test_data\\'
    pre_img = cv.imread(data_path + 'pre\\top_mosaic_09cm_area30_pre_pj.tif', cv.IMREAD_GRAYSCALE)
    label = cv.imread(data_path + 'label\\top_mosaic_09cm_area30_lb.tif', cv.IMREAD_GRAYSCALE)
    confu_mat = metrics.confusion_matrix(label.reshape(-1), pre_img.reshape(-1))
    confu_mat = confu_mat.astype(np.float32)  # int32-float32
    raw, _ = confu_mat.shape
    '''计算归一化到0-1的混淆矩阵;并写出到Excel中'''
    col_sum = np.sum(confu_mat, axis=1)  # 按行求和
    # print(col_sum)
    for i in range(raw):
        # print(col_sum[i])
        confu_mat[i, :] = confu_mat[i, :]/col_sum[i]
    # print(confu_mat)
    # print(np.sum(confu_mat, axis=1))
    # 将混淆矩阵写入excel中
    table1.write(table_raw, 0, 'confusion_matrix:0-1')
    tp = []  # 每一类的精度
    fn = np.sum(confu_mat, axis=0)  # 实际预测结果中各类的错误判别(这里把各类的tp包括,后面减去)
    for i in range(raw):
        table_raw = table_raw + 1
        tp.append(confu_mat[i, i])
        for j in range(raw):
            table1.write(table_raw, j, Decimal(float(confu_mat[i, j])).quantize(Decimal("0.000")))
    # 计算f1-score
    tp = np.array(tp)
    fn = fn - tp
    fp = 1 - tp
    # 计算并写出precision,f1-score,f1-m以及mIOU
    table_raw = table_raw + 1
    table1.write(table_raw, 0, 'precision')
    f1_m = []
    iou_m = []
    for i in range(raw):
        # 写出precision
        table1.write(table_raw+1, i, Decimal(float(tp[i])).quantize(Decimal("0.000")))
        # 写出f1-score
        f1 = tp[i]*2/(tp[i]*2 + fp[i] + fn[i])
        f1_m.append(f1)
        iou = tp[i]/(tp[i] + fp[i] + fn[i])
        iou_m.append(iou)
        table1.write(table_raw+2, i, Decimal(float(f1)).quantize(Decimal("0.000")))
    f1_m = np.array(f1_m)
    table1.write(table_raw + 3, 0, 'f1-m')
    table1.write(table_raw + 3, 1, Decimal(float(np.mean(f1_m))).quantize(Decimal("0.000")))
    iou_m = np.array(iou_m)
    table1.write(table_raw + 4, 0, 'mIOU')
    table1.write(table_raw + 4, 1, Decimal(float(np.mean(iou_m))).quantize(Decimal("0.000")))
    file.save(data_path + name + '.xls')

if __name__=="__main__":

    cal_various_metrics()
 

结果:Python将计算后的Precision,混淆矩阵,f1-score,mIOU写入Excel中_第1张图片

 

你可能感兴趣的:(Python)