混淆矩阵图怎么分析结果,混淆矩阵

tamoadmin 成语问答 2024-06-23 0
  1. 混淆矩阵假正是指
  2. 5.8 绘制混淆矩阵
  3. 分类模型精度评价
  4. 二分类评估,从混淆矩阵说起
  5. 评价-分类算法的评价指标

hmmlearn这个库有三种模型,分别是Gaussian,Multinomial和GMMHMM。这三种模型对应的就是三种emission

matrix(即混淆矩阵,也就是隐状态到观察态的概率)。Gaussian就是说混淆矩阵是一个高斯分布,即观察态是连续的。Multinomiual就是说混淆矩阵事一个Multibimiual

distribution,即观察态势离散的。GMMHMM则是说混淆矩阵是遵循gaussinan

混淆矩阵图怎么分析结果,混淆矩阵
(图片来源网络,侵删)

mixture

分布,也是连续的。

题主问如何把混淆矩阵输入到模型里面。首先你要确定你的混淆矩阵的类型。对于Gaussian类型,就是把你希望的

mean和variance值放到模型里面。我就直接把文档里面的例子搬过来,例子里是建立了一个高斯分布的隐马尔科夫模型。

>>>

import

numpy

as

np

>>>

from

hmmlearn

import

hmm

#一个隐马尔科夫模型由(p向量,状态转移矩阵,混淆矩阵)来定义。

>>>

startprob

=

np.array([0.6,

0.3,

0.1])

#

定义初始状态的概率

>>>

tran***at

=

np.array([[0.7,

0.2,

0.1],

[0.3,

0.5,

0.2],

[0.3,

0.3,

0.4]])#定义转移矩阵的概率

>>>

means

=

np.array([[0.0,

0.0],

[3.0,

-3.0],

[5.0,

10.0]])

#定义混淆矩阵的均值

>>>

covars

=

np.tile(np.identity(2),

(3,

1,

1))#

定义混淆矩阵的方差

>>>

model

=

hmm.GaussianHMM(3,

"full",

startprob,

tran***at)#

定义一个混淆矩阵为高斯分布的隐马尔科夫模型。

这里‘full’的意思就是说你输入的方差矩阵每个元素都给出了,不是一个只是对角线上的元素为0的矩阵

>>>

model.means_

=

means

>>>

model.covars_

=

covars#把你希望的均值方差输入你定义的模型里面,到此你就把混淆矩阵输入进模型了

>>>

X,

Z

=

model.sample(100)

对于Multinomial

GMM,我还没用,不过Multinomial应该是需要你自己手动输入隐状态到观察态的概率的,而GMM应该是和Gaussian类型类似,只是需要多输入一个权重因子。

对于第二个问题,covariance_type意思是你的混淆矩阵的covariance

matrix是什么类型,比如若只是对角线上的元素不为0,则把covariance_type设为‘diag’。

混淆矩阵***正是指

表示方式和用途不同。

1、表示方式。混淆矩阵是一个二维矩阵。热力图是一种色彩编码的二维图像。

2、用途不同。混淆矩阵用于表示分类模型在预测时的正确和错误情况。热力图用于表示数据的分布情况。

5.8 绘制混淆矩阵

被模型预测为正的负样本。根据百度教育查询,在实际的分类任务中,我们希望模型能够尽可能地正确分类正样本和反样本。然而,由于模型的局限性和数据的不完美性,模型可能会错误地将负样本预测为正样本,这种情况被称为***正,所以混淆矩阵中的***正是指被模型预测为正的负样本。

分类模型精度评价

接受者操作特征(Receiver Operating Characteristic Curve,ROC)曲线是显示分类器真正率和***正率之间折中

的?种图形化?法,也是最常?的评估分类模型好坏的可视化图形,在介绍ROC曲线之前,先了解下混淆矩阵。

混淆矩阵是用来总结一个分类器结果的矩阵。对于k元分类,其实它就是一个k x k的表格,用来记录分类器的预测结果。 对于最常见的二元分类来说,它的混淆矩阵是2乘2的。

***设有一批test样本,这些样本只有两种类别:正例和反例。机器学习算法预测类别如下图(左半部分预测类别为正例,右半部分预测类别为反例),而样本中真实的正例类别在上半部分,下半部分为真实的反例。 如下图:

预测值为正例,记为P(Positive)

预测值为反例,记为N(Negative)

预测值与真实值相同,记为T(True)

预测值与真实值相反,记为F(False)

横坐标:1-负样本的召回率 ***正率:负样本中预测成正样本的概率

纵坐标:正样本的召回率 真正率:正样本中预测为正样本的概率

将大于均价的房价映射为1,低于映射为0,构成分类问题,并初步用逻辑斯蒂预测和评分。

绘制ROC曲线

绘制不同情况下的ROC曲线

参数c更小

高斯分布朴素贝叶斯预测

(array([0. , 0. , 0.5, 0.5, 1. ]),

array([0. , 0.5, 0.5, 1. , 1. ]),

array([1.8 , 0.8 , 0.4 , 0.35, 0.1 ]))

二分类评估,从混淆矩阵说起

遥感影像的分类精度一般通过计算分类后影像和标准影像的混淆矩阵来描述(赵英时,2003)。混淆矩阵是一个n×n的方阵(n为类别数目),一般混淆矩阵形见表2.1,表中pij表示分类后数据中第i类别被分到标准数据中第j类的样本数目;Pi+表示分类后数据第i类的样本总和;P+j表示标准数据第j类的样本总和;P为样本总和。

表2.1 混淆矩阵

针对混淆矩阵,可以用五个具体指标来定量评价分类精度,对于第i个类别:

1)生产者精度

2)用户精度

3)漏分误差

4)错分误差

5)K***a系数

评价-分类算法的评价指标

在 《理解交叉验证》 一文中,我们谈到了使用 AUC 来对比不同模型的好坏,那么 AUC 是什么?它是如何衡量一个模型的好坏的呢?除了 AUC 以外,还有其他评估手段吗?本文我们就来探讨下这几个问题。

要了解 AUC,我们需要从另外一个概念——混淆矩阵(Confusion Matrix)说起,混淆矩阵是一个 2 维方阵,它主要用于评估二分类问题(例如:预测患或未患心脏病、股票涨或跌等这种只有两类情况的问题)的好坏。你可能会问多分类问题怎么办?实际上,多分类问题依然可以转换为二分类问题进行处理。下图是一个用于评判是否患有心脏病的混淆矩阵:

纵向看混淆矩阵,它体现了真实情况下,患病和未患病的人数,上图中,真实患心脏病的人数为 True Positive + False Negative,未患心脏病的人数为 False Positive + True Negative;类似的,横向看混淆矩阵,它体现了模型预测出来患心脏病的人数为 True Positive + False Positive,而预测未患心脏病的人数为 False Negative + True Negative。

两个方向一起看,预测患病且实际也患病,我们称它为真阳性 (True Positive),预测未患病且实际也未患病,被称为真阴性 (True Negative),这两个区域是模型预测正确的部分;模型预测错误也分两种情况,***阳性 (False Positive) 表示预测患病,但实际却未患病,***阴性 (False Negative) 表示预测未患病,但实际却患了病的情况。

概念有点多,但并不难记,可以看到,这些名词都是围绕着预测来命名的——预测患病时被称为「True/False Positive」,预测未患病时被称为 「True/False Negative」。

上图中,模型预测正确的部分用绿色填充,它所占的比例又被称为准确率 (Accuracy):

单靠准确率这一项,并不足以评估模型的好坏,例如下面这种情况,虽然准确率可以达到 80%,但在实际患病的人群中,该模型的预测成功率只有 50%,很明显它不是一个好模型。

所以,我们需要引入更多的衡量指标,Sensitivity (或 Recall) 表示实际患者中,预测患病成功的概率,同时 Sensitivity 这个词也有"过敏"的意思,和患病对应,这样关联起来比较好记:

既然有衡量患病(正样例)的指标,那肯定也有衡量未患病(负样例)的指标,Specificity 就是用来表示实际未患病的人群中,预测未患病成功的概率,即

Specificity 这个词有"免疫"的意思,能和未患病相关联,所以也很好记。

这两个指标的出现,能更好的帮你比较模型间的差异,并在其中做出取舍。例如当两个模型的 Accuracy 相近时,如果你更看重于预测患病的效果,你应该选 Sensitivity 值较高的;相反,如果你更看重于预测未患病的效果,你就应该选择 Specificity 较高的。

更进一步,我们还可以通过将这些指标图形化,以获得更直观的评估结果,ROC (Receiver Operating Characteristic) 曲线就是其中常用的一种。

我们知道,分类模型(例如"逻辑回归”)的结果是一个大于 0 且小于 1 的概率,此时我们还需要一个阈值,才能界定是否患病,通常我们把阈值设为 0.5,这样当结果大于 0.5 时可判定为患病,否则判定为未患病。

而阈值可以取 0 到 1 之间的任意一个值,对每一个阈值,都有一个混淆矩阵与之对应,有了混淆矩阵,我们就可以求出一对 Sensitivity 和 Specificity,通过这两个数,我们就可以在一个以 1-Specificity 为横坐标,Sensitivity 为纵坐标的坐标系上画一个点,把所有可能的阈值所产出的点连起来,就是 ROC 曲线。

下面我们来看一个具体的例子,***设我们对老鼠做研究,希望通过老鼠的体重来预测其患心脏病的概率,我们***用逻辑回归算法来建模,下图是预测结果,图中有 10 个老鼠样本点,其中红色点代表实际健康的老鼠,蓝色点代表实际患病的老鼠,这些点用一条逻辑回归曲线拟合,图中还有一条 P=0.5 的直线用来表示阈值为 0.5,可以看出,高于 P=0.5 的 5 只老鼠被预测为患病,而其他 5 只老鼠被预测为健康,预测成功率(Accuracy)为 80%:

下面我们通过以上数据,来画一条 ROC 曲线。首先取阈值为 1,此时所有的老鼠都被预测为未患病,根据样本真实患病情况,我们可以得到如下混淆矩阵

根据上述混淆矩阵,我们就可以算出一组 Sensitivity 和 Specificity 的值。接着我们不断调整阈值,以获得所有的 Sensitivity 和 Specificity 对,因为这里我们的样本点较少,所以让阈值根据样本点来***样即可,依然用横线表示阈值,则所有阈值的***样情况如下:

我们把这些阈值对应的混淆矩阵都列出来:

然后,计算这些混淆矩阵对应的 Sensitivity 和 1-Specificity:

根据该表格,以 1-Specificity 为横轴,Sensitivity 为纵轴作图,通常,在画 ROC 曲线时,我们把 1-Specificity 对应的坐标轴记为 FPR (False Positive Rate),把 Sensitivity 对应的坐标轴记为 TPR (True Positive Rate),如下:

ROC 曲线有以下特点:

根据 ROC 曲线的第 1 个特点:「曲线越靠近左上角,模型的效果越好」,意味着一个更好模型,其曲线下方的面积更大,我们把 ROC 曲线下方的面积称为 AUC (Area Under Curve),有了这个概念后,只需一个数值就可以衡量模型的好坏了,上面示例模型的 AUC 如下:

通常情况下我们都使用 AUC 来评估模型,既然是”通常”,那肯定就有例外:当患病率 (或正样本占比) 非常小时,Ture Negative 就会非常大,这个值就会使影响 FPR,使 FPR 较小,为了避免这种影响,我们可以将 FPR 用另一个指标代替:Precision

Precision 的含义是预测患病的样本中,实际也患病的比例;这样,将 Precision 和 Sensitivity 结合起来,会让我们更专注于患病 (正样本) 的预测效果,而机器学习中的另一个效果指标: F1 Score ,就是专门负责这件事儿的

上面的公式中,Recall 等价于 Sensitivity,和 AUC 一样,两个模型互相比较,F1 Score 越大者,预测效果越好,而且 F1 Score 能更好的衡量正样本的预测效果。

本文通过一个医学例子——是否患心脏病——来讲述什么是混淆矩阵、ROC 曲线、AUC 及 F1 Score,其中,我们还一起学习了 ROC 曲线是如何画出来的,最后,我们还谈到了 AUC 和 F1 Score 以及它们之间细微的差别。

需要注意的是,二分类评估并不限于对患病及未患病这两种情况的分类,考虑到通用性,你完全可以将本文中的患心脏病替换为正样本、把未患心脏病替换为负样本。

对于二元分类,通常可以输出混淆矩阵,看预测的情况,并从中总结出一些指标,给予评价。

混淆矩阵也称误差矩阵,是表示精度评价的一种标准格式,用n行n列的矩阵形式来表示。具体评价指标有总体精度、制图精度、用户精度等,这些精度指标从不同的侧面反映了图像分类的精度。在人工智能中,混淆矩阵(confusion matrix)是可视化工具,特别用于监督学习,在无监督学习一般叫做匹配矩阵。在图像精度评价中,主要用于比较分类结果和实际测得值,可以把分类结果的精度显示在一个混淆矩阵里面。混淆矩阵是通过将每个实测像元的位置和分类与分类图像中的相应位置和分类相比较计算的。

以二元分类举例,混淆矩阵为:

每个样本会对应一个预测值和一个实际标签值,从上图可以知道,实际为1分类,预测结果也是1分类的有100个,而实际是0,预测是1的有3个,以此类推。

为了方便记忆,混淆矩阵的各个单元格有一个统一的称呼:

True很好理解,就是预测对了的,Positive代表的意思是实际分类为1的值,Negative代表的是实际分类为0的值。括号里面的就是简称了,这在后面会有用处。

***定1为正样本,0为负样本,则混淆矩阵的各个单元格表述如下:

真正率(true prositive rate, TPR) 或灵敏度(sensitivity)定义为被模型正确预测的正样本比例,为:

同理可得其他:

从直观印象上来说,判断一个分类模型是不是准确,肯定是直接判断分类模型的正确率,这样就可以对模型有一个大概的评价,但是在某些时候,这么做并不靠谱:

***如我有一组产品,其中正品率可能是99.5%,次品率是0.5%,我的预测模型得到的结果是正品99%,次品1%,如果用正确率来算,是相当可观的,但是实际上次品的预测差距是整整1倍,很难说这是一个好的模型。

这种不同类的样本数量完全不成比例的情况,叫做不平衡类(倾斜类)。

对于这种分类,可以根据混淆矩阵来设计一些指标,从而评估模型,精准率就是其中之一:

精准率从公式上看,表达的意思就是预测为正样本的样本中,有多少是真正为正的,代表了预测的精确程度 。以下面的混淆矩阵为例:

所以精准率就是0.9804。

同上,召回率也是从混淆矩阵中总结出来的指标:

表达的意思则是,实际为正样本的个数中,有多少被成功的预测了 (有点类似于我现在从事行业的回收率,姑且这么理解吧)

还是上面的矩阵,那么召回率就是

事实上一个模型大部分时候是很难做到精确率和召回率两全的,有可能追求完美的精确率但是召回率很低,反之也一样,为了同时最大化精确率和召回率,可以用F1值对分类模型进行评价:

这个值肯定是在小于1的范围以内,原则上越大越好了。

ROC曲线是显示分类算法真正率和***正率之间折中的一种可视化方法,把真正率(TPR)作为y轴,***正率(FPR)作为x轴。

设定一个阈值,阈值之上的样本为正样本,之下为负样本,阈值降低,则真正率越高,***正率也会越高(因为判断正样本的条件宽松了),所以ROC曲线应该是x轴和y轴同时增长的,如图:

如果是一个随机分类,则ROC曲线应该是沿着对角线的,如果是分类算法,那么图像越靠近左上角,模型效果越好(***正率很低的时候真正率高)。

AUC是ROC曲线下方的面积,很显然,面积越大越好,如果模型是完美的,那么面积等于1,如果是随即分类,那么就是0.5。

以上这几种常用方法都是二元分类的方法,其中有一些也可以扩展到多分类,另外还有多分类专用的评价方法。

转自

应用多分类问题,把每个类别单独视为”正“,所有其它类型视为”负“,考虑如下的混淆矩阵:

K***a统计是比较两个或多个观测者对同一事物,或观测者对同一事物的两次或多次观测结果是否一致,这个系数的取值范围是[-1,1],实际应用中,一般是[0,1],这个系数的值越高,则代表模型实现的分类准确度越高。

K***a统计数字的意义如下:

其中,p0表示为总的分类准确度;

pe表示为

其中, 代表第i类真实样本个数, 代表第i类预测出来的样本个数。

对于该表中的数据,则有:

海明距离也适用于多分类的问题,简单来说就是衡量预测标签与真实标签之间的距离,取值在0~1之间。距离为0说明预测结果与真实结果完全相同,距离为1就说明模型与我们想要的结果完全就是背道而驰。

它与海明距离的不同之处在于分母。当预测结果与实际情况完全相符时,系数为1;当预测结果与实际情况完全不符时,系数为0;当预测结果是实际情况的真子集或真超集时,距离介于0到1之间。

我们可以通过对所有样本的预测情况求平均得到算法在测试集上的总体表现情况。

铰链损失(Hinge loss)一般用来使“边缘最大化”(maximal margin)。损失取值在0~1之间,当取值为0,表示多分类模型分类完全准确,取值为1表明完全不起作用。

参考: