错误率和精度
是分类任务中的两种性能度量,可用于二分类和多分类。错误率是分错的样本比例,精度是分对的样本比例。
设
f
f
f是模型函数,
D
D
D是样本集;则错误率为:
E
(
f
,
D
)
=
1
n
∑
i
=
1
n
I
(
f
(
x
i
)
≠
y
i
)
E(f,D)=\frac{1}{n} \sum_{i=1}^{n}I(f(x_{i})\neq y_{i})
E(f,D)=n1∑i=1nI(f(xi)̸=yi)
精度则为:
a
c
c
(
f
,
D
)
=
1
−
E
(
f
,
D
)
acc(f,D)=1-E(f,D)
acc(f,D)=1−E(f,D)
准确率和召回率与F1值
对于二分类问题如表:
预测结果 | ||
---|---|---|
真实结果 | 正例 | 反例 |
正例 | TP | FN |
反例 | FP | TN |
准确率:
P
=
T
P
T
P
+
F
P
P=\frac{TP}{TP+FP}
P=TP+FPTP
召回率:
R
=
T
P
T
P
+
F
N
R=\frac{TP}{TP+FN}
R=TP+FNTP
P-R图
P-R图是以召回率为横坐标,准确率为纵坐标的曲线,平衡点(break-even point,BEP)是y=x与之的交点,即是准确率=召回率的点。BEP过于简化,没有考虑两者的不同权重考虑,因而一般采用F1值。
F1值是综合考虑准确率和召回率的度量(是两者的调和平均):
F
1
=
2
P
R
P
+
R
F1=\frac{2PR}{P+R}
F1=P+R2PR即调和平均
1
F
1
=
1
2
(
1
P
+
1
R
)
\frac{1}{F1}=\frac{1}{2}(\frac{1}{P}+\frac{1}{R})
F11=21(P1+R1)
更一般的情况: 1 F β = 1 1 + β 2 ⋅ ( 1 P + 1 R ) \frac{1}{F_{\beta }}=\frac{1}{1+\beta ^{2}}\cdot (\frac{1}{P}+\frac{1}{R}) Fβ1=1+β21⋅(P1+R1)
当训练一组数据,会用交叉验证或者自助法来做时,会产生很多个混合矩阵,这时候,直接的做法是采用各个准确率、召回率取平均值,再计算F1值;还有一种是对混合矩阵对应元素取平均值,再计算各个准确率和召回率。
ROC和AUC
ROC曲线以“假正例率”FPR为横轴,“真正例率”TPR为纵轴:
T
P
R
=
T
P
T
P
+
F
N
TPR=\frac{TP}{TP+FN}
TPR=TP+FNTP
F
P
R
=
F
P
F
P
+
T
N
FPR = \frac{FP}{FP+TN}
FPR=FP+TNFP
可以看到TPR和前面的召回率是一样的算法;AUC是ROC曲线右下的面积大小;
对角线表示随机模型的效果,显然ROC曲线要在左上角为好,相比随机分类越好。实际画ROC的时候,将样本点按照属于‘正样本’的概率将所有样本排序,不断调整分类的截断点,所以这是一个有限样本的曲线,看起来不会这么光滑。
代价敏感错误率
在不同的场景下,不同类别的错误造成的后果不一样。将所有的分错的代价看成是一样的似乎不太合理,所以有时会在代价函数中对于不同的错误分配给不同的权重;
例如不平衡样本中,对于少数类的分错,可以加大它的分错权重。
预测结果 | ||
---|---|---|
真实结果 | 正例 | 反例 |
正例 | 0 | c o s t 10 cost_{10} cost10 |
反例 | c o s t 01 cost_{01} cost01 | 0 |
D
+
、
D
−
D^{+}、D^{-}
D+、D−分别为正负类别数据集,则代价敏感错误率表示为:
E
(
f
;
D
;
c
o
s
t
)
=
1
n
(
∑
x
∈
D
+
I
(
f
(
x
i
)
≠
y
i
)
×
c
o
s
t
01
+
∑
x
∈
D
−
I
(
f
(
x
i
)
≠
y
i
)
×
c
o
s
t
10
)
E(f;D;cost)=\frac{1}{n}(\sum_{x\in D^{+}}I(f(x_{i})\neq y_{i})\times cost_{01}+\sum_{x\in D^{-}}I(f(x_{i})\neq y_{i})\times cost_{10})
E(f;D;cost)=n1(∑x∈D+I(f(xi)̸=yi)×cost01+∑x∈D−I(f(xi)̸=yi)×cost10)
比较检验
在对比两个学习器的性能的时候,由于本身测量学习器的性能对数据集有所依赖,并且有些学习器本身就具有一定的随机性,比较科学的方法是使用统计假设检验来进行推断。
交叉验证t检验
两个学习器A和B,用k折交叉验证分别得到k个错误率
ϵ
1
A
.
.
.
ϵ
k
A
和
ϵ
1
B
.
.
.
ϵ
k
B
\epsilon _{1}^{A}...\epsilon _{k}^{A}和\epsilon _{1}^{B}...\epsilon _{k}^{B}
ϵ1A...ϵkA和ϵ1B...ϵkB;H0假设是:两个学习器的错误率相等。
这里用成对t检验来验证,因为其比较的目的是检验两相关样本均数所代表的未知总体均数是否有差别,虽然是两个学习器,但是是对同一组数据进行训练得到的误差率。
计算错误率的差值
Δ
i
=
ϵ
i
A
−
ϵ
i
B
\Delta _{i}=\epsilon _{i}^{A}-\epsilon _{i}^{B}
Δi=ϵiA−ϵiB,然后计算差值的均值和方差
μ
,
σ
\mu ,\sigma
μ,σ;得到t统计量:
τ
=
∣
k
μ
σ
∣
\tau =|\frac{\sqrt{k}\mu}{\sigma}|
τ=∣σkμ∣
在显著度
α
\alpha
α下,双边检验,大于
t
α
2
k
−
1
t_{\frac{\alpha }{2}}^{k-1}
t2αk−1则拒绝原假设,否则落在左侧拒绝域的时候说明A误差率小,反之B更小。
但是这个假设检验的前提是:
1.来自正态分布总体; 2.随机样本 ;
但是样本数据是有限的,所以训练集会有一定的重合,使得错误率实际上不是独立的;改善这一问题可以用5X2交叉验证。
McNemar检验
算法A | ||
---|---|---|
算法B | 正确 | 错误 |
正确 | e 00 e_{00} e00 | e 01 e_{01} e01 |
错误 | e 10 e_{10} e10 | e 11 e_{11} e11 |
如果A和B错误率相同,那么
e
01
e_{01}
e01和
e
10
e_{10}
e10应该相等;考虑统计量:
τ
χ
2
=
(
∣
e
01
−
e
10
∣
−
1
)
2
e
01
+
e
10
\tau _{\chi ^{2}}=\frac{(|e_{01}-e_{10}|-1)^{2}}{e_{01}+e_{10}}
τχ2=e01+e10(∣e01−e10∣−1)2
做自由度为1的卡方检验。