精确率与召回率

分类问题的评估指标

1.分类评估方法

1.1 精确率与召回率

1.1.1 混淆举证
  • 在分类任务下,预测结果(Predicted Condition)与正确标记(True Condition)之间存在四种不同的组合,构成混淆矩阵(适用于多分类)
    • TP:True Positives, 表示实际为正例且被分类器判定为正例的样本数
    • FP:False Positives, 表示实际为负例且被分类器判定为正例的样本数
    • FN:False Negatives, 表示实际为正例但被分类器判定为负例的样本数
    • TN:True Negatives, 表示实际为负例且被分类器判定为负例的样本数
      小技巧:第一个字母表示划分正确与否, T 表示判定正确(判定正确), F表示判定错误(False);第二个字母表示分类器判定结果, P表示判定为正例, N表示判定为负例。
      精确率与召回率_第1张图片
1 1.2 精确率(Precision) 与召回率(Recall)
  • 精确率:预测结果为正例样本中真实为正例的比例
    P r e c i s i o n = T P T P + F P Precision=\frac{TP}{TP+FP} Precision=TP+FPTP

    • 精确率高,意味着分类器要尽量在 “更有把握” 的情况下才将样本预测为正样本, 这意味着精确率能够很好的体现模型对于负样本的区分能力,精确率越高,则模型对负样本区分能力越强。
  • 召回率: 真实为正例的样本中预测结果为正例的比例
    R e c a l l = T P T P + F N Recall=\frac{TP}{TP+FN} Recall=TP+FNTP

    • 召回率高,意味着分类器尽可能将有可能为正样本的样本预测为正样本,这意味着召回率能够很好的体现模型对于正样本的区分能力,召回率越高,则模型对正样本的区分能力越强
      精确率与召回率是此消彼长的关系, 如果分类器只把可能性大的样本预测为正样本,那么会漏掉很多可能性相对不大但依旧满足的正样本,从而导致召回率降低

1.2.F1-Score

能够很好的评估模型,其主要用于二分类问题.
F 1 = 2 T P 2 T P + F N + F P = 2. P r e c i s i o n . R e c a l l P r e c i s i o n + R e c a l l F1=\frac{2TP}{2TP+FN+FP}=\frac{2.Precision.Recall}{Precision+Recall} F1=2TP+FN+FP2TP=Precision+Recall2.Precision.Recall
而 更一般的有 F β F_\beta Fβ

精确率与召回率_第2张图片
* 其实, β \beta β 本质上是Recall, Precision 权重比, 当 β = 2 \beta=2 β=2时, 表明 Recall 的权重要比Precision高,其影响更大, ;当 β = 0.5 \beta=0.5 β=0.5时, 表明 Recall 的权重要比Precision低, 对应的影响更小;

API

	sklearn.metrics.classification_report(y_true, y_pred, labels=[], target_names=None )
		y_true:真实目标值
		y_pred:估计器预测目标值
		labels:指定类别对应的数字
		target_names:目标类别名称
		return:每个类别精确率与召回率

ROC 曲线

  • 在分类任务中,测试部分通常是获得一个概率表示当前样本属于正例的概率, 我们往往会采取一个阈值,大于该阈值的为正例, 小于该阈值的为负例。如果我们减小这个阈值, 那么会有更多的样本被识别为正类,这会提高正类的识别率,但同时会降低负类的识别率
  • ROC曲线的两个指标
    精确率与召回率_第3张图片
    其中, FPR 代表将负例错分为正例的概率, TPR 表示能将正例分对的概率, 如果我们增大阈值, 则 TPR 会增加,而对应的FPR也会增大, 而绘制ROC曲线能够帮助我们找到二者的均衡点,
  • ROC曲线的横轴就是FPRate,纵轴就是TPRate,当二者相等时,表示的意义则是:对于不论真实类别是1还是0的样本,分类器预测为1的概率是相等的,此时AUC为0.5
  • 精确率与召回率_第4张图片
    在 ROC 曲线中 ,有:
  • FPR = 0, TPR = 0:表示将每一个实例都预测为负类
  • FPR = 1, TPR = 1:表示将每一个实例都预测为正例
  • FPR = 0, TPR = 1:为最优分类点
  • 分类器对应的ROC曲线应该尽可能靠近坐标轴的左上角, 而对角线的位置意味着分类器的效果和随机猜测一样的差。
    **ROC曲线在测试集中的样本分布发生变化的时候能够保持不变。**但遗憾的是,很多时候, ROC 曲线并不能清晰的说明哪个分类器的效果更好, 而 AUC 恰恰能够对分类器做出直观的评价。

AUC

AUC 为ROC 曲线下的面积, 这个面积的数值介于0到1之间, 能够直观的评价出分类器的好坏, AUC的值越大, 分类器效果越好

  • AUC = 1:完美分类器, 采用该模型,不管设定什么阈值都能得出完美预测(绝大多数时候不存在)
  • 0.5 < AUC < 1:优于随机猜测,分类器好好设定阈值的话,有预测价值
  • AUC = 0.5:跟随机猜测一样,模型没有预测价值
  • AUC < 0.5 :比随机猜测还差,但是如果反着预测,就优于随机猜测。

AUC 计算API

from sklearn.metrics import roc_auc_score
		sklearn.metrics.roc_auc_score(y_true, y_score)
				计算ROC曲线面积,即AUC值	
				y_true:每个样本的真实类别,必须为0(反例),1(正例)标记
				y_score:预测得分,可以是正类的估计概率、置信值或者分类器方法的返回值`

AUC只能用来评价二分类
AUC非常适合评价样本不平衡中的分类器性能

最后

对于最终分类指标的选择, 在不同数据集,不同场景,不同时间下都会有不同的选择,但往往最好选出一个指标来做优化,对于二分类问题,我目前用 AUC 比较多一些, 多分类我还是看 好F1 值。

你可能感兴趣的:(机器学习,数据挖掘)