hhhhhhh文章目录
- 前言
- 混淆矩阵
- 精确率 & 准确率 & 召回率
- 1.含义
- 2.举个例子
- Roc曲线 & Auc曲线
- 1.含义
- 2.怎么来画Roc曲线?
前言
在分类问题中,想要衡量模型/分类器的性能,采取的以下指标。
在代码实现上,一般是用scikit-learn来实现,具体用到的是sklearn.metrics
模块下的函数
sklearn:官网链接
混淆矩阵
混淆矩阵(Confusion Matrix)是一个将分类问题按照 判别情况 与 真实情况 两个维度进行归类的矩阵。
以二分类问题为例,首先我们需要明确数据是positive还是negative。 对于实际值中可以用一个2×2的矩阵表示
- P(Positive):代表1/阳性/正类
- N(Negative):代表0/阴性/负类
- T(True):代表预测 正确
- F(False):代表预测 错误
即这种表示方法是从预测结果和实际结果出发的
先要看预测结果P/N,再看实际结果,对比预测结果看预测是否正确,给出判断结果T/F
所以:
指标 | 含义 | 简称 |
TP | 预测为 1/阳性,实际为 1/阳性,预测 正确 | True Positive,真阳性 |
FP | 预测为 1/阳性,实际为 0/阴性,预测 错误 | False Positive,假阳性 |
FN | 预测为 0/阴性,实际为 1/阳性,预测 错误 | False Negative,假阴性 |
TN | 预测为 0/阴性,实际为 0/阴性,预测 正确 | True Negative,真阴性 |
精确率 & 准确率 & 召回率
1.含义
- 准确率(Accuracy):预测正确的结果占总样本的百分比
- 精确率(Precision):它表示的是预测为正的样本中有多少是真正的正样本。那么预测为正就有两种可能了,一种就是把正类预测为正类(TP),另一种就是把负类预测为正类(FP),也就是
- 召回率(Recall):在实际为真的样例中,被判断为真的样例比例,也就是样本中的正例有多少被预测正确了。那也有两种可能,一种是把原来的正类预测成正类(TP),另一种就是把原来的正类预测为负类(FN)。
所以召回率应该等于预测为正样本的结果 / 实际为正样本的所有样本
2.举个例子
假设我们手上有60个正样本,40个负样本,我们要找出所有的正样本,系统查找出50个,其中只有40个是真正的正样本,计算上述各指标。
TP: 将正类预测为正类数 40
FN: 将正类预测为负类数 20
FP: 将负类预测为正类数 10
TN: 将负类预测为负类数 30
- 准确率(accuracy) = 预测对的/所有 = (TP+TN)/(TP+FN+FP+TN) = 70%
- 精确率(precision) = TP/(TP+FP) = 80%
- 召回率(recall) = TP/(TP+FN) = 2/3
Roc曲线 & Auc曲线
1.含义
AUC - ROC 曲线是在各种阈值设置下(遍历所有阈值来绘制整条曲线的)对分类问题的性能度量。 ROC 是概率曲线,AUC 表示可分离性的程度或度量。 它告诉模型能够区分类别的程度。 AUC 越高,模型越能将 0 类预测为 0,将 1 类预测为 1。以此类推,AUC 越高,模型在区分患有疾病和没有疾病的患者方面越好。Roc曲线如下图:
下面来看两个重要的横纵坐标含义:
TPR和FPR分别是基于实际结果1和0出发的,可以从上面混淆矩阵的列出发。
- TPR表示在所有实际为 1/阳性 的样本中,被正确地判断为 1/阳性 之比率,也就是召回率
- FPR表示在所有实际为 0/阴性 的样本中,被错误地判断为 1/阳性 之比率
2.怎么来画Roc曲线?
以异常检测为例,得到的是异常分数,label表示真实标签,其中1表示异常,0表示正常
(1) 首先按照异常分数大小排序
(2)接下来,从高到低,依次将“Score”值作为阈值threshold
当样本的异常分数大于这个阈值时,就认为他是异常样本(label 1),否则就是正常
例如:
以异常分数862365为例,大于等于这个分数就是异常,有1个样本,的确是异常,所以TP(真阳类)=1,FP(假阳类)=0;
以ID=4阈值11383为例,大于等于这个阈值被判断为异常,有5个样本,但是其中有3个不是异常,所以TP=2. FP=3
(3)每次选取一个不同的threshold,我们就可以得到一组FPR和TPR,即ROC曲线上的一点