iT邦幫忙

2024 iThome 鐵人賽

DAY 23
0
AI/ ML & Data

輕鬆上手AI專案-影像分類到部署模型系列 第 23

[Day 23] 推論結果可視化:混淆矩陣

  • 分享至 

  • xImage
  •  

前言

昨天介紹評估推論(或者測試)結果的方法,今天要來介紹混淆矩陣(Confusion Matrix)。混淆矩陣也是在分類問題上常被使用的評估方法,顯示預測結果和真實值的比較,再利用一些工具將混淆矩陣繪製出來,更能看出推論結果,幫助模型的改善。

混淆矩陣

一個二分類的混淆矩陣如下:

預測為真 預測為假
實際為真 TP FN
實際為假 FP TN

對角線就是預測正確的數量。由混淆矩陣可以更好分析預測結果,對於結果的判讀不會由單一準確度結果做評斷。接下來介紹兩種方法,來繪製混淆矩陣,建議延續昨天的程式碼使用。

方法(一):Seaborn

Seaborn 為基於 Matplotlib 的 Python 視覺化工具庫,更專注於繪製統計圖表的功能。

import seaborn as sns
from sklearn.metrics import confusion_matrix
import matplotlib.pyplot as plt

# 定義混淆矩陣
cm = confusion_matrix(y_true, y_pred)

# 使用 seaborn 繪製
plt.figure(figsize=(8, 6))
sns.heatmap(cm, annot=True, fmt='d', cmap='Blues', 
            xticklabels=['black', 'grizzly', 'panda', 'polar', 'teddy'], 
            yticklabels=['black', 'grizzly', 'panda', 'polar', 'teddy'])
plt.xlabel('Predicted Labels')
plt.ylabel('True Labels')
plt.title('Confusion Matrix')

說明

使用 sklearn.metrics 中的 confusion_matrix 計算混淆矩陣:
https://ithelp.ithome.com.tw/upload/images/20240930/20166645MnrjAi6hCf.png
(使用 Spyder 查看 cm 變數的結果)
使用 seaborn.heatmap() 繪製熱圖(Heat Map),annot 設定為 True 會顯示對應數值,fmt 設定 'd' 表示以整數顯示,cmap 用來設定顏色系統,xticklabelsyticklabels 分別為 x 軸和 y 軸的標籤。

繪製結果

https://ithelp.ithome.com.tw/upload/images/20240930/20166645XzSlbPyutt.png

方法(二):ConfusionMatrixDisplay

來自 scikit-learn 的方法,功能是繪製混淆矩陣圖表:

from sklearn.metrics import confusion_matrix, ConfusionMatrixDisplay

# 定義混淆矩陣
cm = confusion_matrix(y_true, y_pred)

# 使用 ConfusionMatrixDisplay 繪製
disp = ConfusionMatrixDisplay(confusion_matrix=cm, 
                              display_labels=['black', 'grizzly', 'panda', 'polar', 'teddy'])
disp.plot(cmap='Blues')

說明

使用 ConfusionMatrixDisplay() 並設定混淆矩陣變數與標籤,再使用 plot() 設定顏色系統,就可以繪製混淆矩陣圖表了。

繪製結果

https://ithelp.ithome.com.tw/upload/images/20240930/20166645RF9P6zd62G.png

這樣推論結果是不是更一目了然了呢?顏色愈深表示數值愈大,也更方便分析推論結果。

模型的部分就在此告一段落,明天開始要介紹部署的方法了~/images/emoticon/emoticon69.gif

參考資料


上一篇
[Day 22] 評估模型測試結果
下一篇
[Day 24] 部署模型的方法 (1):Flask
系列文
輕鬆上手AI專案-影像分類到部署模型30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言