分类评价指标有 准确率(accuracy)、精确率(precision)、召回率(recall)、AUC面积、F值 等。

1. 准确率Accuracy

也称精度, 分类准确的样本数占该类样本总数的比例。

此外,分类错误的样本数占样本总数的比例称为“错误率”(error rate)。

假如,m个样本有 a个样本分类错误。

a c c = 1 a / m \\ acc = 1 - a/m
# calculate accuracy
from sklearn import metrics
print( metrics.accuracy_score(y_test, y_pred) )

空准确率 null accuracy

使用样本比例最多的类别进行预测时的准确率。

y_count = np.bincount(y_test)
ii = np.nonzero(y_count)[0]
print(y_count)
zip(ii, y_count[ii])
print('null acc', y_count[0]/ len(y_test) )

每类的accuracy

def cal_acc(true_labels, pred_labels):
    true_labels: like[2,1,4],
    pred_labels: like[1,2,3]
    output: the acc of each class.
    from collections import Counter
    total = Counter(true_labels)
    keys = np.unique(true_labels)
    acc = {}
    for key in keys:
        acc[key] = 0
    for i in range(len(pred_labels)):
        if pred_labels[i] == true_labels[i]:
            acc[pred_labels[i]] += 1
    for key in keys:
        acc[key] = acc[key] / total[key]
    return acc

2. AUC,Precision,Recall,ROC曲线

AUC是衡量二分类模型优劣的一种评价指标,表示正例的预测值比负例预测值大的概率

精确率 P precision = TP/(TP +FP),即正类预测对的个数和所有预测成正类样本数比值。

召回率 R recall = TP/(TP +FN),即预测正类样本和原来一共正类样本数的比值。

准确率 Acc Accuracy = (TP + TN)/(P + N)

ROC曲线 与 AUC面积

FPR:假正例率/假阳率(ROC的 x 轴);

FPR的含义是,把负类错误预测为正类的个数占总共负类的个数的比例。

FPR=FPTN+FPFPR = \frac{FP}{TN + FP}

TPR:真正例率/真阳率(ROC的 y 轴);

TPR的含义是,正确预测为正类的个数占总共预测正类的个数的比例。

TPR=TPTP+FNTPR = \frac{TP}{TP+FN}

ROC曲线, Receiver Operating Characteristic Curve, 受试者工作特征曲线, 是以假阳率(FPR)为横坐标,以真阳率(TPR)为纵坐标绘制的曲线。

ROC曲线与X坐标轴所围成的面积叫做AUC面积,这个面积也可以作为分类器的性能评价指标。面积越大,分类器性能越好。 值得注意的是,由于需要获得一系列的TPR,FPR,我们需要给出预测为正样本的概率。

假如我们已经得到了所有样本的概率输出(属于正样本的概率),现在的问题是如何改变“discrimination threashold”?我们根据每个测试样本属于正样本的概率值从大到小排序

下图是一个示例,图中共有20个测试样本,“Class”一栏表示每个测试样本真正的标签(p表示正样本,n表示负样本),“Score”表示每个测试样本属于正样本的概率4。

按照概率排序:

接下来,我们从高到低,依次将“Score”值作为阈值threshold,当测试样本属于正样本的概率大于或等于这个threshold时,我们认为它为正样本,否则为负样本。

举例来说,对于图中的第4个样本,其“Score”值为0.6,那么样本1,2,3,4都被认为是正样本,因为它们的“Score”值都大于等于0.6,而其他样本则都认为是负样本。 每次选取一个不同的threshold,就可以得到一组FPRTPR,即ROC曲线上的一点。这样一来,一共得到了20组FPRTPR的值,将它们画在ROC曲线的结果如下图:

当我们将threshold设置为10时,分别可以得到ROC曲线上的(0,0)(1,1)两个点。将这些(FPR,TPR)对连接起来,就得到了ROC曲线。当threshold取值越多,ROC曲线越平滑。 这里,阈值为1, 预测为正类的样本为0; 阈值为0, 预测为正类的样本为所有样本。正类样本预测对的个数= 正类样本个数,即TPR=1;负类样本预测成正类样本的个数 = 负类样本个数,FPR = 1.

ROC曲线的几个性质:

  • ROC 曲线越靠近左上角,准确度越高;且最高仅左上角的ROC曲线的点对应的阈值是,错误最小的阈值(即FP,FN总数最小);
  • ROC曲线不会随类别分布改变而改变,可以用于评价样本不平衡模型的效果.
  • 计算 AUC 代码

    根据AUC的定义,AUC=FPNTPPAUC = \sum \frac{FP}{N}*\frac{TP}{P}
    分类:
    人工智能
    标签: