混淆矩陣?

本案例使用混淆矩陣評估鳶尾花數據集上分類器輸出質量。對角線元素表示預測標簽等于真實標簽的點數,而非對角線元素則是分類器未正確標記的點。混淆矩陣的對角線值越高越好,表明正確的預測越多。

這些圖按類支持尺寸(class support size,即每個類中的樣本量)顯示了歸一化后及未歸一化的混淆矩陣。在類別不平衡的情況下,這種歸一化可能帶來有趣的結果,可以對哪個類被錯誤分類具有更直觀的解釋。

在這里,結果并不如我們預期的那樣好,因為我們選擇的正則化參數C并不是最好的選擇。在現實生活的應用中,通常使用超參數的調參來選擇此參數。

輸出:

Confusion matrix, without normalization
[[13  0  0]
 [ 0 10  6]
 [ 0  0  9]]

Normalized confusion matrix
[[1.   0.   0.  ]
 [0.   0.62 0.38]
 [0.   0.   1.  ]]

輸入:

print(__doc__)

import numpy as np
import matplotlib.pyplot as plt

from sklearn import svm, datasets
from sklearn.model_selection import train_test_split
from sklearn.metrics import plot_confusion_matrix

# 導入一些數據來進行操作
iris = datasets.load_iris()
X = iris.data
y = iris.target
class_names = iris.target_names

# 將數據分割為訓練集和測試集
X_train, X_test, y_train, y_test = train_test_split(X, y, random_state=0)

# 使用過于規范化(C太低)的模型運行分類器,以查看對結果的影響
classifier = svm.SVC(kernel='linear', C=0.01).fit(X_train, y_train)

np.set_printoptions(precision=2)

# 繪制沒有歸一化的混淆矩陣
titles_options = [("Confusion matrix, without normalization"None),
                  ("Normalized confusion matrix"'true')]
for title, normalize in titles_options:
    disp = plot_confusion_matrix(classifier, X_test, y_test,
                                 display_labels=class_names,
                                 cmap=plt.cm.Blues,
                                 normalize=normalize)
    disp.ax_.set_title(title)

    print(title)
    print(disp.confusion_matrix)

plt.show()

腳本的總運行時間:(0分鐘0.213秒)