二分类模型评估指标

分类结果混淆矩阵(confusion matrix):

真实\预测 正例 反例
正例 TP FN
反例 FP TN

1.准确率--accuracy

定义:对于给定的测试数据集,分类器正确分类的样本数与总样本数之比。
计算方法:

2.精确率--precision(P)
定义:被判定为正例(反例)的样本中,真正的正例样本(反例样本)的比例。
计算方法:

3.召回率--recall(R)
定义:被正确分类的正例(反例)样本,占所有正例(反例)样本的比例。
计算方法:

4.F1_score
定义:基于精确率和召回率的调和平均。
计算方法:

5.macro 度量
定义:对于n个二分类混淆矩阵,在各混淆矩阵上分别计算精确率和召回率,记(P1,R1),(P2,R2)...(Pn,Rn),再计算平均值,得到宏精确率(macro-P)、宏召回率(macro-R),继而得到宏F1(macro-F1)。

6.micro度量
定义:对于n个二分类混淆矩阵,先对TP、FN、FP、TN求平均值,再用均值计算得到微精确率(micro-P)、微召回率(micro-P),继而得到微F1(micro-F1)。

# -*-coding: utf-8 -*-
import numpy

#true = [真实组1,真实组2...真实组N],predict = [预测组1,预测组2...预测组N]
def evaluation(true,predict):

    num = len(true)#确定有几组
    (TP, FP, FN, TN) = ([0] * num for i in range(4))#赋初值

    for m in range(0,len(true)):
        if(len(true[m]) != len(predict[m])):#样本数都不等,显然是有错误的
            print "真实结果与预测结果样本数不一致。"
        else:
            for i in range(0,len(true[m])):#对每一组数据分别计数
                if   (predict[m][i] == 1) and ((true[m][i] == 1)):    TP[m] += 1.0
                elif (predict[m][i] == 1) and ((true[m][i] == 0)):    FP[m] += 1.0
                elif (predict[m][i] == 0) and ((true[m][i] == 1)):    FN[m] += 1.0
                elif (predict[m][i] == 0) and ((true[m][i] == 0)):    TN[m] += 1.0

    # macro度量,先求每一组的评价指标,再求均值
    (accuracy_macro,      precision1_macro, precision0_macro,      recall1_macro, recall0_macro,      F1_score1_macro,F1_score0_macro) =      ([0] * num for i in range(7))

    for m in range(0,num):

        accuracy_macro[m]    = (TP[m] + TN[m]) / (TP[m] + FP[m] + FN[m] +TN[m])

        if (TP[m] + FP[m] == 0) : precision1_macro[m] = 0#预防一些分母为0的情况
        else :precision1_macro[m] = TP[m] / (TP[m] + FP[m])

        if (TN[m] + FN[m] == 0) : precision0_macro[m] = 0
        else :precision0_macro[m] = TN[m] / (TN[m] + FN[m])

        if (TP[m] + FN[m] == 0) : recall1_macro[m] = 0
        else :recall1_macro[m]    = TP[m] / (TP[m] + FN[m])

        if (TN[m] + FP[m] == 0) : recall0_macro[m] = 0
        recall0_macro[m]    = TN[m] / (TN[m] + FP[m])

    macro_accuracy    = numpy.mean(accuracy_macro)
    macro_precision1  = numpy.mean(precision1_macro)
    macro_precision0  = numpy.mean(precision0_macro)
    macro_recall1     = numpy.mean(recall1_macro)
    macro_recall0     = numpy.mean(recall0_macro)

    #F1_score还是按这个公式来算,用macro-P和macro-R
    if (macro_precision1 + macro_recall1 == 0): macro_F1_score1 = 0
    else: macro_F1_score1   = 2 * macro_precision1 * macro_recall1 / (macro_precision1 + macro_recall1)

    if (macro_precision0 + macro_recall0 == 0): macro_F1_score0 = 0
    else: macro_F1_score0   = 2 * macro_precision0 * macro_recall0 / (macro_precision0 + macro_recall0)

    #micro度量,是用TP、TN、FP、FN的均值来计算评价指标
    TPM = numpy.mean(TP)
    TNM = numpy.mean(TN)
    FPM = numpy.mean(FP)
    FNM = numpy.mean(FN)

    micro_accuracy    = (TPM + TNM) / (TPM + FPM + FNM + TNM)

    if(TPM + FPM ==0): micro_precision1  = 0#预防一些分母为0的情况
    else: micro_precision1  = TPM / (TPM + FPM)

    if(TNM + FNM ==0): micro_precision0  = 0
    else: micro_precision0  = TNM / (TNM + FNM)

    if (TPM + FNM == 0):micro_recall1 = 0
    else: micro_recall1     = TPM / (TPM + FNM)

    if (TNM + FPM == 0):micro_recall0 = 0
    else: micro_recall0     = TNM / (TNM + FPM)

    # F1_score仍然按这个公式来算,用micro-P和micro-R
    if (micro_precision1 + micro_recall1 == 0): micro_F1_score1 = 0
    else :micro_F1_score1   = 2 * micro_precision1 * micro_recall1 / (micro_precision1 + micro_recall1)

    if (micro_precision0 + micro_recall0 == 0): micro_F1_score0 = 0
    else :micro_F1_score0   = 2 * micro_precision0 * micro_recall0 / (micro_precision0 + micro_recall0)

    print "*****************************macro*****************************"
    print "accuracy",":%.3f" % macro_accuracy
    print "%20s"%‘precision‘,"%12s"%‘recall‘,"%12s"%‘F1_score‘
    print "%5s" % "0", "%14.3f" % macro_precision0, "%12.3f" % macro_recall0, "%12.3f" %macro_F1_score0
    print "%5s" % "1", "%14.3f" % macro_precision1, "%12.3f" % macro_recall1, "%12.3f" %macro_F1_score1
    print "%5s" % "avg","%14.3f" % ((macro_precision0+macro_precision1)/2),           "%12.3f" % ((macro_recall0+macro_recall1)/2), "%12.3f" %((macro_F1_score1+macro_F1_score0)/2)
    print "*****************************micro*****************************"
    print "accuracy",":%.3f" % micro_accuracy
    print "%20s"%‘precision‘,"%12s"%‘recall‘,"%12s"%‘F1_score‘
    print "%5s" % "0", "%14.3f" % micro_precision0, "%12.3f" % micro_recall0, "%12.3f" %micro_F1_score0
    print "%5s" % "1", "%14.3f" % micro_precision1, "%12.3f" % micro_recall1, "%12.3f" %micro_F1_score1
    print "%5s" % "avg", "%14.3f" % ((micro_precision0 + micro_precision1) / 2),         "%12.3f" % ((micro_recall0 + micro_recall1) / 2), "%12.3f" % ((micro_F1_score0 + micro_F1_score1) / 2)

if __name__ == "__main__":
    #简单举例 - 当未采用交叉验证方法时,显然True和Predict都只有一组,Macro和Micro会输出一样的值
    true = [[0, 1, 0, 1, 0], [0, 1, 1, 0]]
    predict = [[0, 1, 1, 1, 0], [0, 1, 0, 1]]
    evaluation(true,predict)
*****************************macro*****************************
accuracy :0.650
           precision       recall     F1_score
    0          0.750        0.583        0.656
    1          0.583        0.750        0.656
  avg        0.667        0.667        0.656
*****************************micro*****************************
accuracy :0.667
           precision       recall     F1_score
    0          0.750        0.600        0.667
    1          0.600        0.750        0.667
  avg        0.675        0.675        0.667 

原文地址:https://www.cnblogs.com/YSPXIZHEN/p/11441076.html

时间: 2024-11-08 05:53:27

二分类模型评估指标的相关文章

001 分类模型评估指标(二)

二分类问题 多分类问题 连续变量问题 二.简单二分类问题的延伸 如果只是简单的二分类问题,只需要一个二分类的混淆矩阵即可对模型进行评估.但如果问题发生如下变化: 情况1:基于同一组数据集多次训练/测试不同的模型 情况2:基于多个数据集测试评估同一个模型 情况3:执行多分类任务 此时,会产生多个不同的混淆矩阵,则需要引入两个新的概念"宏"与"微". (1)"宏": 当产生n个混淆矩阵时,分别计算每个混淆矩阵的Precision,recall,F-m

二分类算法评估指标

我们都知道机器学习要建模,但是对于模型性能的好坏我们并不知道是怎样的,很可能这个模型就是一个差的模型,对测试集不能很好的预测.那么如何知道这个模型是好是坏呢?必须有个评判的标准,需要用某个指标来衡量,这就是性能度量的意义.有了一个指标,就可以对比不同模型了,从而知道哪个模型更好,或者通过这个指标来调参优化选用的模型. 对于分类.回归.聚类等,分别有各自的评判标准.本篇主要介绍二分类算法(多分类可以扩展转化成二分类)的相关指标.评估一个二分类的分类器的性能指标有:准确率.查准率.查全率.F1值.A

机器学习基础 | 分类模型评估指标

目录 成对指标 综合指标 图形指标 在处理机器学习的分类问题中,我们需要评估分类结果的好坏以选择或者优化模型,本文总结二分类任务中常用的评估指标.对于多分类任务的评估指标,可以参考这篇文章 先从我们最熟知的混淆矩阵(confusion matrix)说起. source 鉴于混淆矩阵看着比较抽象,可以参考下图 常用的评估指标可以分为3类: 成对指标,包括正确率(精度)&错误率,Precision&Reall,TPR(Sentitivity)&TNR(Specificity)等; 综

分类模型评估指标

对于分类模型的评价指标主要有错误率 .准确率.查准率.查全率.混淆矩阵.F1值.AUC和ROC. 1.1 错误率和准确率 错误率(Error rate):通常把分类错误的样本数占总样本总数的比例称为"错误率". 准确率(Accuracy):是指分类正确的样本数占样本总数的比例,即准确率=1-错误率. 1.2 查准率.查全率.混淆矩阵和F1值 查准率(Precision):又称精确率,预测为正例的样本中,真正为正例的比率. 查全率(Recall):又称召回率,预测为正例的真实正例(TP)

分类模型评估

一直对于各种分类器评估的指标有点晕,今天决定琢磨下,并且写下来,方便以后回忆. 一.混淆矩阵 来源于信息论,根据上面的混淆矩阵,有3个指标需要搞清楚,我觉得记公式真的很容易搞混,建议大家都直接记文字加上自己理解就好了. 准确率=正确预测正负的个数/总个数(这个指标在python中的交叉验证时可以求准确率) 覆盖率(也叫作召回率)=正确预测正的个数/实际正的个数 (当然也可以是负覆盖率) 命中率=正确预测正的个数/预测正的个数 以上指标,在Python中提供混淆矩阵的报告 二.ROC 之所以又有R

【深度学习】常用的模型评估指标

"没有测量,就没有科学."这是科学家门捷列夫的名言.在计算机科学中,特别是在机器学习的领域,对模型的测量和评估同样至关重要.只有选择与问题相匹配的评估方法,我们才能够快速的发现在模型选择和训练过程中可能出现的问题,迭代地对模型进行优化.本文将总结机器学习最常见的模型评估指标,其中包括: precision recall F1-score PRC ROC和AUC IOU 从混淆矩阵谈起 看一看下面这个例子:假定瓜农拉来一车西瓜,我们用训练好的模型对这些西瓜进行判别,显然我们可以使用错误率

机器学习算法分类及其评估指标

机器学习的入门,我们需要的一些基本概念: 机器学习的定义 M.Mitchell<机器学习>中的定义是: 对于某类任务T和性能度量P,如果一个计算机程序在T上以P衡量的性能随着经验E而自我完善,那么我们称这个计算机程序从经验E中学习. 算法分类 两张图片很好的总结了(机器学习)的算法分类: 评估指标 分类(Classification)算法指标: Accuracy准确率 Precision精确率 Recall召回率 F1 score 对于分类问题的结果可以用下表表示(说明:True或者False

机器学习二分类模型评价指标:准确率\召回率\特异度等

混淆矩阵是一种用于性能评估的方便工具,它是一个方阵,里面的列和行存放的是样本的实际类vs预测类的数量. P =阳性,N =阴性:指的是预测结果. T=真,F=假:表示 实际结果与预测结果是否一致,一致为真,不一致为假. TP=真阳性:预测结果为P,且实际与预测一致. FP=假阳性:预测结果为P,但与实际不一致. TN=真阴性:预测结果为N,且与实际一致. FN=假阴性:预测结果为N,但与实际不一致. 分类模型的经验误差可以通过计算1-准确率得到. 然而,如何选择一个适当的预测误差度量是高度依赖于

分类模型评估与选择总结

1.评估分类器性能的度量 当建立好一个分类模型之后,就会考虑这个模型的性能或准确率如何,这里介绍几种分类器评估度量如下表: 假设在有标号的元组组成的训练集上使用分类器.P是正元组数,N是负元组数. 度量 公式 准确率.识别率 (TP+TN)/(P+N) 错误率.误分类率 (FP+FN)/(P+N) 敏感度.真正例率.召回率 TP/P 特效型.真负例率 TN/N 精度 TP/(TP+FP) F.F1.F分数 精度和召回率的调和均值 2*precision*recall/(precision+rec