2.2 评估方法
通常, 可以通过实验测试来对学习器的泛化误差进行评估并进而做出选择. 为此, 需使用一个 “测试集”(testing set) 来测试学习器对新样本的判别能力, 然后以测试集上的 “测试误差”(testing error) 作为泛化误差的近似. 通常假设测试样本也是从样本真实分布中独立同分布采样而得. 测试集应尽可能与训练集互斥.
只有一个包含 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)}, 如何从中产生出训练集 S S S和训练集 T T T:
2.2.1 留出法
“流出法”(hold-out) 直接将数据集 D D D划分为两个互斥的集合, 其中一个集合作为训练集 S S S, 另一个作为训练集 T T T, 即 D = S ⋃ T D=S\bigcup T D=S⋃T, S ⋂ T = ∅ S\bigcap T=\emptyset S⋂T=∅. 在 S S S上训练出模型后, 用 T T T来评估其测试误差, 作为对泛化误差的估计.
训练/测试集的划分要尽可能保持数据分布的一致性, 避免因数据划分过程引入额外的偏差而对最终结果产生影响, e . g . e.g. e.g., 在分类任务中至少要保持样本的类别比例相似. 如果从采样(sampling) 的角度来看待数据集的划分过程, 则保留类别比例的采样方式称为"分层采样"(stratified sampling).
单次使用留出法得到的估计结果往往不够稳定可靠, 在使用留出法时, 一般要采用若干次随机划分、重复进行实验评估后取平均值作为留出法的评估结果. 此外, 常见的划分做法是将大约 2 / 3 4 / 5 2/3~4/5 2/3 4/5的样本用于训练, 剩余样本用于测试.
2.2.2 交叉验证法
“交叉验证法”(cross validation) 先将数据集
D
D
D划分为
k
k
k个大小相似的互斥子集, 即
D
=
D
1
⋃
D
2
⋃
.
.
.
⋃
D
k
,
D
i
⋂
D
j
=
∅
(
i
≠
j
)
.
D=D_1\bigcup D_2\bigcup ...\bigcup D_k, D_i\bigcap D_j=\emptyset(i\not=j).
D=D1⋃D2⋃...⋃Dk,Di⋂Dj=∅(i=j).每个子集
D
i
D_i
Di都尽可能保持数据分布的一致性, 即从
D
D
D中通过分层采样得到. 然后, 每次用
k
−
1
k-1
k−1个子集的并集作为训练集, 余下的那个子集作为测试集; 这样就可获得
k
k
k组训练/测试集. 从而可进行
k
k
k次训练和测试, 最终返回的是这
k
k
k个测试结果的均值. 通常把交叉验证法称为 “
k
k
k折交叉验证”(
k
k
k-fold cross validation).
k
k
k最常用的取值是10.
与留出法相似, 为减小因样本划分不同而引入的差别,
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, 则得到了交叉验证法的一个特例: 留一法(Leave-One-Out, 简称LOO).留一法不受随机样本划分方式的影响, 因为 m m m个样本只有唯一的方式划分为 m m m个子集–每个子集包含一个样本. 在绝大多数情况下, 留一法被实际评估的模型与期望评估的用 D D D训练出的模型很相似, 因此留一法的评估结果往往被认为比较准确.
2.2.3 自助法
“自助法” 直接以自助采样法(bootstrap sampling) 为基础. 给定包含
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′, 这就是自助采样的结果. 样本在
m
m
m次采样中始终不被采到的概率是
(
1
−
1
m
)
m
(1-\frac1m)^m
(1−m1)m, 取极限得到
lim
m
↦
∞
(
1
−
1
m
)
m
↦
1
e
≈
0.368
,
\lim _{m\mapsto \infty}(1-\frac1m)^m\mapsto \frac1e\approx0.368,
m↦∞lim(1−m1)m↦e1≈0.368,
即通过自助采样, 初始数据集
D
D
D中约有
36.8
36.8%
36.8的样本还未出现在采样数据集
D
′
D'
D′中; 这样, 实际评估的模型与期望评估的模型都使用
m
m
m个训练样本, 而仍有数据总量约
1
/
3
1/3
1/3的、没在训练集中出现的样本用于测试. 这样的测试结果亦称 “包外估计”(out-of-bag estimate).
自助法在数据集较小、难以有效划分训练/测试集时很有用; 此外, 自助法能从初始数据集中产生多个不同的训练集, 这对集成学习等方法有很大的好处. 然而, 自助法产生的数据集改变了初始数据集的分布, 这会引入估计偏差. 因此, 在初始数据量足够时, 留出法和交叉验证法更常用一些.
2.2.4 调参与最终模型
大多数学习算法都有些参数(parameter) 需要设定, 参数配置不同, 学得模型的性能往往有显著差别. 因此, 在进行模型评估与选择时, 除了要对使用学习的算法进行选择, 还需对算法参数进行设定, 这就是通常所说的 “参数调节” 或简称 “调参”(parameter tuning).
算法选择和调参的区别: 学习算法的很多参数实在实数范围内取值, 因此, 对每种参数配置都训练出模型来是不可行的. 现实中常用的做法, 是对每个参数选定一个范围和变化步长, 例如在 [ 0 , 0.2 ] [0,0.2] [0,0.2]范围内以 0.05 0.05 0.05为步长, 则实际要评估的候选参数值有 5 5 5个, 最终是从这 5 5 5个候选值中产生选定值.
在模型选择完成后, 学习算法和参数配置已选定, 此时应该用数据集 D D D重新训练模型, 这个在训练过程中使用了所有 m m m个样本的模型, 才是最终提交给用户的模型.
另外, 通常把学得模型在实际使用中遇到的数据称为测试数据, 而模型评估与选择中用于评估测试的数据集常称为 “验证集”(validation set). 例如, 在研究对比不同算法的泛化性能时, 我们用测试集上的判别效果来估计模型在实际使用时的泛化能力, 而把训练数据另外划分为训练集和验证集, 基于验证集上的性能来进行模型选择和调参.