2.1经验误差与过拟合
2.1.1典型的机器学习过程
2.1.2误差
当有
m
m
m个样本,其中
a
a
a个分类错误,则错误率为
E
=
a
/
m
E=a/m
E=a/m;相应地,
1
−
a
/
m
1-a/m
1−a/m称为精度。
2.1.3过拟合与欠拟合
过拟合:学习能力过于强大,不可避免,只能缓解。
欠拟合:学习能力不足,加大学习。
现实中,往往有多种学习算法可供选择,甚至同一算法不同参数配置时,也会产生不同模型。如何选择,即“模型选择”。
理想解决方案是对候选模型泛化误差进行评估,然后选择泛化误差最小的模型。
2.2评估方法
通过“测试集”来测试学习器对新样本的判别能力,然后以测试集上的“测试误差”作为“泛化误差”的近似。
测试样本:
- 从样本真实分布中独立同分布采样
- 与训练集尽可能互斥(未出现,未使用过的)
eg:你是一个老师,数了学生10道题,你对他进行考核时,肯定不是考这10道题,才能体现他“举一反三”的能力。
但是,我们只有一个包含 m m m个样例的数据集 D = ( x 1 , y 1 ) , ( x 2 , y 2 ) . . . ( x m , y m ) D = (x_1 ,{y}_{1}),(x_2 ,{y}_{2})...(x_m ,{y}_{m}) D=(x1,y1),(x2,y2)...(xm,ym)如何做到既要训练,又要测试?
对D适当处理,产生训练集S和测试集T。
2.2.1留出法
“留出法”直接将数据集D划分为两个互斥集合。一个训练集S,一个测试集T。即D=S
∪
\cup
∪T,S
∩
\cap
∩T=
ϕ
\phi
ϕ,S上训练,T上评估。
eg:D=1000个,训练S=700个,测试T=300个。
测试中有90个出错,错误率为
90
300
∗
100
%
=
30
%
\frac{90}{300}*100\%=30\%
30090∗100%=30%,精度为
1
−
30
%
=
70
%
1-30\%=70\%
1−30%=70%
注意,训练/测试划分要尽可能与数据分布一致。
保留类别比例的采样方式称为“分层采样”
如
D
=
1000
个
=
500
个正
+
500
个反
D=1000个=500个正+500个反
D=1000个=500个正+500个反
则
S
=
700
个
=
350
个正
+
350
个反
S=700个=350个正+350个反
S=700个=350个正+350个反
则
T
=
300
个
=
150
个正
+
150
个反
T=300个=150个正+150个反
T=300个=150个正+150个反
然而,即便如此分类比例,在实际中先正,先反也会产生不同结果。所以单次“留出法”并不可靠,一般采用若干次随机划分。重复试验取评价。
常见的方法:
2
3
−
4
5
\frac{2}{3}-\frac{4}{5}
32−54样本用于训练,剩余用于测试
2.2.2k-折交叉验证法
将数据集
D
D
D划分为
k
k
k个大小相似的互斥子集。每个子集
D
i
{D}_{i}
Di都尽可能与数据分布保持一致,即“分层采样”。
即
D
=
D
1
∪
D
2
.
.
.
∪
D
k
,
D
i
∩
D
j
=
ϕ
(
i
≠
j
)
即D={D}_{1}\cup{D}_{2}...\cup{D}_{k},{D}_{i}\cap{D}_{j}=\phi(i\neq{j})
即D=D1∪D2...∪Dk,Di∩Dj=ϕ(i=j)
每次用
k
−
1
k-1
k−1个子集的并集作为训练集,余下子集为测试集。最终返回
k
k
k个测试结果的均值。
又称“k折交叉验证”,k提出取10,称为10折交叉验证
将数据集
D
D
D划分为
k
k
k个子集同样存在多种划分方式,为减少因样本划分不同而引入的差别,通常要随机使用不同的划分重复
p
p
p次。最终结果是第
p
p
p次
k
k
k折交叉验证的均值。
常见:“10次10折交叉验证”
特例:留一法
数据集
D
D
D中包含
m
m
m个样本,令
k
=
m
k=m
k=m,则每次只留一个测试。留一法不受随机样本划分分布影响。
- 结果准确(也不全是)
- 但数据量较大时:计算量太大。
2.2.3自助法
以自助采样法为基础,给定包含
m
m
m个样本的数据集
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′中重复出现,有一部分从未出现)
样本在
m
m
m次采样中始终不被采到的概率:
lim
m
→
+
∞
(
1
−
1
m
)
m
→
1
e
≈
0.368
%第一个极限 \lim_{m \to +\infty} {(1-\frac{1}{m})}^{m}\to\frac{1}{e}\approx0.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′用作测试集。
实际评估的模型与期望的评估的模型都使用
m
m
m个训练本,而我们仍有数据总量约
1
3
\frac{1}{3}
31的、没在训练集中出现,而用于测试。又称包外估计。
使用场合:
- 数据量小,难以有效划分训练/测试集
- 此外,能产生多个不同的训练集,对集成学习有益
- 然而,改变了原始分布,引入估计偏差
因此,在数据量充足时,留出法、交叉验证法更常用。
2.2.4调参与最终模型
算法都有些参数需要设定,参数配置不同,模型性能不同。
参数调节:调参
调参与算法选择本质上是一致的:不同配置得到不同模型,把对应最好的模型参数作为结果。
实际操作时,参数选定是一个范围加一个变化步长。如 [ 0 , 0.2 ] 以 0.05 [0,0.2]以0.05 [0,0.2]以0.05为步长,有 0 , 0.05 , 0.1 , 0.15 , 0.5 0,0.05,0.1,0.15,0.5 0,0.05,0.1,0.15,0.5这5种参数选择。这已经是计算开销和性能估计的折中。
然而,假定3个参数,每个参数有5种选择,模型将有 5 3 = 125 5^{3}=125 53=125种需要对比。
2.3性能度量
用来衡量模型泛化能力的评价标准。
性能度量反映了任务需求,在对比相同的模型能力时,采用不同的性能度量往往会导致不同的评判结果;模型的“好坏”是相对的。
预测任务中,样例集 D = ( x 1 , y 1 ) , ( x 2 , y 2 ) . . . ( x m , y m ) D = (x_1 ,{y}_{1}),(x_2 ,{y}_{2})...(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比较。
2.3.1错误率与精度
2.3.2查准率、查全率与 F 1 F_{1} F1
在很多情形下,根据预测结果对样例排序,排前面的“最可能”是正例的样本,排后面的“最不可能”是正例的样本。
按此顺序逐个把样本作为正例进行预测,计算当前P,R值。得到“P-R曲线”,称为“P-R图”
若一个学习器的P-R曲线被另一个包住,完全“包住”,则可断言前者优于后者,如
A
>
C
A>C
A>C;而
A
,
B
A,B
A,B不能随意下定论,只能具体情况具体分析。
比较合理的方法是对比曲线下面积大小。但不好估算,于是有3个综合考虑查准率、查全率与性能度量。
很多时候有多个二分类混淆矩阵
希望在 n n n个二分类混淆矩阵上综合考虑查准率、查全率。
- 最直接的作法,分别计算各混淆矩阵上的
P
P
P和
R
R
R。记
(
P
1
,
R
1
)
,
(
P
2
,
R
2
)
.
.
.
(
P
n
,
R
n
)
(P_{1},R_{1}),(P_{2},R_{2})...(P_{n},R_{n})
(P1,R1),(P2,R2)...(Pn,Rn),求平均值。
- 还可以将各混淆矩阵对应元素平均,得到 T P , F P , T N , F N TP,FP,TN,FN TP,FP,TN,FN的平均值,分别记 T P ‾ , F P ‾ , T N ‾ , F N ‾ \overline{TP},\overline{FP},\overline{TN},\overline{FN} TP,FP,TN,FN.
再根据这些计算:
2.3.3 R O C 与 A U C ROC与AUC ROC与AUC
- (Receive Operating Characteristic)受试者工作特征
- (Area Under ROC Curve) ROC曲线下面积
很多学习器是为测试样本产生一个实值或概率预测,将其与分类阈值(threshold)作比较,大于阈值为正类,小于阈值为反类。
假如将实值或概率排序,“最可能”正例排最前,“最不可能”是正例排最后,分类过程相当于在这个排序中以某个截断点(cut point)
将样本分为两部分。
不同任务,设定不同截断点,若更注重“查准率”,选靠前;反之,若更注重“查全率”,选靠后。
根据学习器预测结果对样例排序,按此顺序逐个把样本作为正例预测,每次计算两个值:
- 纵轴“真正例率”(True Positive Rote)
- 横轴“假正例率”(False Positive Rote)
- 得“ROC曲线”。
T R R = T P T P + F N F R R = F P T N + F P TRR = \frac{TP}{TP+FN}\quad\quad FRR=\frac{FP}{TN+FP} TRR=TP+FNTPFRR=TN+FPFP
绘图过程:给定 m + m^{+} m+个正例, m − m^{-} m−个反例,首先根据预测排序,然后将分类阈值设为最大,即把所有的样例均预测为反例,此时 ( 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)
学习器比较时,若一个包住另一个,则可说前者优于后者,若有交叉,则分情况,比较合理的判断是比较
R
O
C
ROC
ROC曲线下面积,即
A
∪
C
A\cup{C}
A∪C
A
∪
C
=
1
2
∑
i
=
1
m
−
1
(
x
i
+
1
−
x
i
)
∗
(
y
i
+
y
i
+
1
)
A\cup{C}=\frac{1}{2}\sum_{i=1}^{m-1}(x_{i+1}-x_i)*(y_i+y_{i+1})
A∪C=21i=1∑m−1(xi+1−xi)∗(yi+yi+1)
2.3.4代价敏感错误率与代价曲线
现实中,不同类型错误所造成后果不同。
eg:
- 看病如果误诊
- 门禁如果放进了坏人
- 挑西瓜买到了不甜的
为权衡不同类型错误所造成的不同损失,可将错误赋予“非均等代价”(unequal cost);以二分类问题,设定一个“代价矩阵”
(cost mattrix)。
2.4比较检验
为什么机器学习中性能比较非常复杂?
两个学习器不能直接比麻?
第一:我们希望比较泛化性能,然而实验评估获得的是测试集性能,两者对比结果未必相同。
第二:测试集上的性能与测试集本身选择有很大关系。测试集大小,或测试集大小一致但样例差异也会导致不同结果。
第三:很多算法本身有一定的随机性,即使相同参数设置同一个测试集多次运行,结果可能有所不同。
统计假设检验(hypothesis test)为我们进行学习器性能比较提供了重要依据。
2.4.1假设检验