python多分类混淆矩阵代码_深度学习自学记录(3)——两种多分类混淆矩阵的Python实现(含代码)...
深度學習自學記錄(3)——兩種多分類混淆矩陣的Python實現(含代碼),矩陣,樣本,模型,類別,真實
深度學習自學記錄(3)——兩種多分類混淆矩陣的Python實現(含代碼)
深度學習自學記錄(3)——兩種多分類混淆矩陣的Python實現(含代碼)1、什么是混淆矩陣2、分類模型評價指標3、兩種多分類混淆矩陣3.1直接打印出每一個類別的分類準確率。3.2打印具體的分類結果的數值4、總結
1、什么是混淆矩陣
深度學習中,混淆矩陣是ROC曲線繪制的基礎,同時它也是衡量分類型模型準確度中最基本,最直觀,計算最簡單的方法。它可以直觀地了解分類模型在每一類樣本里面表現,常作為模型評估的一部分。它可以非常容易的表明多個類別是否有混淆(也就是一個class被預測成另一個class)。
首先要明確幾個概念:
T或者F:該樣本 是否被正確分類。
P或者N:該樣本 原本是正樣本還是負樣本。
真正例(True Positive,TP):預測正確;模型預測也是正例,樣本的真實類別是正例,
真負例(True Negative,TN):預測正確:模型預測為負例,樣本的真實類別是負例,
偽正例(False Positive,FP):預測錯誤:模型預測為正例,樣本的真實類別是負例,
偽負例(False Negative,FN):預測錯誤;模型預測為負例,樣本的真實類別是正例,
將這四個指標一起呈現在表格中,就能得到如下這樣一個矩陣,我們稱它為混淆矩陣(Confusion Matrix),這里從其他博客偷了張圖:
在混線矩陣中,以對角線為分界線。以上圖為例子:對角線的位置表示預測正確,對角線以外的位置表示把樣本錯誤的預測為其他樣本。
2、分類模型評價指標
從混淆矩陣可以直觀地看出各個參數的數值大小。
查準率是在模型預測為正的所有樣本中,模型預測對的比重,即:“分類器認為是正類并且確實是正類的部分占所有分類器認為是正類的比例”。計算公式如下式所示:
Precision=TP/(TP+FP)
Precision=TP/(TP+FP)
Precision=TP/(TP+FP)
召回率是在真實值是正的所有樣本中,模型預測對的比重,即:“分類器認為是正類并且確實是正類的部分占所有確實是正類的比例”。計算公式如下式所示:
Recall=TP/(TP+FN)
Recall=TP/(TP+FN)
Recall=TP/(TP+FN)
F1-Score指標綜合了Precision與Recall的產出的結果。F1-Score的取值范圍從0到1的,1代表模型的輸出最好,0代表模型的輸出結果最差,計算公式如下式所示:
除了F1分數之外,F2分數和F0.5分數在統計學中也得到大量的應用。其中,F2分數中,召回率的權重高于精準率,而F0.5分數中,精準率的權重高于召回率。
3、兩種多分類混淆矩陣
多分類混淆矩陣根據不同需求可以繪制不同的矩陣:
1、直接打印出每一個類別的分類準確率。
2、打印具體的分類結果的數值,方便數據的分析和各類指標的計算
在介紹具體代碼之前,首先來介紹confusion_matrix()函數,它是Python中的sklearn庫提供的輸出矩陣數據的方法:
def confusion_matrix(y_true, y_pred, labels=None, sample_weight=None):
參數意義:
y_true: 是樣本真實分類結果,y_pred: 是樣本預測分類結果
y_pred:預測結果
labels:是所給出的類別,通過這個可對類別進行選擇
sample_weight : 樣本權重
3.1直接打印出每一個類別的分類準確率。# 顯示混淆矩陣
def plot_confuse(model, x_val, y_val):
# 獲得預測結果
predictions = predict(model,x_val)
#獲得真實標簽
truelabel = y_val.argmax(axis=-1) # 將one-hot轉化為label
cm = confusion_matrix(y_true=truelabel, y_pred=predictions)
plt.figure()
# 指定分類類別
classes = range(np.max(truelabel)+1)
title='Confusion matrix'
#混淆矩陣顏色風格
cmap=plt.cm.jet
cm = cm.astype('float') / cm.sum(axis=1)[:, np.newaxis] plt.imshow(cm, interpolation='nearest', cmap=cmap)
plt.title(title)
plt.colorbar()
tick_marks = np.arange(len(classes))
plt.xticks(tick_marks, classes, rotation=45)
plt.yticks(tick_marks, classes)
thresh = cm.max() / 2.
# 按照行和列填寫百分比數據
for i, j in itertools.product(range(cm.shape[0]), range(cm.shape[1])):
plt.text(j, i, '{:.2f}'.format(cm[i, j]), horizontalalignment="center",
color="white" if cm[i, j] > thresh else "black")
plt.tight_layout()
plt.ylabel('True label')
plt.xlabel('Predicted label')
plt.show()
3.2打印具體的分類結果的數值# 顯示混淆矩陣
def plot_confuse_data(model, x_val, y_val):
classes = range(0,6)
predictions = predict(model,x_val)
truelabel = y_val.argmax(axis=-1) # 將one-hot轉化為label
confusion = confusion_matrix(y_true=truelabel, y_pred=predictions)
#顏色風格為綠。。。。
plt.imshow(confusion, cmap=plt.cm.Greens)
# ticks 坐標軸的坐標點
# label 坐標軸標簽說明
indices = range(len(confusion))
# 第一個是迭代對象,表示坐標的顯示順序,第二個參數是坐標軸顯示列表
plt.xticks(indices, classes)
plt.yticks(indices, classes)
plt.colorbar()
plt.xlabel('Predicted label')
plt.ylabel('True label')
plt.title('Confusion matrix')
# plt.rcParams兩行是用于解決標簽不能顯示漢字的問題
plt.rcParams['font.sans-serif']=['SimHei'] plt.rcParams['axes.unicode_minus'] = False
# 顯示數據
for first_index in range(len(confusion)): #第幾行
for second_index in range(len(confusion[first_index])): #第幾列
plt.text(first_index, second_index, confusion[first_index][second_index])
# 顯示
plt.show()
4、總結
1、混淆矩陣是深度學習中分類模型最常用的評估指標。網上大部分都是顯示各類的分類正確率,不夠靈活。顯示具體數值靈活性大,可以計算自己想要的指標。
2、多分類的混淆矩陣中 查準率為主對角線上的值除以該值所在列的和;召回率等于主對角線上的值除以該值所在行的和。
作者:胖大海pyh以上就是關于對深度學習自學記錄(3)——兩種多分類混淆矩陣的Python實現(含代碼)的詳細介紹。歡迎大家對深度學習自學記錄(3)——兩種多分類混淆矩陣的Python實現(含代碼)內容提出寶貴意見
總結
以上是生活随笔為你收集整理的python多分类混淆矩阵代码_深度学习自学记录(3)——两种多分类混淆矩阵的Python实现(含代码)...的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 内存新选择:x79内存让你告别卡顿,存储
- 下一篇: 电脑维修师教你如何精准焊接ddr2内存颗