混淆矩阵(confusion matrix)理解

在机器学习中,当我们使用预先分配好的训练集训练好一个模型后,此时我们会使用预先分配好的测试集来检测我们训练好的这个模型怎么样?评价模型好坏的指标有很多,具体可以参见我以前的一篇博客: 如何理解误识率(FAR)拒识率(FRR),TPR,FPR以及ROC曲线,很常见的一个指标便是ROC曲线,它是在不同阈值的前提下以fpr以横坐标、tpr为纵坐标的二维坐标图。

当我们用测试集去测试模型好坏时,输出会是一个匹配分数矩阵,那怎么根据这个匹配分数矩阵来判断我们的测试集有没有分对呢,常见的解决方案是我们将这个匹配分数矩阵里的值从低到高分别设定为阈值,针对每一个阈值,与匹配分数矩阵同样大小的标签矩阵对比分别计算此时的tpr以及fpr,最后会得到一组tpr以及fpr值,根据这组tpr以及fpr值就可以画出ROC曲线,由该ROC曲线就可以判断我们模型的好坏。

阈值唯一确定之后,那么我们的模型也就唯一确定了,针对测试集的输入,fpr以及tpr也唯一确定,为了更好的可视化我们的分类结果,我们引入混淆矩阵的概念。


在人工智能中,混淆矩阵(confusion matrix)是可视化工具,特别用于监督学习,在无监督学习一般叫做匹配矩阵。在图像精度评价中,主要用于比较分类结果和实际测得值,可以把分类结果的精度显示在一个混淆矩阵里面。混淆矩阵是通过将每个实测像元的位置和分类与分类图像中的相应位置和分类相比较计算的。

如有150个样本数据,这些数据分成3类,每类50个。分类结束后得到的混淆矩阵为:

这里写图片描述

每一行之和为50,表示50个样本,第一行说明类1的50个样本有43个分类正确,5个错分为类2,2个错分为类3。

混淆矩阵的每一列代表了预测类别,每一列的总数表示预测为该类别的数据的数目;每一行代表了数据的真实归属类别,每一行的数据总数表示该类别的数据实例的数目。每一列中的数值表示真实数据被预测为该类的数目:如下图,第一行第一列中的43表示有43个实际归属第一类的实例被预测为第一类,同理,第二行第一列的2表示有2个实际归属为第二类的实例被错误预测为第一类。

那么针对以上的混淆矩阵,我们怎样取计算fpr以及tpr值呢?

针对类1:共有150个测试样本,类1为50个,那类2和类3就属于其他样本共为100个,此时 tpr=TPTP+FN=4343+7=0.86 t p r = T P T P + F N = 43 43 + 7 = 0.86 fpr=FPFP+TN=22+98=0.02 f p r = F P F P + T N = 2 2 + 98 = 0.02 。嗯,该模型在fpr为0.02时,tpr达到了0.86,还算可以啊。
针对类2和类3:计算方式和类1一样,这里不再赘述。

ROC曲线一般针对的是二分类问题,那么对于我们这里的3分类问题怎样画ROC曲线,采取的策略是针对类1、类2以及类3这3个二分类器,分别计算其在特定阈值下fpr以及tpr的均值即可以画ROC曲线。

参考:
https://baike.baidu.com/item/%E6%B7%B7%E6%B7%86%E7%9F%A9%E9%98%B5
https://blog.csdn.net/vesper305/article/details/44927047
https://www.zhihu.com/question/36883196
http://www.cnblogs.com/cnkai/p/7755134.html

  • 18
    点赞
  • 60
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
R语言中的caret包是一个强大的机器学习框架,其中包含了许多用于模型训练和评估的函数。其中一个非常重要的函数就是confusionMatrix(),用于计算混淆矩阵和模型评估指标。 混淆矩阵是一个矩阵,用于衡量模型在不同类别上的预测准确性。在二分类问题中,混淆矩阵有4个重要的指标:真正例(TP)、真负例(TN)、假正例(FP)和假负例(FN)。真正例表示被正确预测为正例的观测数量,真负例表示被正确预测为负例的观测数量,假正例表示被错误预测为正例的观测数量,假负例表示被错误预测为负例的观测数量。 使用caret包中的confusionMatrix()函数,我们可以通过传入观测的真实值和模型的预测值来计算混淆矩阵。该函数将返回一个数据框,其中包含了混淆矩阵中的四个指标,以及其他一些常用的模型评估指标,如准确率、错误率、灵敏度(召回率)、特异度、F1分数等。 例如,我们可以使用以下代码计算二分类模型的混淆矩阵和评估指标: ```{r} library(caret) # 创建一个二分类模型的观测值和预测值 obs <- c(1, 0, 0, 1, 1, 1) pred <- c(1, 0, 1, 0, 0, 1) # 调用confusionMatrix()函数计算混淆矩阵和评估指标 cm <- confusionMatrix(data = obs, reference = pred) # 输出混淆矩阵和评估指标 print(cm) ``` 运行以上代码,我们可以得到如下输出: ``` Confusion Matrix and Statistics Reference Prediction 0 1 0 1 2 1 1 2 Accuracy : 0.3333 ``` 从输出中可以看出,混淆矩阵的结果是: ``` Reference Prediction 0 1 0 1 2 1 1 2 ``` 同时还给出了准确率(Accuracy)的评估结果为0.3333。 通过confusionMatrix()函数,我们可以很方便地计算和评估模型的预测准确性,从而更好地理解和改进我们的机器学习模型。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值