zoukankan      html  css  js  c++  java
  • 分类模型的F1-score、Precision和Recall 计算过程

    分类模型的F1分值、Precision和Recall 计算过程

    引入

    通常,我们在评价classifier的性能时使用的是accuracy

    考虑在多类分类的背景下

    accuracy = (分类正确的样本个数) / (分类的所有样本个数)

    这样做其实看上去也挺不错的,不过可能会出现一个很严重的问题:例如某一个不透明的袋子里面装了1000台手机,其中有600台iphone6, 300台galaxy s6, 50台华为mate7,50台mx4(当然,这些信息分类器是不知道的。。。)。如果分类器只是简单的把所有的手机都预测为iphone6, 那么通过上面的公式计算的准确率accuracy为0.6,看起来还不错;可是三星,华为和小米的全部预测错了。如果再给一个袋子,里面装着600台galaxy s6, 300台mx4, 50台华为mate7,50台iphone,那这个分类器立马就爆炸了,连回家带孩子的要求都达不到

    所以,仅仅用accuracy来衡量一个分类器的性能是很不科学的。因此要引入其他的衡量标准。

    二分类

    是不是经常看见如下类似的图?这是二分类的图,假设只有正类和负类,True和False分别表示对和错;Positive和Negative分别表示预测为正类和负类。

    那么

    • TP:预测为Positive并且对了(样本为正类且预测为正类)
    • TN:预测为Negative并且对了(样本为负类且预测为负类)
    • FP:预测为Positive但错了(样本为负类但预测为正类)
    • FN:预测为Negative但错了(样本为正类但预测为负类)
    • TP+FP:预测为Positive并且对了+预测为Positive但错了=预测为Positive的样本总数
    • TP+FN:预测为Positive并且对了+预测为Negative但错了=实际为Positive的样本总数

    所以precision就表示:被正确预测的Positive样本 / 被预测为Positive的样本总数

    同理,recall就表示:被正确预测的Positive样本 / 实际为Positive的样本总数

    F1是调和平均值,精准率和召回率只要有一个比较小的话,F1的值也会被拉下来:

    多分类情况

    其实和二分类情况很类似,例子如下 这个是Micro , 和二分类类似 (将例子中的precision和recall代入到F1公式中,得到的就是Micro下的F1值)

    而Macro情况下计算F1需要先计算出每个类别的F1值,然后求平均值。如下

    Macro情况下上述例子的计算

    sklearn计算程序(macro)

    下面是使用sklearn直接计算多类别F1/P/R的程序,将接口中的average参数配置为’macro’即可。

    from sklearn.metrics import f1_score, precision_score, recall_score
    
    y_true=[1,2,3]
    y_pred=[1,1,3]
    
    f1 = f1_score( y_true, y_pred, average='macro' )
    p = precision_score(y_true, y_pred, average='macro')
    r = recall_score(y_true, y_pred, average='macro')
    
    print(f1, p, r)
    # output: 0.555555555556 0.5 0.666666666667
    

    参考链接:

    https://blog.csdn.net/ybdesire/article/details/96507733

    https://www.jianshu.com/p/14b26f59040b

  • 相关阅读:
    如何讓你的程序在退出的時候執行一段代碼?
    05_Python爬蟲入門遇到的坑__總結
    04_Python爬蟲入門遇到的坑__向搜索引擎提交關鍵字02
    03_Python爬蟲入門遇到的坑__向搜索引擎提交關鍵字01
    02_Python爬蟲入門遇到的坑__反爬蟲策略02
    01_Python爬蟲入門遇到的坑__反爬蟲策略01
    Python爬蟲--rrequests庫的基本使用方法
    C#筆記00--最基礎的知識
    為元組中的每一個元素命名
    Filter函數
  • 原文地址:https://www.cnblogs.com/jimlau/p/13428235.html
Copyright © 2011-2022 走看看