机器学习中分类算法的评价标准
分类算法评价标准
评价指标
评价模型预测能力最广泛使用的是 二维混淆矩阵(Confusion matrix),具体如下图所示:
在混淆矩阵中,包含以下四种数据:
a、真 正 (True Positive, TP):被模型 正确 预测为 正 的正样本
b、假 正 (False Positive , FP):被模型 错误 预测为 正 的负样本
c、假 负 (False Negative , FN):被模型 错误 预测为 负 的正样本
d、真 负(True Negative, TN):被模型 正确 预测为 负 的负样本
评价指标:
1、 正确率(accuracy) :表示被模型 正确 预测的样本数占样本总数的比例,是我们最常见的评价指标,准确率是灵敏性和特效性度量的函数。计算公式为:
A
c
c
u
r
a
c
y
=
(
T
P
+
T
N
)
/
(
P
+
N
)
Accuracy = (TP+TN)/(P+N)
Accuracy=(TP+TN)/(P+N)
2、错误率(ErrorRate),也叫误分类率 :错误率则与正确率相反,表示被模型 错误 预测的样本数占样本总数的比例,计算公式为: E r r o r R a t e = ( F P + F N ) / ( P + N ) = 1 − A c c u r a c y Error Rate=(FP+FN)/(P+N)=1-Accuracy ErrorRate=(FP+FN)/(P+N)=1−Accuracy
3、召回率(Recall),也叫查全率 :表示被模型 正确 预测为 正 的样本数占 实际 为正例样本总数的比例,计算公式为: R e c a l l = T P / ( T P + F N ) = T P / P = S e n s i t i v i t y Recall=TP/(TP+FN)=TP/P=Sensitivity Recall=TP/(TP+FN)=TP/P=Sensitivity
4、精确率(Precision),也叫查准率,表示被模型 正确 预测为 正 的样本数占 预测 为正例样本总数的比例,计算公式为: P r e c i s i o n = T P / ( T P + F P ) = T P / P ' Precision=TP/(TP+FP)=TP/P' Precision=TP/(TP+FP)=TP/P'
5、灵敏性(sensitivity)或真正例率:表示与 召回率(Recall) 相等,计算公式为: s e n s i t i v i t y = T P / P sensitivity=TP/P sensitivity=TP/P
6、特效性(specificity)或真负例率:表示被模型 正确 预测为 负 的样本数占 实际 为负例样本总数的比例,计算公式为: S p e c i f i c i t y = T N / ( F P + T N ) = T N / N Specificity=TN/(FP+TN)=TN/N Specificity=TN/(FP+TN)=TN/N
备注:
针对灵敏性和特效性而言——对于平衡样本,单指标可衡量模型的准确性,对于非平衡样本,必须两个指标同时衡量才具有可信力。
7、F1-score,也叫综合分类率:用来衡量二分类模型精确度的指标,是基于召回率(Recall)与精确率(Precision)的调和平均,即将召回率和精确率综合起来评价,计算公式为:
F
1
−
s
c
o
r
e
=
2
×
R
e
c
a
l
l
×
P
r
e
c
i
s
i
o
n
R
e
c
a
l
l
+
P
r
e
c
i
s
i
o
n
w
h
e
r
e
P
r
e
c
i
s
i
o
n
=
T
P
T
P
+
F
P
;
R
e
c
a
l
l
=
T
P
T
P
+
F
N
=
A
c
c
+
\begin{aligned} &F1-score=\frac{2×Recall×Precision}{Recall+Precision}\\ &where \quad Precision=\frac{TP}{TP+FP};\quad Recall=\frac{TP}{TP+FN}=Acc^+ \end{aligned}
F1−score=Recall+Precision2×Recall×PrecisionwherePrecision=TP+FPTP;Recall=TP+FNTP=Acc+
宏平均(Macro-averaging)和微平均(Micro-averaging):
为了综合多个类别的分类情况,评测系统整体性能,经常采用的还有 微平均F1(micro-averaging) 和 宏平均F1(macro-averaging ) 两种指标,计算公式见链接。
宏平均F1与微平均F1是以两种不同的平均方式求的全局的F1指标。其中,
(1)宏平均F1的计算方法:先对每个类别单独计算F1值,再取这些F1值的算术平均值作为全局指标。
(2)微平均F1的计算方法:先累加计算各个类别的a、b、c、d的值,再由这些值求出F1值。
由两种平均F1的计算方式不难看出,宏平均F1平等对待每一个类别,所以它的值主要受到稀有类别的影响,而微平均F1平等考虑文档集中的每一个文档,所以它的值受到常见类别的影响比较大。
8、
F
β
F_β
Fβ加权调和平均:
F
β
F_β
Fβ 是
F
1
F1
F1度量的一般形式 ,能让我们表达出对查准率、查全率的不同偏好,计算公式如下:
F
β
=
(
1
+
β
2
)
∗
R
e
c
a
l
l
∗
P
r
e
c
i
s
i
o
n
R
e
c
a
l
l
+
(
β
2
∗
P
r
e
c
i
s
i
o
n
)
F_β=\frac{(1+β^2)*Recall*Precision}{Recall+(β^2*Precision)}
Fβ=Recall+(β2∗Precision)(1+β2)∗Recall∗Precision
其中,
β
>
0
β>0
β>0 度量了查全率对查准率的相对重要性。
β
=
1
β=1
β=1时,P、R权重相等,此时退化为标准的
F
1
F1
F1;
β
>
1
β>1
β>1 时查全率有更大影响(即:R的权重>P的权重
);
β
<
1
β<1
β<1 时查准率有更大影响(即:R的权重<P的权重)。
9、
G
−
m
e
a
n
G-mean
G−mean:计算公式如下:
G
−
m
e
a
n
=
(
A
c
c
+
×
A
c
c
−
)
1
/
2
w
h
e
r
e
A
c
c
+
=
T
P
T
P
+
F
N
;
A
c
c
−
=
T
N
T
N
+
F
P
\begin{aligned} &G-mean=(Acc^+×Acc^-)^{1/2}\\&where Acc^+=\cfrac{TP}{TP+FN};\quad Acc^-=\cfrac{TN}{TN+FP} \end{aligned}
G−mean=(Acc+×Acc−)1/2whereAcc+=TP+FNTP;Acc−=TN+FPTN
评价曲线
9、ROC曲线(ROC Curve):全称为“Receiver Operating Characteristic(受试者工作特征)”。ROC曲线是评判一个模型好坏的标准。
适用前提:两个分类模型是 均等代价 。广泛用于度量分类中样本集存在 非均衡性 的情况。
备注:
TPR(True Positive Rate):表示在所有实际为正的样本中,被 正确地判断 为正的比率,即: T P R = T P / ( T P + F N ) = T P / P TPR=TP/(TP+FN)=TP/P TPR=TP/(TP+FN)=TP/P;
FPR( False Positive Rate):表示在所有实际为负的样本中,被 错误地判断 为正的比率,即: F P R = F P / ( F P + T N ) = F P / F FPR=FP/(FP+TN)=FP/F FPR=FP/(FP+TN)=FP/F。
ROC曲线显示了给定模型的真正例率(TPR)和假正例率(FPR)之间的权衡,ROC曲线的横坐标为false positive rate(FPR),纵坐标为true positive rate(TPR),FPR越大表明预测正类中实际负类越多,TPR越大,预测正类中实际正类越多。ROC曲线如下图所示:
ROC曲线的理解:
ROC上几个关键点的解释:
1、(TPR=0,FPR=0):把每个实例都预测为负类的模型
2、(TPR=1,FPR=1):把每个实例都预测为正类的模型
3、(TPR=1,FPR=0):理想模型,全部预测正确
4、(TPR=0,FPR=1):最差模型,全部预测错误
\quad
连接点(TPR=0,FPR=0)和(TPR=1,FPR=1)的主对角线 形成的ROC curve实际上代表一个 随机分类器,而一个好的分类模型应该尽可能靠近图形的左上角。
\quad
既然已经有这么多评价标准,为什么还要使用 R O C ROC ROC和 A U C AUC AUC呢?
\quad
Answer: 因为ROC曲线有个很好的特性:当测试集中的正、负样本的分布变化的时候,ROC曲线能够保持不变。在实际的数据集中经常会出现类不平衡(class imbalance)现象,即负样本比正样本多很多(或者相反),而且测试数据中的正、负样本的分布也可能随着时间变化。
ROC曲线的绘制过程:
现实任务中通常利用有限个测试样例来绘制ROC图,此时仅能获得有限个(真正例率,假正例率)坐标对,无法产生图(a)中光滑的ROC曲线,只能绘制如图(b)所示的近似ROC曲线。
ROC曲线的分类原理:
分类的过程就相当于在排序中以某个“截断点(cut point)”将样本分为两部分,前一部分判断正例,后一部分为反例。不同任务中根据需求划分截断点;重视查准率(精度),靠前位置截断;重视查全率(召回率),靠后位置截断。
ROC曲线的绘图过程:
(1)给定 m + m^+ m+个正例和 m − m^- m−个反例,根据学习器预测结果对样例进行排序(排序方法:“最可能”是正例的样本排在最前面,“最不可能”是正例的排在最后面);
(2)先把分类阈值设为最大,即把所有样例均预测为反例,此时真正例率和假正例率均为0,在坐标(0,0)处标记一个点。
(3)再将分类阈值依次设为每个样例的预测值,即依次将每个样例划分为正例。设前一个标记点坐标为(x,y),当前若为真正例,则对应标记点的坐标为 ( x , y + 1 m + ) (x,y+\frac{1}{m^+}) (x,y+m+1);当前若为假正例,则对应标记点的坐标为 ( x + 1 m − , y ) (x+\frac{1}{m^-},y) (x+m−1,y),然后用线段连接相邻点即可。
ROC曲线的分析评判:
(1)若一个学习器的ROC曲线被另一个学习器的曲线完全“包住”,则可断言后者性能优于前者;
(2)若两个学习器的ROC曲线曲线交叉,可以根据ROC曲线下面积大小进行比较,也即AUC(Area Under ROC Curve)值。
AUC的计算
AUC可通过对ROC曲线下各部分的面积求和而得。假定ROC曲线由坐标为 ( x 1 , y 1 ) , ( x 2 , y 2 ) , . . . , ( x m , y m ) {(x_1,y_1),(x_2,y_2),...,(x_m,y_m)} (x1,y1),(x2,y2),...,(xm,ym)的点,按序连接而形成 ( x 1 = 0 , x m = 1 ) (x_1=0,x_m=1) (x1=0,xm=1),则 AUC的估算公式 为:
A U C = 1 2 ∑ i = 1 m − 1 ( x i + 1 − x i ) ⋅ ( y i + y i + 1 ) AUC=\frac{1}{2}\sum^{m-1}_{i=1}(x_{i+1}-x_i)\cdot(y_i+y_{i+1}) AUC=21i=1∑m−1(xi+1−xi)⋅(yi+yi+1)
AUC给出的是分类器的平均性能值,它并不能代替对整条曲线的观察。一个完美的分类器的AUC为1.0,而随机猜测的AUC值为0.5
10、AUC(Area Under ROC Curve):AUC的值就是 处于ROC curve下方的那部分面积的大小。
通常,AUC的值介于0.5到1.0之间,较大的AUC代表了较好的performance。
(1)如果模型是完美的,那么它的AUG = 1;
(2)如果模型是个简单的随机猜测模型,那么它的AUG = 0.5;
(3)如果一个模型好于另一个,则它的曲线下方面积相对较大。
11、K-S曲线:全称为 “Kolmogorov-Smirnov(正样本洛伦兹曲线与负样本洛伦兹曲线的差值曲线)”。K-S曲线度量学习器将正例和反例分开的能力,确定最好的“截断点”,常用于对模型的风险区分能力进行评估。
适用场景:
通常是在模型预测全体信用样本的信用评分后,将样本按违约率与非违约率分成两部分,然后用KS统计量来检验两组样本信用评分是否具有显著性差异。
K-S值的计算公式:
K
S
=
m
a
x
(
C
u
m
.
B
a
d
i
B
a
d
t
o
t
a
l
−
C
u
m
.
G
o
o
d
i
G
o
o
d
t
o
t
a
l
)
KS=max\big( \frac{Cum.Bad_i}{Bad_{total}} \quad−\quad \frac{Cum.Good_i}{Good_{ total}}\big)
KS=max(BadtotalCum.Badi−GoodtotalCum.Goodi)
其
中
,
C
u
m
.
B
a
d
i
和
C
u
m
.
G
o
o
d
i
分
别
表
示
分
数
累
积
到
第
i
个
分
位
点
的
坏
样
本
个
数
和
好
样
本
个
数
其中,Cum.Bad_i和Cum.Good_i分别表示分数累积到第 i 个分位点的坏样本个数和好样本个数
其中,Cum.Badi和Cum.Goodi分别表示分数累积到第i个分位点的坏样本个数和好样本个数
K-S曲线特征:
KS曲线是两条线,其横轴表示 阈值 (即:总样本累积比例),纵轴表示 TPR与FPR的值 (即:累积好,坏样本分别占总的好,坏样本的比例。),KS值的取值范围是[0,1] ,然后在两条曲线分隔最开的地方,对应的就是划分模型最好的阈值,也是该模型最好的AUC值。通常来讲,
K
S
>
0.2
KS>0.2
KS>0.2 即表示模型有较好的预测准确性。
好坏样本累计差异越大,KS值越大,表示模型能够将正、负客户区分开的程度越大,说明模型的风险区分能力越强;KS值还可以用来选择最佳阈值。
KS曲线受到样本类别不平衡的影响较小,但要注意的是:即便正负样本完全分错了,KS值依然会很高。
K-S曲线的示例样图如下:
K-S曲线的作图步骤:
- 根据分类模型返回的预测结果(注意:是正例的概率值,非0/1变量)将样本从大到小进行排序,得到rank−threshold——这就是截断点依次选取的顺序;
- 按顺序选取截断点,并计算TPR、FPR 和它们之间的差值——通常把0-1之间等分N份,等分点为阈值(如:以10%*k(k=1,2,3,…,10)为横坐标),也可以将每个样本点作为阈值;
- 横轴为rank−threshold(即:样本的占比百分比(最大100%)),纵轴分别为TPR和FPR,可以得到KS曲线;
- TPR和FPR曲线分隔最开的位置就是最好的”截断点“,KS值即为Max(TPR-FPR)。
Logistic Regression模型中,K-S曲线的作图方法:
(1)把Logistic Regression模型对样本的输出概率(predict_proba)从大到小排序得rank−threshold;
(2)计算阈值取每个概率时对应的TPR和FPR值;
(3)以(rank−threshold,TPR)画正样本曲线,以(rank−threshold,FPR)画负样本曲线,就构成K-S曲线 ;
(4)K-S曲线上的KS值,为 m a x ( T P R − F P R ) max(TPR−FPR) max(TPR−FPR),即两条曲线间的最大间隔距离。
12、代价敏感错误率和代价曲线:适用前提: 两个分类模型是 非均等代价。
非均等代价:
现实任务中不同类型的错误所造成的后果很可能不同,为了权衡不同类型错误所造成的不同损失,可为错误赋予“非均等代价”。
以二分类为例,可根据领域知识设定 “代价矩阵”,如下表所示,其中 c o s t i j cost_{ij} costij表示将第 i {i} i 类样本预测为第 j {j} j 类样本的代价。一般来说, c o s t i i = 0 cost_{ii}=0 costii=0;若将第 0 0 0 类,判别为第 1 1 1 类所造成的损失更大,则 c o s t 01 > c o s t 10 cost_{01}>cost_{10} cost01>cost10;损失程度越大, c o s t 01 cost_{01} cost01与 c o s t 10 cost_{10} cost10值的差别越大。
(1)在非均等代价下,不再最小化错误次数,而是最小化“总体代价”,则 "代价敏感”错误率 相应的为:
E
(
f
;
D
;
c
o
s
t
)
=
1
m
(
∑
x
i
∈
D
+
∣
∣
(
f
(
x
i
)
≠
y
i
)
×
c
o
s
t
01
+
∑
x
i
∈
D
−
∣
∣
(
f
(
x
i
)
≠
y
i
)
×
c
o
s
t
10
)
E(f;D;cost)=\frac{1}{m}(\sum_{x_i∈D^+}||(f(x_i)≠y_i)×cost_{01}+\sum_{x_i∈D^-}||(f(x_i)≠y_i)×cost_{10})
E(f;D;cost)=m1(xi∈D+∑∣∣(f(xi)=yi)×cost01+xi∈D−∑∣∣(f(xi)=yi)×cost10)
(2)在非均等代价下,ROC曲线 不能直接反映出学习器的期望总体代价,而 “代价曲线(cost curve)” 可以。
代价曲线图
代价曲线图的横轴是取值为[0,1]的正例概率代价 P ( + ) c o s t P(+)cost P(+)cost,计算公式为:
P ( + ) c o s t = p × c o s t 01 p × c o s t 01 + ( 1 − p ) × c o s t 10 P(+)cost=\frac{p×cost_{01}}{p×cost_{01}+(1-p)×cost_{10}} P(+)cost=p×cost01+(1−p)×cost10p×cost01
其中 p p p是样例为正例的概率;
代价曲线图的纵轴是取值为 [ 0 , 1 ] [0,1] [0,1]的归一化代价 c o s t n o r m cost_{norm} costnorm,计算公式为:
c o s t n o r m = F N R × p × c o s t 01 + F P R × ( 1 − p ) × c o s t 10 p × c o s t 01 + ( 1 − p ) × c o s t 10 cost_{norm}=\frac{FNR×p×cost_{01}+FPR×(1-p)×cost_{10}}{p×cost_{01}+(1-p)×cost_{10}} costnorm=p×cost01+(1−p)×cost10FNR×p×cost01+FPR×(1−p)×cost10
其中, F P R FPR FPR是假正例率, F N R = 1 − T P R FNR=1-TPR FNR=1−TPR 是假反例率。
代价曲线的绘制:
(1)ROC曲线上每个点对应了代价曲线上的一条线段,设ROC曲线上点的坐标为 ( T P R , F P R ) (TPR,FPR) (TPR,FPR),则可相应计算出 F N R FNR FNR;
(2)在代价平面上绘制一条从 ( 0 , F P R ) (0,FPR) (0,FPR)到 ( 1 , F N R ) (1,FNR) (1,FNR)的线段,线段下的面积即表示了该条件下的期望总体代价;
(3)如此将ROC曲线上的每个点转化为代价平面上的一条线段,然后取所有线段的下界,围成的面积即为所有条件下学习器的期望总体代价。
13、P-R曲线:查准率-查全率曲线,以查准率为纵轴,查全率为横轴作图。如下图所示:
(1)若一个学习器的P-R曲线被另一个学习器的曲线完全“包住”,则后者性能优于前者,上图中学习器A的性能优于学习器C;
(2)若两个学习器的P-R曲线发生交叉,则需要比较P-R曲线下面积的大小,但这个面积不容易估算,通常综合考虑查准率、查全率的性能度量 “平衡点(Break-Event Point,BEP) ”,BEP是 “查准率=查全率”时的取值。但BEP还是过于简化,此时更常用的是前面提到的 F1度量。
总结:
(1)当数据集样本呈现均衡分布时,选择准确率(Accuracy)作为分类性能的评价指标,效果最好;
(1)当数据集样本呈现不均衡分布时,选择其他度量,如灵敏度(或召回率)、特效性、精度、 F 1 F1 F1和 F β F_β Fβ更适合。
:
其他评价指标
除了上述11项基本的分类性能评价指标外,还可以根据其他方面比较分类器:
1、速度:涉及产生和使用分类器的计算开销。
2、鲁棒性:这是假定数据有噪声或有缺失值时分类器做出正确预测的能力。通常,鲁棒性用噪声和缺失值渐增的一系列合成数据集评估。
3、可伸缩性:这涉及给定大量数据,有效地构造分类器的能力。通常,可伸缩性用规模渐增的一系列数据集评估。
4、可解释性:这涉及分类器或预测器提供的理解和洞察水平。可解释性是主观的,很难评估。
分类算法评价标准的python实现
#调用sklearn库中的指标求解
from sklearn import metrics
from sklearn.metrics import precision_recall_curve
from sklearn.metrics import average_precision_score
from sklearn.metrics import accuracy_score
#给出分类结果
y_pred = [0,1,0,0]
y_true = [0,1,1,1]
print("accuracy_score:",accuracy_score(y_true,y_pred))
print("precision_score:", metrics.precision_score(y_true, y_pred))
print("recall_score:", metrics.recall_score(y_true, y_pred))
print("f1_score:", metrics.f1_score(y_true, y_pred))
print("f0.5_score:", metrics.fbeta_score(y_true, y_pred, beta=0.5))
print("f2_score:", metrics.fbeta_score(y_true, y_pred, beta=2.0))
>>>
accuracy_score: 0.5
precision_score: 1.0
recall_score: 0.3333333333333333
f1_score: 0.5
f0.5_score: 0.7142857142857143
f2_score: 0.3846153846153846