混淆矩陣
(1)對(duì)于二分類(lèi)
TP(True Positive):將正類(lèi)預(yù)測(cè)為正類(lèi)數(shù),真實(shí)為0,預(yù)測(cè)也為0
FN(False Negative):將正類(lèi)預(yù)測(cè)為負(fù)類(lèi)數(shù),真實(shí)為0,預(yù)測(cè)為1
FP(False Positive):將負(fù)類(lèi)預(yù)測(cè)為正類(lèi)數(shù), 真實(shí)為1,預(yù)測(cè)為0
TN(True Negative):將負(fù)類(lèi)預(yù)測(cè)為負(fù)類(lèi)數(shù),真實(shí)為1,預(yù)測(cè)也為1
則混淆矩陣如下:
(2)對(duì)于多分類(lèi)
多分類(lèi)不再有正例與反例之分,我們?cè)O(shè)為類(lèi)別1,類(lèi)別2,類(lèi)別3,混淆矩陣如下:
import numpy as np
import copy
import matplotlib.pyplot as plt
import random
def confusion_matrix(y_true, y_pred, n):
matrix = np.zeros((n, n))
if n == 2: # 二分類(lèi)
for i in range(len(y_true)):
row = int(y_true[i]-1)
col = int(y_pred[i]-1)
matrix[row, col] += 1
else: # 多分類(lèi)
for i in range(len(y_true)):
row = int(y_true[i])
col = int(y_pred[i])
matrix[row, col] += 1
return matrix
精準(zhǔn)率和召回率
(1)對(duì)于二分類(lèi)
精確率Precision=TP/(TP+FP),召回率recall= TP/(TP+FN)
(2)對(duì)于多分類(lèi)
多分類(lèi)不再擁有正例與反例之分,因此精確率與召回率必須針對(duì)具體某一類(lèi)別,但在計(jì)算某一類(lèi)別的精確率和召回率依舊可以將一個(gè)nn的混淆矩陣壓縮成二分類(lèi)的混淆矩陣去求。以上述三分類(lèi)混淆矩陣為例,求類(lèi)別1的精確率與召回率。33混淆矩陣轉(zhuǎn)換成如下2*2混淆矩陣:
ROC曲線(xiàn)
(1)對(duì)于二分類(lèi)
生成一個(gè)ROC曲線(xiàn),只需要真正率(TPR)和假正率(FPR)。TPR決定了一個(gè)分類(lèi)器在所有正例樣本中能正確區(qū)分的正例的性能.而FPR是決定了在所有假例的樣本中有多少假正例的判斷. ROC曲線(xiàn)中分別將FPR和TPR定義為x和y軸。AUC即ROC曲線(xiàn)下的面積。
(2)對(duì)于多分類(lèi)
對(duì)于多分類(lèi)最大的問(wèn)題就是沒(méi)有正例與假例之分,也沒(méi)有真正率與假正率之說(shuō),ROC曲線(xiàn)也需要對(duì)應(yīng)具體的某一類(lèi)別得出。因此我提出了上述將多分類(lèi)的混淆矩陣壓縮成二分類(lèi)混淆矩陣的方法,以此來(lái)計(jì)算真正與假正率。這樣和二分類(lèi)統(tǒng)一起來(lái),方便理解與編代碼。
def roc(y_true, y_pred):
sort_pred = copy.deepcopy(y_pred)
sort_pred.sort(reverse=True)
TPR = []
FPR = []
for i in range(len(sort_pred)):
threshold = sort_pred[i]
label_pred = np.array(copy.deepcopy(y_pred))
label_true = np.array(copy.deepcopy(y_true))
label_pred[label_pred > threshold] = 1
label_pred[label_pred <= threshold] = 0
label_true[label_true != 1] = 0
matrix = confusion_matrix(list(label_true), list(label_pred), 2)
tpr = matrix[0][0]/(matrix[0][0]+matrix[0][1])
fpr = matrix[1][0]/(matrix[1][0]+matrix[1][1])
TPR.append(tpr)
FPR.append(fpr)
x = np.array(FPR)
y = np.array(TPR)
plt.plot(x, y)
plt.show()
簡(jiǎn)單測(cè)試一下文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-812345.html
random.seed(0)
y_pred = [0.5+random.uniform(-0.2, 0.2) for _ in range(100)]
y_true = [random.randint(0, 3) for _ in range(100)]
roc(y_true, y_pred)
完整代碼:https://github.com/robin-hlt/Machine-Learning-Confusion-Matrix-and-ROC文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-812345.html
到了這里,關(guān)于機(jī)器學(xué)習(xí) | 混淆矩陣和ROC曲線(xiàn)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!