一、混淆矩陣的定義
混淆矩陣也稱誤差矩陣或混淆矩陣,是用於描述分類模型預測結果的分佈情況的一個表格。其行表示真實值,列表示預測值,表格中的每一個元素表示真實值等於行號,預測值等於列號的樣本數目。例如:
Predicted True False Actual True TP FN False FP TN
其中TP是真正例,TN是真負例,FP是假正例,FN是假負例。
二、混淆矩陣的計算方法
對於二分類問題,我們可以通過分類器的預測結果和樣本的真實標籤計算混淆矩陣。具體的計算方法如下:
def confusion_matrix(y_true, y_pred): tp = np.sum((y_true == 1) & (y_pred == 1)) tn = np.sum((y_true == 0) & (y_pred == 0)) fp = np.sum((y_true == 0) & (y_pred == 1)) fn = np.sum((y_true == 1) & (y_pred == 0)) return np.array([[tn, fp], [fn, tp]])
其中y_true表示樣本的真實標籤,y_pred表示分類器的預測結果。
三、混淆矩陣的應用
混淆矩陣是衡量分類器性能的重要指標之一,可以用於計算分類器的準確率、召回率、精確率和F1-score等指標。
1. 準確率
準確率指分類器正確分類的樣本數佔總樣本數的比例,可以用混淆矩陣計算:
def accuracy(y_true, y_pred): cm = confusion_matrix(y_true, y_pred) return (cm[0, 0] + cm[1, 1]) / np.sum(cm)
2. 召回率
召回率指分類器正確預測為正例的正例樣本數占所有真實正例樣本數的比例,可以用混淆矩陣計算:
def recall(y_true, y_pred): cm = confusion_matrix(y_true, y_pred) return cm[1, 1] / (cm[1, 0] + cm[1, 1])
3. 精確率
精確率指分類器預測為正例的樣本中實際為正例的比例,可以用混淆矩陣計算:
def precision(y_true, y_pred): cm = confusion_matrix(y_true, y_pred) return cm[1, 1] / (cm[0, 1] + cm[1, 1])
4. F1-score
F1-score是精確率和召回率的調和平均數:
def f1_score(y_true, y_pred): p = precision(y_true, y_pred) r = recall(y_true, y_pred) return 2 * p * r / (p + r)
四、混淆矩陣的改進
混淆矩陣在某些情況下可能會存在不合理的問題。例如,在樣本的正負樣本不平衡的情況下,準確率可能會高但分類器的性能不佳。為了解決這個問題,我們可以使用加權混淆矩陣。具體的計算方法如下:
def weighted_confusion_matrix(y_true, y_pred, class_weights): cm = confusion_matrix(y_true, y_pred) w_cm = np.zeros_like(cm, dtype=float) w_cm[0, 0] = cm[0, 0] * class_weights[0, 0] w_cm[0, 1] = cm[0, 1] * class_weights[0, 1] w_cm[1, 0] = cm[1, 0] * class_weights[1, 0] w_cm[1, 1] = cm[1, 1] * class_weights[1, 1] return w_cm def weighted_f1_score(y_true, y_pred, class_weights): w_cm = weighted_confusion_matrix(y_true, y_pred, class_weights) p = weighted_precision(y_true, y_pred, class_weights) r = weighted_recall(y_true, y_pred, class_weights) return 2 * p * r / (p + r) def weighted_precision(y_true, y_pred, class_weights): w_cm = weighted_confusion_matrix(y_true, y_pred, class_weights) return w_cm[1, 1] / (w_cm[0, 1] + w_cm[1, 1]) def weighted_recall(y_true, y_pred, class_weights): w_cm = weighted_confusion_matrix(y_true, y_pred, class_weights) return w_cm[1, 1] / (w_cm[1, 0] + w_cm[1, 1])
其中class_weights表示每個類別的權重,可以根據實際應用給定不同的值。
五、總結
混淆矩陣是分類器性能評估的重要工具之一,可以計算多個指標來評價模型性能。在實際應用中,可以針對樣本不平衡等情況使用加權混淆矩陣進行改進,以更好地評估模型性能。
原創文章,作者:KTPLF,如若轉載,請註明出處:https://www.506064.com/zh-hk/n/371607.html