混淆矩阵
(1)对于二分类
TP(True Positive):将正类预测为正类数,真实为0,预测也为0
FN(False Negative):将正类预测为负类数,真实为0,预测为1
FP(False Positive):将负类预测为正类数, 真实为1,预测为0
TN(True Negative):将负类预测为负类数,真实为1,预测也为1
则混淆矩阵如下:
(2)对于多分类
多分类不再有正例与反例之分,我们设为类别1,类别2,类别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: # 二分类
for i in range(len(y_true)):
row = int(y_true[i]-1)
col = int(y_pred[i]-1)
matrix[row, col] += 1
else: # 多分类
for i in range(len(y_true)):
row = int(y_true[i])
col = int(y_pred[i])
matrix[row, col] += 1
return matrix
精准率和召回率
(1)对于二分类
精确率Precision=TP/(TP+FP),召回率recall= TP/(TP+FN)
(2)对于多分类
多分类不再拥有正例与反例之分,因此精确率与召回率必须针对具体某一类别,但在计算某一类别的精确率和召回率依旧可以将一个nn的混淆矩阵压缩成二分类的混淆矩阵去求。以上述三分类混淆矩阵为例,求类别1的精确率与召回率。33混淆矩阵转换成如下2*2混淆矩阵:
ROC曲线
(1)对于二分类
生成一个ROC曲线,只需要真正率(TPR)和假正率(FPR)。TPR决定了一个分类器在所有正例样本中能正确区分的正例的性能.而FPR是决定了在所有假例的样本中有多少假正例的判断. ROC曲线中分别将FPR和TPR定义为x和y轴。AUC即ROC曲线下的面积。
(2)对于多分类
对于多分类最大的问题就是没有正例与假例之分,也没有真正率与假正率之说,ROC曲线也需要对应具体的某一类别得出。因此我提出了上述将多分类的混淆矩阵压缩成二分类混淆矩阵的方法,以此来计算真正与假正率。这样和二分类统一起来,方便理解与编代码。
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()
简单测试一下文章来源:https://www.toymoban.com/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文章来源地址https://www.toymoban.com/news/detail-812345.html
到了这里,关于机器学习 | 混淆矩阵和ROC曲线的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!