文章目录
简述
分类是常见的有监督机器学习. 给定一个对象x, 划分到预定义好的一个类别y中. 当y有两种取值时, 就是二分类.
应用有 新闻分类, 商品分类, 垃圾邮件过滤等.
ctr 估也可以看作是二分类。
准备知识
二分类可以用P表示阳性,N表示阴性, 那么就有下列表格.
实际类别 | 预测正确数 | 预测错误数 | 备注 |
---|---|---|---|
P | TP | FN | P=TP+FN |
N | TN | FP | N=TN+FP |
符号说明
- TP, True Positive
- FP, False Positive
假阳性, 错误地把阴性判断成了阳性. - TN, True Negative
- FN, False Negative
总指标
- 准确度
A c c u r a c y = T P + T N P + N Accuracy=\frac {TP+TN}{P+N} Accuracy=P+NTP+TN
分类别指标
单独关心阳性类别的判断, 调整上述指标的分子与分母,有以下指标。
- 精确率
P r e c i s i o n ( P ) = T P T P + F P Precision(P)=\frac{TP}{TP+FP} Precision(P)=TP+FPTP - 召回率
R e c a l l ( P ) = T P R = T P P Recall(P)=TPR=\frac{TP}{P} Recall(P)=TPR=PTP - TPR
TPR, True Positive Rate.
T P R = R e c a l l ( P ) = T P P TPR=Recall(P)=\frac{TP}{P} TPR=Recall(P)=PTP - FPR
F P R = F P N FPR=\frac{FP}{N} FPR=NFP, 该指标越低效果越好. - F1 -Score
F 1 ( y 1 ) = 2 × P r e c i s i o n ( P ) × R e c a l l ( P ) P r e c i s i o n ( P ) + R e c a l l ( P ) F1(y_1)=\frac{2\times Precision(P)\times Recall(P)}{Precision(P)+ Recall(P)} F1(y1)=Precision(P)+Recall(P)2×Precision(P)×Recall(P)
可以看到, 精确率和召回率有着一些相互对立, 此消彼长的关系.
ROC
ROC , Receiver Operating Characteristic.
有些分类器(如朴素贝叶斯) , 输出的是 <预测类别, 概率>
的形式, 取不同的阈值, 就可以在当前数据集上得到不同的指标. 以FPR
为横轴,TPR
为纵轴,画出来的就是ROC曲线。
AUC
AUC, Area Under Curve. 就是ROC曲线与坐标轴所围成区域的面积. 值域通常为
[
0.5
,
1.0
]
[0.5,1.0]
[0.5,1.0],值越大效果越好.
如果AUC值为1 则代表完美的分类器, AUC 等于0.5 则表示与随机分类(俗称瞎蒙)效果一样,所以有个 y= x 的直线,这个线就是0.5的标准。 一般分类在0.7到0.9之间就具有一定的分类效果了,高于0.9那么你的分类就特牛了。
在样本分布不均衡的情况下, 只关注分类的总体正确率(Accuracy) 意义不大.
比如二分类, 真实的样本空间中A:B=99:1, 那么我即便不用机器学习, 每次都预测为A, 也能获得0.99的Accuracy.
GAUC
Group AUC, AUC的一个变种, 常用于{推荐,计算广告} 等个性化场景, 通常以user作为group的维度, 即 user weighted AUC.
AUC 是全局样本排序能力的一个体现, GAUC 侧重于单个user下样本间的排序能力, 以此作离线指标, 对线上AB效果的参考性更强.
G
A
U
C
=
∑
u
∈
U
s
a
m
p
l
e
C
n
t
(
u
)
∗
A
U
C
u
∑
u
∈
U
s
a
m
p
l
e
C
n
t
(
u
)
(2)
GAUC=\frac{\sum_{u\in U}sampleCnt(u)*AUC_u} {\sum_{u\in U}sampleCnt(u)} \tag 2
GAUC=∑u∈UsampleCnt(u)∑u∈UsampleCnt(u)∗AUCu(2)
where
A
U
C
u
AUC_u
AUCu 表示该user下样本所组成数据集的AUC.
case
该例子来自参考[2].
举个很简单的例子,假如有两个用户,分别是甲和乙,一共有5个样本,其中+表示正样本,-表示负样本,我们把5个样本按照模型A预测的score从小到大排序,得到 甲-,甲+,乙-,甲+,乙+. 那么实际的auc应该是 (1+2+2)/(32)=0.833, 那假如有另一个模型B,把这5个样本根据score从小到大排序后,得到 甲-,甲+,甲+,乙-,乙+, 那么该模型预测的auc是(1+1+2)/(32)=0.667.
样本不均衡的讨论
在推荐任务中, 正负样本比可以达到1:19. 此时用rand()去预测, GAUC依旧是0.5.
多种实现方法
原始定义, 计算面积
划取不同的阈值,分别计算 FPR与TPR, 再计算AUC。
sklearn 实现
sklearn.metrics.ranking.roc_auc_score(y_true, y_score,...)
是sklearn中的方法,它划取不同的阈值,分别计算 FPR与TPR, 再计算AUC。
import numpy as np
from sklearn.metrics import roc_auc_score
y_true = np.array([0, 0, 1, 1])
y_scores = np.array([0.1, 0.4, 0.35, 0.8])
print("AUC is ", roc_auc_score(y_true, y_scores)) # 0.75
tensorflow 实现
tf.metrics.auc(labels, predictions, ...)
, 与 sklearn 实现 一致.
等价方法,计算样本对
详见参考[1].
以
<
P
,
N
>
<P,N>
<P,N>这样的pair形式,在有M个正样本,N个负样本的数据集中, 可以组成
C
M
1
C
N
1
C_M^1C_N^1
CM1CN1个样本对.
A
U
C
=
∑
i
=
0
M
∗
N
I
(
p
a
i
r
i
)
M
∗
N
(1)
AUC=\frac{\sum_{i=0}^{M*N}I(pair_i)}{M*N} \tag 1
AUC=M∗N∑i=0M∗NI(pairi)(1)
where
I
(
p
a
i
r
i
)
∈
{
0
,
1
}
I(pair_i)\in\{0,1\}
I(pairi)∈{0,1}, 表示分类器有没有对这个pair正确分类, 若正确分类得分为1.
参考
- 他人blog,AUC的计算方法
- 他人blog,机器学习算法评价指标之group auc(gauc)