文章目录
绪论
我尝试对书中第二章的每一个知识点进行归纳总结,并且某些知识点也会记录一下自己的想法,部分公式也会跟着南瓜书的进行推导,希望能够对机器学习有更深入地理解。
一、经验误差与过拟合
- 错误率(error rate) 分类错误的样本数占样本总数的比例。即,如果在 m m m个样本中有 a a a个样本分类错误,则错误率 E = a / m E=a/m E=a/m。
- 精度(accuracy) 精度=1 − - − 错误率。
- 误差(error) 学习器(模型)的实际预测输出与样本的真实输出之间的差异。
- 训练误差(training error)or 经验误差(empirical error) 学习器在训练集上的误差。
- 泛化误差(generalization error) 学习器在新样本上的误差。
- 过拟合(overfitting) 当学习器把训练样本学得"太好"了的时候,很可能巳经把训练样本自身的一些特点当作了所有潜在样本都会具有的一般性质,这样就会导致泛化性能下降。
- 欠拟合(underfitting) 是指对训练样本的一般性质尚未学好。
注:过拟合常见原因,是由于学习能力过于强大,以至于把训练样本所包含的不太一般的特性都学到了,而欠拟合则通常是由于学习能力低下而造成。并且,过拟合无法避免。
二、评估方法
机器学习中的模型选择问题:在现实任务中,我们往往有多种学习算法可供选择,甚至对同一个学习算法,当使用不同的参数配置时,也会产生不同的模型。而选择哪种学习算法和参数配置,就是模型选择问题。
1.留出法
书中解释:“留出法” (hold-out) 直接将数据集
D
D
D划分为两个互斥的集合,其中一个
集合作为训练集
S
S
S,另一个作为测试集
T
T
T, 其中
D
=
S
∪
T
,
S
∩
T
=
⊘
D=S\cup T,S \cap T=\oslash
D=S∪T,S∩T=⊘。在
S
S
S上训练出模型后,用
T
T
T来评估其测试误差,作为对泛化误差的估计。
注意:
(1)训练/测试集的划分要尽可能保持数据分布的一致性,避免因数据划分过程引入了额外的偏差,而对最终结果产生影响。例如在分类任务中,至少要保持样本的类别比例相似。
(2)单次使用留出法得到的估计结果往往不够稳定可靠。在使用留出法时,一般要采用若干次随机划分、重复进行实验评估后取平均值作为留出法的评估结果。
(3)留出法划分训练集/测试集的常见做法是将大约 2 / 3 ∼ 4 / 5 2/3 \sim 4/5 2/3∼4/5样本用于训练,剩余样本用于测试。
2.交叉验证法
交叉检验法就是把数据集划分成
k
k
k 个大小规模相同并且互斥的子集,并且每一个子集要保证数据分布的比例性。然后每次从这些子集和中拿出一个与前几次都不同的子集作为测试集,剩下的作为训练集。由测试集得到的每组测试结果再取平均值。一般划分次数为10次,并且书中给出的10次交叉验证直观图如下。
但是,为了减少因为对数据集的不同划分而带来的误差,交叉验证划分一般要重复多次。若交叉验证划分
k
k
k 个子集,并且重复
p
p
p 次交叉验证,则最终的评估结果是这
p
p
p 次
k
k
k 折交叉验证结果的均值。
这里书中也引出了留一法(Leave-On-Out,简称 LOO )。留一法指划分的 k k k 个子集和数据集中的样本数 m m m 一样多,即 k = m k=m k=m。此时交叉验证的划分方式只有唯一种,所以不用担心划分带来的误差。但是,虽然留一法的结果比较准确,但是当数据集很大时,使用留一法会带来高额计算量;并且,留一法也不见得一直比其他方法结果更准确。
3.自助法
通过留出法和交叉验证法可以知道,数据集中的一部分样本用于测试了,因此实际评估的模型所使用的训练集比数据集小,这会引入一些因训练样本规模不同而导致的估计偏差。留一法有可能会有高额计算开销。自助法可以解决此类问题。
自助法(bootstrapping):给定包含 m m m个样本的数据集 D D D,我们对它进行采样产生数据集 D ′ D' D′。 D ′ D' D′是这样得来的:每次随机从 D D D中挑选一个样本,将其拷贝后再放入 D ′ D' D′,(既然这里说了是拷贝,说明 D D D中保留了原样本)然后再将该样本放回初始数据集 D D D中,使得该样本在下次采样时仍有可能被采到;这个过程重复执行 m m m次后,我们就得到了包含 m m m个样本的数据集 D ′ D' D′,这就是自助采样的结果。
其中,
D
D
D中有一部分样本会在
D
′
D'
D′中多次出现,而有一部分却不会出现。假设,样本每次被采到的概率为
1
m
\frac{1}{m}
m1,与之相反的始终不被采到的概率为
1
−
1
m
1-\frac{1}{m}
1−m1。则重复采样m次后,始终不被采到的概率为
(
1
−
1
m
)
m
{(1-\frac{1}{m})}^m
(1−m1)m。若采样重复次数趋于无穷,则可以取得极限有:
lim
m
→
∞
(
1
−
1
m
)
m
→
1
e
≈
0.368
\lim_{m\to\infty}{(1-\frac{1}{m})}^{m} \rightarrow \frac{1}{e} \approx 0.368
m→∞lim(1−m1)m→e1≈0.368
即通过自助采样,初始数据集
D
D
D中约有
36.8
%
36.8\%
36.8% 的样本未出现在采样数据集
D
′
D'
D′中。于是,我们可将
D
′
D'
D′ 用作训练集
D
∖
D
′
D \setminus D'
D∖D′ 用作测试集。
4.调参与最终模型
除了选择合适的学习算法外,对算法参数的设定同等重要。这个过程叫做调参。
在利用训练集训练出模型后,应该再用整个数据集重新训练模型。并且,再利用验证集来对模型的泛化能力进行评估,基于评估再来进行模型的选择和调参。
三、性能度量
性能度量的定义:衡量模型泛化能力的评价标准。
在预测任务中,给定样例集 D = ( x 1 , y 1 ) , ( x 2 , y 2 ) , ⋯ , ( x m , y m ) D = {(x_1 , y_1) ,(x_2 ,y_2),\cdots , (x_m, y_m)} D=(x1,y1),(x2,y2),⋯,(xm,ym)其中, y i y_i yi 是示例 x i x_i xi 的真实标记。要评估学习器 f f f的性能,就要把学习器预测结果 f ( x ) f(x) f(x)与真实标记 y y y进行比较。
回归任务中最常见的性能度量是均方误差:
E
(
f
;
D
)
=
1
m
∑
i
=
1
m
(
f
(
x
i
)
−
y
i
)
2
E(f;D) = \frac{1}{m} \sum_{i=1}^{m}{(f(x_i)-y_i)}^2
E(f;D)=m1i=1∑m(f(xi)−yi)2
若有数据分布
D
\mathcal{D}
D 和概率密度
p
(
.
)
p(.)
p(.),均方误差也可描述如下:
E
(
f
;
D
)
=
∫
x
∼
D
(
f
(
x
)
−
y
)
2
p
(
x
)
d
x
E(f;\mathcal{D}) =\int_{\mathcal{x\thicksim D}} {(f(x)-y)}^2 p(x) dx
E(f;D)=∫x∼D(f(x)−y)2p(x)dx
1.错误率与精度
错误率:分类错误的样本数占样本总数的比例。
精度:分类正确的样本数占样本总数的比例。
周志华老师也给出了二者的公式定义,十分的直观。
对于样例集
D
D
D,错误率定义为:
E
(
f
;
D
)
=
1
m
∑
i
=
1
m
I
(
f
(
x
i
)
≠
y
i
)
E(f;D) = \frac{1}{m} \sum_{i=1}^{m}\mathbb{I}{(f(x_i) \ne y_i)}
E(f;D)=m1i=1∑mI(f(xi)=yi)
精度定义为:
a
c
c
(
f
;
D
)
=
1
m
∑
i
=
1
m
I
(
f
(
x
i
)
=
y
i
)
=
1
−
E
(
f
;
D
)
\mathrm{acc}(f;D) = \frac{1}{m}\sum_{i=1}^{m}\mathbb{I}(f(x_i) = y_i) = 1 -E(f;D)
acc(f;D)=m1i=1∑mI(f(xi)=yi)=1−E(f;D)
其中,上述公式中
I
(
.
)
\mathbb{I}(.)
I(.) 符号,我认为是指具有
.
.
. 属性的一个样本。(如有错误请指正!)
也给出了具有**数据分布
D
\mathcal{D}
D 和概率密度
p
(
.
)
p(.)
p(.)**的错误率和精度定义:
E
(
f
;
D
)
=
∫
x
∼
D
I
(
f
(
x
)
≠
y
)
p
(
x
)
d
x
E(f;\mathcal{D}) =\int_{\mathcal{x\thicksim D}} \mathbb{I}{(f(x)\ne y)} p(x) dx
E(f;D)=∫x∼DI(f(x)=y)p(x)dx
a
c
c
(
f
;
D
)
=
∫
x
∼
D
I
(
f
(
x
)
=
y
)
p
(
x
)
d
x
=
1
−
E
(
f
;
D
)
\mathrm{acc}(f;\mathcal{D}) =\int_{\mathcal{x\thicksim D}} \mathbb{I}{(f(x)= y)} p(x) dx = 1 - E(f;\mathcal{D})
acc(f;D)=∫x∼DI(f(x)=y)p(x)dx=1−E(f;D)
2.查准率、查全率与F1
(1)查准率与查全率
错误率衡量具有局限性,无法满足所有的任务需求。比如,在某一次吃肯德基的时候,我想吃上校鸡块而服务员给我端了一份原味吮指鸡,这显然弄错了,于是这一次数据可以加入我对于肯德基上菜错误率数据处理中来。但我想知道这份原味吮指鸡的味道是否令我喜欢,我喜欢的是否还有其他的菜品品种。或许查准率,查全率更适合衡量。
以书中的西瓜为例:
查准率(precision): 算法挑出来的西瓜中好西瓜的比例。
查全率(recall): 所有好西瓜中,有多少被算法挑了出来。
在二分类问题中,将样例根据真实类别与学习器预测类别的组号划分为真正例(TP),假正例(FP),真反例(TN),假反例(FN)。其中TP+FP+TN+FN=样例总数。书中的分类结果混淆矩阵如下:
查准率
P
P
P定义:
P
=
T
P
T
P
+
F
P
P = \frac{TP}{TP+FP}
P=TP+FPTP
查全率
R
R
R定义:
R
=
T
P
T
P
+
F
N
R = \frac{TP}{TP+FN}
R=TP+FNTP
对于TP,FN,FP,TN 我的理解不是很深刻,这里做一些汇总。
真正例(true positive,TP)
假正例(false positive,FP)
真反例(true negative,TN)
假反例(false negative,FN)
以西瓜数据集为例:
正式概念:
(2)查全率、查准率关系以及P-R曲线
二者关系:查全率与查准率是矛盾度量。查准率越高,查全率越低;查准率越低,查全率越高。
P-R曲线:以查准率为纵轴、查全率为横轴作图 ,就得到了查准率-查全率曲线。
如何通过P-R图获取信息呢?
【1】若一个学习器的P-R曲线被另一个学习器曲线完全包住,可断言后者优于前者。如,A曲线与C曲线,学习器A优于学习器C。
【2】若二者像A与B发生了交叉,可以估计包围坐标的面积大小从而进行比较,但这是不太容易。所以可以用 "平衡点 (Break-Event Point ,简称 BEP) 来度量。当”查准率=查全率“时,即为平衡点。图中A>B>C。
另一个考虑查全率与查准率的性能度量:F1度量
F
1
=
2
×
P
×
R
P
+
R
=
2
×
T
P
样
例
总
数
+
T
P
−
T
N
F1 = \frac{2 \times P \times R}{P + R} = \frac{2 \times TP}{样例总数 + TP -TN}
F1=P+R2×P×R=样例总数+TP−TN2×TP
其中,F1越大,算法性能越好。
除此之外,在某些场景下对查全率与查准率的侧重不同。比如抓逃犯时,更希望少漏逃犯,侧重于查全率;给用户推荐商品时,更希望戳中用户的需求,侧重于查准率。
于是引入了查全率对查准率的相对重要性指数
β
\beta
β
{
β
>
1
,
查
全
率
影
响
更
大
β
=
1
,
标
准
F
1
式
β
<
1
,
查
准
率
影
响
更
大
\begin{cases} \beta >1 ,\quad 查全率影响更大\\ \beta =1, \quad 标准F1式\\ \beta <1, \quad 查准率影响更大 \end{cases}
⎩⎪⎨⎪⎧β>1,查全率影响更大β=1,标准F1式β<1,查准率影响更大
F1的度量一般形式如下:
F
β
=
(
1
+
β
2
)
×
P
×
R
(
β
2
×
P
)
+
R
F_{\beta} = \frac{(1+\beta^2) \times P\times R}{(\beta^2 \times P) + R}
Fβ=(β2×P)+R(1+β2)×P×R
书中还提到了宏查准率与宏查全率以及宏F1。微查准率与微查全率以及微F1。
3.ROC与AUC
(1)ROC定义
ROC 全称:受试者工作特征曲线。源于二战敌机的雷达信号检测,后被应用于机器学习。据说是因为二战的雷达不是特别的高端,体格稍微大一点的鸟也容易识别为飞机,所以雷达容易误报。于是ROC应用在了雷达方面。
(2)ROC绘图流程
ROC与P-R 曲线相似,根据学习器的预测结果对样例进行排序,按此顺序逐个把样本作为正例进行预测,每次计算出两个重要量的值,分别以它们为横、纵坐标作图,最后得到了ROC曲线。
具体来说,现实任务中利用有限个测试样例来进行绘制ROC,获得的真正例率与假正例率坐标对是有限的,所以图像是不光滑的。过程如下:
给定
m
+
m^+
m+ 个正例和
m
−
m^-
m− 个反例,根据学习器预测结果对样例进行排序,然后把分类阈值设到最大,
即把所有样例均预测为反例,此时真正例率和假正例率均为
0
0
0,在坐标
(
0
,
0
)
(0,0)
(0,0)标记一个点。然后,将分类阈值依次设为每个样例的预测值,即依次将每个样例划分为正例。设前一个标记点坐标为
(
x
,
y
)
(x,y)
(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) ,然后用线段连接相邻点即得。
在后面AUC的推导中会使用。
(3)ROC图像性质:
ROC曲线纵轴是真正例率(True Positive Rate,TPR):
T
P
R
=
T
P
T
P
+
F
N
\mathrm{TPR}=\frac{TP}{TP+FN}
TPR=TP+FNTP
横轴是假正例率(False Positive Rate,FPR):
F
P
R
=
F
P
T
N
+
F
P
\mathrm{FPR}=\frac{FP}{TN+FP}
FPR=TN+FPFP
与P-R曲线相似,ROC曲线同样通过曲线与横纵轴的包围面积的大小来比较学习器的性能,即 AUC(Area Under ROC Curve)。
(4)AUC的估算式及其推导
书中给出了AUC的估算式,假设ROC曲线是由坐标为
(
x
1
,
y
1
)
,
(
x
2
,
y
2
)
,
⋯
,
(
x
m
,
y
m
)
{(x_1,y_1),(x_2, y_2) , \cdots , (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) 如上图所示,则
A
U
C
\mathrm{AUC}
AUC 可估算为:
A
U
C
=
1
2
∑
i
=
1
m
−
1
(
x
i
+
1
−
x
i
)
⋅
(
y
i
+
1
+
y
i
)
(1)
\mathrm{AUC}=\frac{1}{2}\sum_{i=1}^{m-1}(x_{i+1}-x_i)\cdot(y_{i+1}+y_i) \quad\quad \tag1
AUC=21i=1∑m−1(xi+1−xi)⋅(yi+1+yi)(1)
公式推导:
对于式(1),需要先掌握ROC的绘图过程,如之前提到的ROC绘图流程一样。由南瓜书所举示例,假设我们已经训练得到一个学习器
h
(
s
)
h(s)
h(s),现在用该学习器来对我们的 8 个测试样本(4 个正例,4 个反例,也即
m
+
=
m
−
=
4
m^+ = m^− = 4
m+=m−=4)进行预测,假设预测结果为:
(
s
1
,
0.77
,
+
)
,
(
s
2
,
0.62
,
−
)
,
(
s
3
,
0.58
,
+
)
,
(
s
4
,
0.47
,
+
)
,
(
s
5
,
0.47
,
−
)
,
(
s
6
,
0.33
,
−
)
,
(
s
7
,
0.23
,
+
)
,
(
s
8
,
0.15
,
−
)
(s_1, 0.77, +),(s_2, 0.62, −),(s_3, 0.58, +),(s_4, 0.47, +),(s_5, 0.47, −),(s_6, 0.33, −),(s_7, 0.23, +),(s_8, 0.15, −)
(s1,0.77,+),(s2,0.62,−),(s3,0.58,+),(s4,0.47,+),(s5,0.47,−),(s6,0.33,−),(s7,0.23,+),(s8,0.15,−)
其中,
+
+
+和
−
-
−代表正例和反例,二位小数代表学习器预测该样本为正例的概率,例如反例
s
5
s_5
s5,预测为正例的概率是
0.47
0.47
0.47。
根ROC绘图流程可知,首先需要对所有测试样本按照学习器给出的预测结果进行排序(上面给出的预测结果已经按照预测值从大到小排好了)。接着将分类阈值设为一个最大值,这时候所有样本预测为正例的概率都一定小于分类阈值,那么预测为正例的样本个数为 0,相应的真正例率和假正例率也都为 0,所以此时我们可以在坐标 (0, 0) 处打一个点。
接下来我们需要把分类阈值从大到小依次设为每个样本的预测值,也就是依次设为:
0.77
0.62
0.58
0.47
0.33
0.23
0.15
0.77 \quad 0.62\quad 0.58\quad 0.47 \quad0.33 \quad0.23 \quad0.15
0.770.620.580.470.330.230.15,然后计算每次真正例率TPR和假正例率FPR,再在相应的坐标上打一个点,最后再将各个点用直线串连起来即可得到 ROC 曲线。需要注意的是,在统计预测结果时,预测值等于分类阈值的样本也算作预测为正例。例如,当分类阈值为
0.77
0.77
0.77 时,测试样本
s
1
s_1
s1被预测为正例,由于它的真实标记也是正例,所以此时
s
1
s_1
s1 是一个真正例。为了便于绘图,我们将 x 轴(假正例率轴)的单位刻度定为
1
m
−
\frac{1}{m^-}
m−1 ,y 轴(真正例率轴)的单位刻度定为
1
m
+
\frac{1}{m^+}
m+1,这样的话,根据真正例率和假正例率的定义可知,每次变动分类阈值时,若新增 i 个假正例,那么相应的 x 轴坐标也就增加
i
m
−
\frac{i}{m^-}
m−i。同理,若新增 j 个真正例,那么
相应的 y 轴坐标也就增加
j
m
+
\frac{j}{m^+}
m+j,于是绘图如下:
其中绿色线段表示在分类阈值变动的过程中只新增了真正例,红色线段表示只新增了假正例,蓝色线段表示既新增了真正例也新增了假正例。根据
A
U
C
\mathrm{AUC}
AUC 值的定义可知,此时的
A
U
C
\mathrm{AUC}
AUC 值其实就是所有红色线段和蓝色线段与 x 轴围成的面积之和。观察上图可知,红色线段与 x 轴围成的图形恒为矩形,蓝色线段与 x 轴围成的图形恒为梯形,但是由于梯形面积公式既能算梯形面积,也能算矩形面积。所以无论是红色线段还是蓝色线段,其与 x 轴围成的面积都能用梯形公式来计算,也即:
1
2
⋅
(
x
i
+
1
−
x
i
)
⋅
(
y
i
+
1
+
y
i
)
\frac{1}{2} \cdot (x_{i+1} - x_i)\cdot(y_{i+1} + y_i)
21⋅(xi+1−xi)⋅(yi+1+yi)
其中,
(
x
i
+
1
−
x
i
)
(x_{i+1} − x_i)
(xi+1−xi) 表示“高”,
y
i
y_i
yi 表示“上底”,
y
i
+
1
y_{i+1}
yi+1 表示“下底”,面积之和
A
U
C
\mathrm{AUC}
AUC为:
∑
i
=
1
m
−
1
[
1
2
⋅
(
x
i
+
1
−
x
i
)
⋅
(
y
i
+
1
+
y
i
)
]
\sum_{i=1}^{m-1} [\frac{1}{2} \cdot (x_{i+1} - x_i)\cdot(y_{i+1} + y_i)]
i=1∑m−1[21⋅(xi+1−xi)⋅(yi+1+yi)]
书中还给出了
A
U
C
\mathrm{AUC}
AUC的损失定义与罚分讨论,这里暂时不做讨论。
4.代价敏感错误率与代价曲线
(1)代价敏感错误率
书中给出了非均等代价的直观解释:
不同类型的错误所造成的后果不同。例如在医疗诊断中,错误地把患者诊断为健康人与错误地把健康人诊断为患者,看起来都是犯了"一次错误"但后者的影响是增加了进一步检查的麻烦,前者的后果却可能是丧失了拯救生命的最佳时机;再如,门禁系统错误地把口行人员拦在门外,将使得用户体验不佳,但错误地把陌生人放进门内,则会造成严重的安全事故。为权衡不同类型错误所造成的不同损失,可为错误赋予 “非均等代价”(unequal cost)。
同时也给出了二分类任务的代价矩阵(cost matrix),下图所示。其中
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
与
c
o
s
t
10
cost_{01}与 cost_{10}
cost01与cost10值的差别越大。
为了在考虑错误次数的同时,更加注重与错误所带来的代价问题,并且,为了得到尽可能小的总体代价。在原错误率定义的公式的基础上,提出了代价敏感错误率,若将上图中的第
0
0
0类作为正类、第
1
1
1类作为反类,令
D
+
D^+
D+与
D
−
D^-
D−分别代表样例集
D
D
D的正例子集和反例子集:
E
(
f
;
D
;
c
o
s
t
)
=
1
m
(
∑
x
i
∈
D
+
I
(
f
(
x
i
)
≠
y
i
)
×
c
o
s
t
01
+
∑
x
i
∈
D
−
I
(
f
(
x
i
)
≠
y
i
)
×
c
o
s
t
10
)
E(f;D;cost) = \frac{1}{m}(\sum_{x_i \in D^+} \mathbb{I}(f(x_i) \ne y_i)\times cost_{01} +\sum_{x_i \in D^-} \mathbb{I}(f(x_i) \ne y_i)\times cost_{10})
E(f;D;cost)=m1(xi∈D+∑I(f(xi)=yi)×cost01+xi∈D−∑I(f(xi)=yi)×cost10)
表示给定模型
f
f
f;数据集
D
D
D;代价
c
o
s
t
cost
cost 。
I
(
f
(
x
i
)
≠
y
i
)
×
c
o
s
t
01
\mathbb{I}(f(x_i) \ne y_i)\times cost_{01}
I(f(xi)=yi)×cost01表示FN(正例子集中的错误,即模型预测为负例的正例,假反例)的个数
×
\times
×FN的代价,
I
(
f
(
x
i
)
≠
y
i
)
×
c
o
s
t
10
\mathbb{I}(f(x_i) \ne y_i)\times cost_{10}
I(f(xi)=yi)×cost10表示FP(负例子集中的错误,即模型预测为正例的负例,假正例)的个数
×
\times
×FP的代价。
书中也提及多分类任务的代价敏感性度量,令 c o s t i j cost_{ij} costij中的 i 、 j i、j i、j取值不限于 0 、 1 0、1 0、1。
(2)代价曲线
ROC曲线不能直接反映出学习器的期望总体代价,但代价曲线可以。代价曲线如下图所示:
横轴是取值为
[
0
,
1
]
[0,1]
[0,1]的正例概率代价:
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 \times cost_{01}}{p \times cost_{01}+(1-p) \times 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
=
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{\mathrm{FNR}\times p \times cost_{01} + \mathrm{FPR}\times (1-p) \times cost_{10} }{p \times cost_{01} + (1-p)\times cost_{10}}
costnorm=p×cost01+(1−p)×cost10FNR×p×cost01+FPR×(1−p)×cost10
其中
F
N
R
\mathrm{FNR}
FNR 是假正例率,
F
N
R
=
1
−
T
P
R
\mathrm{FNR} = 1 - \mathrm{TPR}
FNR=1−TPR 是假反例率。
代价曲线的绘制很简单:ROC曲线上每一点对应了代价平面上的一条线段。设ROC曲线上点的坐标为 ( T P R , F P R ) (\mathrm{TPR, FPR}) (TPR,FPR),则可相应计算出 F N R \mathrm{FNR} FNR,然后在代价平面上绘制一条从 ( 0 , F P R ) 到 ( 1 , F N R ) \mathrm{(0,FPR)到 (1,FNR)} (0,FPR)到(1,FNR) 的线段,线段下的面积即表示了该条件下的期望总体代价;如此将 ROC 曲线上的每个点转化为代价平面上的一条线段,然后取所有线段的下界,围成的面积即为在所有条件下学习器的期望总体代价,如上图所示。
四、比较检验
有了评估方法与性能度量,接下来要做的就是对学习器的性能进行评估,但这个过程是复杂的。基于假设检验的统计学方法,可以为学习器的性能比较提供重要依据。接下来以错误率为性能度量,用 ϵ \epsilon ϵ表示。
1.假设检验
这部分对概率论的要求很高,我打算再复习一遍概率论的知识后再对次节的公式进行研究,这里先给出本节的结论。
2.交叉验证t检验
3.McNemar检验
4.Friedman检验与Nemenyi后续检验
五、偏差与方差
偏差-方差分解是解释学习算法泛化性能的一种重要工具。并且,偏差-方差分解试图对学习算法的期望泛化错误率进行拆解。下面给出几个参数来更好地解释偏差-方差分解。
假设测试样本 x x x, x x x在数据集中的标记为 y D y_D yD, x x x的真实标记为 y y y, f ( x ; D ) f(x;D) f(x;D)为训练集 D D D上学得模型 f f f在 x x x上的预测输出。
以回归任务为例,学习算法的期望预测为 f ‾ ( x ) = E D [ f ( x ; D ) ] \overline{f}(x)=\mathbb{E}_D[f(x;D)] f(x)=ED[f(x;D)]。
使用样本数相同的不同训练集产生的方差为:
v
a
r
(
x
)
=
E
D
[
(
f
(
x
;
D
)
−
f
‾
(
x
)
)
2
]
var(x) = \mathbb{E}_D[(f(x;D)-\overline{f}(x))^2]
var(x)=ED[(f(x;D)−f(x))2]
方差度量了同样大小的训练集的变动所导致的学习性能的变化,即刻画了数据扰动所造成的影响。
噪声为:
ε
2
=
E
D
[
(
y
D
−
y
)
2
]
\varepsilon^2=\mathbb{E}_D[(y_D - y)^2]
ε2=ED[(yD−y)2]
噪声则表达了在当前任务上任何学习算法所能达到的期望泛化误差的下界,即刻画了学习问题本身的难度。
期望输出与真实标记的差别称为偏差(bias),即:
b
i
a
s
2
(
x
)
=
(
f
‾
(
x
)
−
y
)
2
bias^2(x) = (\overline{f}(x) - y)^2
bias2(x)=(f(x)−y)2
偏差度量了学习算法的期望预测与真实结果的偏离程度,即刻画了学习算法本身的拟合能力。
接下来要对期望的泛化误差进行分解,但是我对泛化误差的了解的不是很深入,所以收集了一些相关资料:
泛化误差(Generalization Error) 即真实情况下模型的误差。机器学习里的模型一般是针对一个问题设计的,这个问题会有一个数据总体,包括所有可能的情况,比如研究对象是全国人的数据,全国人的数据就是一个总体。模型先经过训练再测试,都需要数据,就分别叫训练数据与测试数据。往往总体数据量很大,甚至是无法穷尽的,所以不可能把所有数据都用到,一般都是从总体里抽取一部分作为代表。模型在测试数据上测试,会得到一个误差,叫测试误差。但其实我们真正想要的是模型在总体上的误差,这就是泛化误差。而测试误差因为采样的关系,与泛化误差是有偏差的。此外,泛化误差也叫out of sample error,这是相对于in sample error讲的。in sample error是指模型在训练数据集上的误差。
经验误差即模型在训练集上的误差,即训练误差。相对于经验误差,泛化误差是模型在总体样本空间上的误差;而在真实情况中,我们不可能对所有样本进行采样,所以我们只能对其中的部分样本进行采样,得到经验误差。
测试误差指模型在测试集上的误差。
假定噪声期望为0,即
E
D
[
y
D
−
y
]
=
0
\mathbb{E}_D[y_D-y] =0
ED[yD−y]=0。通过简单的多项式展开合并,可对算法的期望泛化误差进行分解(该式子的推导会在之后补上):
可以得到:
E
(
f
;
D
)
=
b
i
a
s
2
(
x
)
+
v
a
r
(
x
)
+
ε
2
E(f;D)=bias^2(x) + var(x) + \varepsilon^2
E(f;D)=bias2(x)+var(x)+ε2
即,泛化误差可分解为偏差、方差与噪声之和(太神奇了)。
偏差-方差分解说明,泛化性能是由学习算法的能力、数据的充分性以及学习任务本身的难度所共同决定的.给定学习任务,为了取得好的泛化性能,则需使偏差较小,即能够充分拟合数据,并且使方差较小,即使得数据扰动产生的影响小。
作者也提到了偏差-方差窘境(bias-variance
dilemma)。在学习器训练不足时,拟合能力不强,训练数据的扰动不足以使学习器产生显著的变化,此时偏差主导了泛化错误率;随着训练程度的加深,学习器的拟合能力逐渐增强,训练数据发生的扰动渐渐能被学习器学到,方差逐渐主导了泛化错误率;在训练程度充足后,学习器的拟合能力已非常强,训练数据发生的轻微扰动都会导致学习器发生显著变化,若训练数据自身的、非全局的特性被学习器学到了,则将发生过拟合。上述过程如下图:
总结
在比较检验模块与偏差-方差分解部分的公式推导还没有记录,在以后的学习中我会补充的。
参考
【1】周志华《机器学习》
【2】Datawhale《南瓜书》
【3】TP、TN、FP、FN超级详细解析
【4】什么是泛化误差