【机器学习】手撕AUC的计算

AUC是一个模型评价指标,只能用于二分类模型的评价。主要是描述正样本排在负样本之前的概率,数值可以通过ROC面积进行计算,一般通过公式计算得到AUC的值。】

AUC计算公式:

遍历所有的正负样本对
如果正样本的概率大于负样本,auc += 1
如果正样本的概率等于负样本,auc += 0.5
如果正样本的概率小于负样本,auc += 0
遍历结束,auc = auc / 正负样本对数

AUC虽然是一个比较公平的衡量指标,但是这并不意味着AUC是万能的。

AUC存在的缺陷:

AUC仅保持一个次序,无法区分“像”与“更像”的区别,无法反应正样本内部的排序,缺少更加细粒度的描述。

手撸计算AUC值代码:

def Cal_AUC(label, pred):
    positive = []
    negetive = []
    auc_value = 0
    for index, l in enumerate(label):
        if l == 0:
            negetive.append(index)
        else:
            positive.append(index)
    for i in positive:
        for j in negetive:
            if pred[i] > pred[j]:
                auc_value += 1
            elif pred[i] == pred[j]:
                auc_value += 0.5
    return auc_value * 1.0 / (len(positive)*len(negetive))
label = [1, 1, 0, 0, 0, 0, 0, 1]
pred = [0.9, 0.8, 0.3, 0.1, 0.4, 0.9, 0.66, 0.7]
print("auc:", Cal_AUC(label, pre))

【机器学习】手撕AUC的计算_第1张图片

 为了对结果进行验证,调库测试:

from sklearn import metrics
auc = metrics.roc_auc_score(label, pred)
print('sklearn:', auc)

【机器学习】手撕AUC的计算_第2张图片

 

你可能感兴趣的:(python,人工智能)