定义
混淆矩阵是有 TP、TN、 FP、FN组成的一个元组,这句话是不错的,看官网给定的代码!
>>> from sklearn.metrics import confusion_matrix
>>> y_true = [2, 0, 2, 2, 0, 1]
>>> y_pred = [0, 0, 2, 2, 0, 2]
>>> confusion_matrix(y_true, y_pred)
array([[2, 0, 0],
[0, 0, 1],
[1, 0, 2]])
初看,这混淆矩阵怎么是3行3列的呀?看不懂,再往下瞅瞅简单的,
>>> tn, fp, fn, tp = confusion_matrix([0, 1, 0, 1], [1, 1, 1, 0]).ravel()
>>> (tn, fp, fn, tp)
(0, 2, 1, 1)
初看不明白,细细琢磨,欸!confusion_matrix的输入是标签和预测的数据,
那么它们分别 是啥? 对号入座
[[0, 1, 0, 1] ,
[1, 1, 1, 0]] # -> 按位置对应 就变成了 [[0, 1], [1, 1], [0, 1], [1, 0]]
tn 就是 真实值是 0, 预测值也是 0 这个事件所发生的次数,
fp 自然就是 真实值为 0 预测值是 1的情况
fn 即 真实值为 1 预测值是 0 的情况啦
tp 就是 真实值是 1. 预测值也是 1 这种情况的次数
[0, 0] 出现零次 、[0, 1]出现两次、[1, 0]出现一次、[1, 1]出现一次,所以是[ 0,2,1,1]
所以在这个混淆矩阵中 tp 就是 是这个类并且预测对了的情况,当然这是二元的比较好理解。因为二维的,所得到的结果就是 2*2,才会有这四个值以及正类和负类之分。
那么我们回过头来看第一段代码。
理解了二元的,三元的也是如此,
[2, 0, 2, 2, 0, 1]
[0, 0, 2, 2, 0, 2] ->[[2, 0], [0, 0], [2,2],[2,2],[1, 2]]
#所得混淆矩阵如下
[1, 0, 0
0, 0, 1
1, 0, 2]
有三个类,那么混淆矩阵的值就变成了 3*3,其中,对角线中间的值都是判断正确的,其他位置上的都是判断错误的,只是错误的种类不同而已。就拿这个举例子,矩阵(x, y)上的值代表的是将x判断成y类的事件发生的数量,仅此而已。x与y的值相同那显然是判断对的咯!
仅为自己理解,随喜点赞!!!