日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

动手画混淆矩阵(Confusion Matrix)(含代码)

發(fā)布時(shí)間:2024/1/8 编程问答 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 动手画混淆矩阵(Confusion Matrix)(含代码) 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

  • 1、混淆矩陣:Confusion Matrix
  • 2、怎么畫(huà)(新)?
  • 3、怎么用?

網(wǎng)上關(guān)于混淆矩陣的代碼參差不齊,沒(méi)找到可用的線程的代碼,所以自己嘗試寫(xiě)了下

1、混淆矩陣:Confusion Matrix

首先它長(zhǎng)這樣:

怎么看?
Confusion Matrix最廣泛的應(yīng)用應(yīng)該是分類,比如圖中是7分類的真實(shí)標(biāo)簽和預(yù)測(cè)標(biāo)簽的效果。
首先圖中表明了縱軸是truth label,橫軸是predicted label,那么對(duì)于第一行第一個(gè)0.60的含義是:本來(lái)是angry標(biāo)簽的圖,我的模型正確分類成angry的比例是60%,也即是angry這一類模型分類正確的精度只有60%。同時(shí)模型將angry分類成了happy的圖占比0.04%,其他的以此類推。

注意:因?yàn)楸旧硎莂ngry,模型預(yù)測(cè)成7種類的數(shù)量占比。所以每一行的和為100%。

同時(shí)對(duì)于fear標(biāo)簽,模型分類成fear的占比41%,分類成sad的占比為20%,我們可以認(rèn)為模型不能很好區(qū)分fear和sad兩種類別。

2、怎么畫(huà)(新)?

這里直接給出代碼,在下一節(jié)中直接使用即可

import numpy as np import matplotlib.pyplot as plt from sklearn.metrics import confusion_matrixdef draw_confusion_matrix(label_true, label_pred, label_name, normlize, title="Confusion Matrix", pdf_save_path=None, dpi=100):"""@param label_true: 真實(shí)標(biāo)簽,比如[0,1,2,7,4,5,...]@param label_pred: 預(yù)測(cè)標(biāo)簽,比如[0,5,4,2,1,4,...]@param label_name: 標(biāo)簽名字,比如['cat','dog','flower',...]@param normlize: 是否設(shè)元素為百分比形式@param title: 圖標(biāo)題@param pdf_save_path: 是否保存,是則為保存路徑pdf_save_path=xxx.png | xxx.pdf | ...等其他plt.savefig支持的保存格式@param dpi: 保存到文件的分辨率,論文一般要求至少300dpi@return:example:draw_confusion_matrix(label_true=y_gt,label_pred=y_pred,label_name=["Angry", "Disgust", "Fear", "Happy", "Sad", "Surprise", "Neutral"],normlize=True,title="Confusion Matrix on Fer2013",pdf_save_path="Confusion_Matrix_on_Fer2013.png",dpi=300)"""cm = confusion_matrix(label_true, label_pred)if normlize:row_sums = np.sum(cm, axis=1) # 計(jì)算每行的和cm = cm / row_sums[:, np.newaxis] # 廣播計(jì)算每個(gè)元素占比plt.imshow(cm, cmap='Blues')plt.title(title)plt.xlabel("Predict label")plt.ylabel("Truth label")plt.yticks(range(label_name.__len__()), label_name)plt.xticks(range(label_name.__len__()), label_name, rotation=45)plt.tight_layout()plt.colorbar()for i in range(label_name.__len__()):for j in range(label_name.__len__()):color = (1, 1, 1) if i == j else (0, 0, 0) # 對(duì)角線字體白色,其他黑色value = float(format('%.2f' % cm[i, j]))plt.text(i, j, value, verticalalignment='center', horizontalalignment='center', color=color)# plt.show()if not pdf_save_path is None:plt.savefig(pdf_save_path, bbox_inches='tight',dpi=dpi)

3、怎么用?

給出一個(gè)簡(jiǎn)單的實(shí)例:

labels_name=['angry', 'disgust', 'fear', 'happy', 'sad', 'surprise', 'neutral']y_gt=[] y_pred=[] for index, (labels, imgs) in enumerate(test_loader):labels_pd = model(imgs)predict_np = np.argmax(labels_pd.cpu().detach().numpy(), axis=-1) # array([0,5,1,6,3,...],dtype=int64)labels_np = labels.numpy() # array([0,5,0,6,2,...],dtype=int64)y_pred.append(labels_np)y_gt.append(labels_np)draw_confusion_matrix(label_true=y_gt, # y_gt=[0,5,1,6,3,...]label_pred=y_pred, # y_pred=[0,5,1,6,3,...]label_name=["An", "Di", "Fe", "Ha", "Sa", "Su", "Ne"],normlize=True,title="Confusion Matrix on Fer2013",pdf_save_path="Confusion_Matrix_on_Fer2013.jpg",dpi=300)
  • cpu().detach():從device上獲取數(shù)據(jù)
  • .numpy():將tensor類型轉(zhuǎn)換為numpy類型

在我的模型上的結(jié)果:

總結(jié)

以上是生活随笔為你收集整理的动手画混淆矩阵(Confusion Matrix)(含代码)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。