文章目录

  • 混淆矩阵
  • GAUC
  • 修改F1
  • Specificity
  • G-Mean
  • MCC
  • ----
  • GAUC代码实现
  • 修改F1代码实现
  • MCC代码实现

参考自:

https://www.zhihu.com/question/428547855

https://www.jianshu.com/p/7919ef304b19

混淆矩阵

预测结果
真实结果 正例 反例
正例 TP(真正例) FN(假反例)
反例 FP(假正例) TN(真反例)
  • F 1 = 2 ∗ P ∗ R P + R F1 = \frac{2 * P * R}{P + R} F1=P+R2∗P∗R​
  • P:精确率:所有模型预测为正例的样本中真实为正例的概率
    • P = T P T P + F P P = \frac{TP}{TP + FP} P=TP+FPTP​
  • R:召回率:所有正例中模型正确预测的概率
    • R = T P T P + F N R = \frac{TP}{TP+FN} R=TP+FNTP​

GAUC

https://blog.csdn.net/qq_42363032/article/details/120070512

修改F1

此时的F1 score对于样本不平衡imbalanced learning问题并不太好用。所以另一种定义方法是分别定义F1 score for Positive和F1 score for Negative。前者等价于通常所说的F1 score,后者略微修改上述公式就能求出。然后再根据Positive和Negative的比例来加权求一个weighted F1 score即可。这个新的F1 score还是能大致反应模型的真实水平的。但是,如果的样本高度不均匀,weighted F1 score也会失效。

  • F1 score for Positive

    • F 1 p o s i t i v e = 2 ∗ P p o s i t i v e ∗ R p o s i t i v e P p o s i t i v e + R p o s i t i v e F1_{positive} = \frac{2 * P_{positive} * R_{positive}}{P_{positive} + R_{positive}} F1positive​=Ppositive​+Rpositive​2∗Ppositive​∗Rpositive​​
    • P p o s i t i v e = T P T P + F P P_{positive} = \frac{TP}{TP + FP} Ppositive​=TP+FPTP​
    • R p o s i t i v e = T P T P + F N R_{positive} = \frac{TP}{TP+FN} Rpositive​=TP+FNTP​
  • F1 score for Negative

    • F 1 n e g a t i v e = 2 ∗ P n e g a t i v e ∗ R n e g a t i v e P n e g a t i v e + R n e g a t i v e F1_{negative} = \frac{2 * P_{negative} * R_{negative}}{P_{negative} + R_{negative}} F1negative​=Pnegative​+Rnegative​2∗Pnegative​∗Rnegative​​
    • P n e g a t i v e = T N F N + T N P_{negative} = \frac{TN}{FN + TN} Pnegative​=FN+TNTN​
    • R n e g a t i v e = T N F P + T N R_{negative} = \frac{TN}{FP+TN} Rnegative​=FP+TNTN​
  • 设正样本Positive占比为 α \alpha α,负样本Negative占比为 β \beta β

  • F 1 w e i g h t e d = α ∗ F 1 p o s i t i v e + β ∗ F 1 n e g a t i v e F1_{weighted} = \alpha * F1_{positive} + \beta * F1_{negative} F1weighted​=α∗F1positive​+β∗F1negative​

Specificity

一个简单且在实际应用和paper中都常见的指标是specificity,它是模型对negative的召回率。它的计算很简单,为specificity = TNs / (TNs + FPs)。

specificity之所以常见有两方面原因。在实际应用中,尤其是与imbalanced learning有关的问题中,少类样本通常是更加关注的样本。因此观察模型对它的召回率通常非常重要。在paper中,在你打榜主score打不赢别人的时候,你可以另辟蹊径地告诉别人,specificity非常重要,它就成了你人生中重要的僚机,让你多了一条路来有理有据地outperforms others。

  • TNR:true negative rate,描述识别出的负例占所有负例的比例
    计算公式为: S p e c i f i c i t y = T N R = T N T N + F P Specificity = TNR= \frac{TN}{TN + FP} Specificity=TNR=TN+FPTN​

G-Mean

G-Mean是另外一个指标,也能评价不平衡数据的模型表现,其计算公式如下。

对正样本召回率和对负样本召回率相乘再开根号

G − M e a n = R e c a l l ∗ S p e c i f i c i t y = T P T P + F N ∗ T N T N + F P G-Mean = \sqrt{Recall * Specificity} \\ = \sqrt{\frac{TP}{TP+FN} * \frac{TN}{TN+FP}} G−Mean=Recall∗Specificity ​=TP+FNTP​∗TN+FPTN​ ​

MCC

MCC是应用在机器学习中,用以测量二分类的分类性能的指标,该指标考虑了真阳性,真阴性,假阳性和假阴性,通常认为该指标是一个比较均衡的指标,即使是在两类别的样本含量差别很大时,也可以应用它。
MCC本质上是一个描述实际分类与预测分类之间的相关系数,它的取值范围为[-1,1],取值为1时表示对受试对象的完美预测,取值为0时表示预测的结果还不如随机预测的结果,-1是指预测分类和实际分类完全不一致。
M C C = T P ∗ T N − F P ∗ F N ( T P + F P ) ( T P + F N ) ( T N + F P ) ( T N + F N ) MCC = \frac{TP * TN - FP*FN}{\sqrt{(TP+FP)(TP+FN)(TN+FP)(TN+FN)}} MCC=(TP+FP)(TP+FN)(TN+FP)(TN+FN) ​TP∗TN−FP∗FN​

----

GAUC代码实现

# 计算GAUC
# GAUC即先计算各个用户自己的AUC,然后加权平均
# 权重设为每个用户click的次数,并且会滤掉单个用户全是正样本或全是负样本的情况
# flag=False:不进行矫正   当 is_outflow=1 时,预测为1,矫正预测为0
def calculationGAUC(df, models, flag=False):gbdt, ohecodel, lr = models[0], models[1], models[2]# 计算测试集gaucsumWAUCclick, sumWclick = 0, 0sumWAUCall, sumWall = 0, 0for suuid, data in df.groupby('suuid'):# 过滤单个用户全是正样本或全是负样本的情况if len(set(list(data['y']))) == 1:continue# 计算权重为每个用户的点击数、每个用户样本数wclick = data['y'].sum()wall = len(list(data['y']))# 对于每个用户预测并计算其AUCx, y = np.array(data.iloc[:, 1:-1]), np.array(data.iloc[:, -1])x_leaves = gbdt.apply(x)[:, :, 0]x_trans = ohecodel.transform(x_leaves)yproba = lr.predict_proba(x_trans)[:, 1]  # 预测的概率# y_pre = lr.predict(x_trans)y_pre = []for proba in yproba:if proba > 0.8:# if proba > 0.5:y_pre.append(1)else:y_pre.append(0)if not flag:aucUser = roc_auc_score(y, y_pre)# 当 is_outflow=1 时else:is_outflowdata = np.array(data.loc[:, 'is_outflow'])for i in range(len(is_outflowdata)):if is_outflowdata[i] == 1:if yproba[i] > 0.8:yproba[i] = yproba[i] - 0.1if yproba[i] > 0.8:y_pre[i] = 1else:y_pre[i] = 0aucUser = roc_auc_score(y, y_pre)# 分子、分母累加sumWAUCclick = sumWAUCclick + wclick * aucUsersumWAUCall = sumWAUCall + wall * aucUsersumWclick += wclicksumWall += wallgaucclick = sumWAUCclick / sumWclickgaucall = sumWAUCall / sumWallreturn gaucclick, gaucall

修改F1代码实现

def weightF1ForPN(y, y_pre, F1_positive, alpha, beta):lenall = len(y)# y = y.flatten()pre = 0rec = 0precisoinlen = 0recallLen = 0for i in range(lenall):# 精确率_负样本:所有预测为负中,真实为负的比例if y_pre[i] == 0:pre += 1if y[i] == 0:precisoinlen += 1# 召回率_负样本:所有负例中模型为负预测的概率if y[i] == 0:rec += 1if y_pre[i] == 0:recallLen += 1p_negative = precisoinlen / prer_negative = recallLen / recprint('  预测为负的样本数:{},在这其中实际为负的样本数:{},负样本精确率:{}'.format(pre, precisoinlen, p_negative))print('  负例样本:{},负例中预测为负的数量:{},负样本召回率:{}'.format(rec, recallLen, r_negative))F1_negative = (2 * p_negative * r_negative) / (p_negative + r_negative)print('  负样本F1:{}'.format(F1_negative))f1_weight = alpha * F1_positive + beta * F1_negativereturn f1_weight, p_negative, r_negative

MCC代码实现

def evalMCC(y, y_pre):lenall = len(y)TP, FP, FN, TN = 0, 0, 0, 0for i in range(lenall):if y_pre[i] == 1:if y[i] == 1:TP += 1if y[i] == 0:FP += 1if y_pre[i] == 0:if y[i] == 1:FN += 1if y[i] == 0:TN += 1member = TP*TN - FP*FNdemember = ((TP+FP) * (TP+FN) * (TN+FP) * (TN+FN)) ** 0.5mcc = member / dememberreturn mcc

机器学习正负样本失衡时的评估指标参考,及代码实现相关推荐

  1. 二分类问题中的评估指标,附代码(超详细)

    文章目录 具体参考: 二分类指标汇总 混淆矩阵 精确率.召回率.F1 准确率 对数损失 AUC GAUC ks 样本不平衡时的可用指标 考虑负样本的F1 Specificity G-Mean MCC ...

  2. 机器学习:聚类算法的模型评估指标:轮廓系数

    不同于分类模型和回归,聚类算法的模型评估不是一件简单的事. 在分类中,有直接结果(标签)的输出,并且分类的结果有正误之分,所以使用预测的准确度,混淆矩阵,ROC曲线等指标来进行评估.但无论如何评估,都 ...

  3. 机器学习中ROC曲线和AUC评估指标

    目录 1.真正例率(TPR )与 假正例率(FPR)定义 2.ROC曲线(接受者操作特性曲线,receiver operating characteristic curve) 3.AUC(ROC曲线下 ...

  4. 【机器学习】27种确定性预测评估指标及其Python实现

    在时间序列预测中,评价指标的多样性为模型性能的评估带来多角度的参考意义.该篇推文列举了当前已知的27种确定性预测评估指标及其Python的实现,其中Python的评估指标函数实现基于numpy库(调用 ...

  5. 知识图谱链接预测时的评估指标:mean rank和hit@10 。

    链接预测是用来预测三元组(h,r,t)中缺失实体h,t或r的任务,对于每一个缺失的实体,模型将被要求用所有的知识图谱中的实体作为候选项进行计算,并进行排名,而不是单纯给出一个最优的预测结果. 在测试阶 ...

  6. 【理论 | 代码】机器学习分类与回归性能评估指标大全

    一.回归指标 1.1 均方误差(Mean Squared Error, MSE) MSE 称为均方误差,又被称为 L2 范数损失,该统计参数是预测数据和原始数据对应点误差的平方和的均值,公式如下: M ...

  7. 关于模型的评估指标(超详细)

    文章目录 正负样本的选择 标准评估指标 回归问题的评估指标 SSE 和方差 均方误差(MSE) 均方根误差(RMSE) R Squared 分类问题的评估指标 错误率 召回率(查全率) 精确率(查准率 ...

  8. 「机器学习速成」分类,评估指标(TP、FP、TN、FN),ROC曲线和AUC

    https://www.toutiao.com/a6706449645901464078/ 2019-06-25 20:49:47 大家好,今天我们学习[机器学习速成]之 分类,评估指标(TP.FP. ...

  9. AUC值越大_「机器学习速成」分类,评估指标(TP、FP、TN、FN),ROC曲线和AUC

    大家好,今天我们学习[机器学习速成]之 分类,评估指标(TP.FP.TN.FN),ROC曲线和AUC. 本节介绍了如何使用逻辑回归来执行分类任务, 并探讨了如何评估分类模型的有效性. 我们 马上学三点 ...

最新文章

  1. 安卓收取费用_作为自由职业者应收取的费用:以价值为基础的定价是否能达到炒作的目的?...
  2. 还只看花书,西瓜书?一文告诉你如何正确学习深度学习,从理论到实战。
  3. SAP QM 内向交货单在完成包装之后就自动触发了检验批?
  4. [转载]jQuery.extend 函数详解
  5. 生成随机字符串的几种常用方式
  6. mvn spring-boot:run 增加jvm启动参数
  7. javaWeb服务详解(含源代码,测试通过,注释) ——web.xml
  8. 不同.net版本实现单点登录
  9. ASP.NET Web Game 构架设计3--业务逻辑服务器之计时器
  10. T-SQL语言(一)
  11. 备机大地院系项目dataguard archived_log及standby_log
  12. GBDT算法原理以及实例理解
  13. matlab中的取整函数(ceil、floor、round)
  14. 如何用ICode来学习Python
  15. 赠书 | 供应链金融模式有哪些?区块链在供应链金融中如何应用?
  16. 河南省计算机报名流程图,报考流程
  17. 12.静态路由、静态缺省路由
  18. 锦锐单片机开发工具_锦锐触摸MCU 单片机方案开发
  19. 知名搜索引擎网站收录提交入口
  20. Kindling the Darkness: A Practical Low-light Image Enhancer

热门文章

  1. 客户案例 | 低代码上的西门子,可视化看板优化生产
  2. android中电话归属地查询
  3. openharmony备忘录
  4. 测开之路四十六:正则表达式
  5. iOS启动优化 —— 二进制重排
  6. poser pro executable file has stopped working(解决Poser Pro 2014 安装问题及序列号问题)
  7. 社区发现 SSN-LDA算法 学习笔记
  8. Java实现 LeetCode 658 找到 K 个最接近的元素(暴力)
  9. 魅族 Android文件夹,魅族MX手机上的文件夹哪个是sd卡的根目录
  10. 自定义Protocol Buffer javanano转换工厂