2021SC@SDUSC-山东大学软件工程与实践-Senta(八)

本文深入分析机器学习中的评估指标,包括构建matthews_corrcoef函数计算二分类的MCC指标,该指标考虑真阳、真阴、假阳、假阴,适用于类别不平衡的情况。接着探讨了f1_score()函数,计算精确率和召回率的调和平均。同时,介绍了pearson_and_spearman函数,分别计算了pearson和spearman统计系数,评估变量间的相关性。最后,定义了acc_and_f1函数求取准确率和F1值的平均,为模型性能提供综合评价。
摘要由CSDN通过智能技术生成

本期续接2021SC@SDUSC-山东大学软件工程与实践-Senta(七),继续对Metrics
中的glue_eval进行分析。

def matthews_corrcoef(preds, labels):
    """matthews_corrcoef"""
    preds = np.array(preds)
    labels = np.array(labels)
    tp = np.sum((labels == 1) & (preds == 1))
    tn = np.sum((labels == 0) & (preds == 0))
    fp = np.sum((labels == 0) & (preds == 1))
    fn = np.sum((labels == 1) & (preds == 0))

    mcc = ( (tp * tn) - (fp * fn)) / np.sqrt((tp + fp) * (tp + fn) * (tn + fp) * (tn + fn) )
    return mcc

构建matthews_corrcoef函数进行二分类评估:运用numpy中的array函数创建preds 和 labels两个数组,并计算mcc指标。

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

def f1_score(preds, labels):
    """f1_score"""
    preds = np.array(preds)
    labels = np.array(labels)

    tp = np.sum((labels == 1) & (preds == 1))
    tn = np.sum((labels == 0) & (preds == 0))
    fp = np.sum((labels == 0) & (preds == 1))
    fn = np.sum((labels == 1) & (preds == 0))
    p = tp / (tp + fp)
    r = tp / (tp + fn)
    f1 = (2 * p * r) / (p + r + 1e-8)
    return f1

构建f1_score()函数计算f1指标。 f1: 精确率和召回率的调和平均。

def pearson_and_spearman(preds, labels):
    """pearson_and_spearman"""
    preds = np.array(preds)
    labels = np.array(labels)

    pearson_corr = pearsonr(preds, labels)[0]
    spearman_corr = spearmanr(preds, labels)[0]
    return {
        "pearson": pearson_corr,
        "spearmanr": spearman_corr,
        "corr": (pearson_corr + spearman_corr) / 2,
    }

构建pearson_and_spearman函数计算pearson和spearman统计系数

pearson系数用于评估两个连续变量之间的线性关系。
在这里插入图片描述
-1 ≤ p ≤ 1
p接近0代表无相关性
p接近1或-1代表强相关性

spearman系数评估两个连续变量之间的单调关系。在单调关系中,变量趋于一起变化,但不一定以恒定速率变化。
在这里插入图片描述

def acc_and_f1(preds, labels):
    """acc_and_f1"""
    preds = np.array(preds)
    labels = np.array(labels)

    acc = simple_accuracy(preds, labels)
    f1 = f1_score(preds, labels)
    return {
        "acc": acc,
        "f1": f1,
        "acc_and_f1": (acc + f1) / 2,
    }

构建acc_and_f1函数求acc与f1的平均值。
ACC = (TP + TN) / (P + N) 即:(真阳性+真阴性) / 总样本数

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值