0%

模型评估与选择

经验误差与过拟合

学习器的实际预测输出与样本的真实输出之间的差异称为“误差”,学习器在训练集上的错误称为训练误差(training error)或经验误差(empirical error),在新样本上的误差称为泛化误差(generalization error)

我们实际希望的,是在新样本上能表现得很好的学习器。当学习器把训练集样本学得“太好”了的时候,很可能把训练集样本自身的一些特点当作了所有潜在样本都具有的一般性质,这样就会导致泛化性能下降,这种现象称为过拟合

评估方法

使用一个“测试集(testing set)”来测试学习器对新样本的判别能力,然后测试集上的“测试误差”(testing error)作为泛化误差的近似,测试集应该尽可能与训练集互斥,即测试样本尽量不在训练集中出现、未在训练过程中使用过

留出法

“留出法” (hold-out)直接将数据集 D 划分为两个互斥的集合,其中一个集合作为训练集S,另一个作为测试集T, 即$D = S \bigcup T$,$S \bigcap T = \emptyset$ .在S上训练出模型后,用 T 来评估其测试误差,作为对泛化误差的估计。
训练/测试集的划分要尽可能保持数据分布的一致性,如果从采样 (sampling)的角度来看待数据集的划分过程,则保留类别比例的采样方式通常称为”分层采样” (stratified sampling)。例如通过对D进行分层而获得含70%样本的训练集S和含30%样本的测试集T,若D包含500个正例,500个反例,则分层采样S应包含350个正例,350个反例,T则包含150个正例,150个反例。

单次使用留出法得到的估计结果往往不够稳定可靠,在使用留出法时,一般要采用若干次随机划分、重复进行实验评估后取平均值作 为留出法的评估结果。
常见做法是将大约 $\frac{2}{3}$ ~ $\frac{4}{5}$ 的 样本用于训练,剩余样本用于测试。

交叉验证法

“交叉验证法” (crossvalidation)先将数据集D划分为k个大小相似的互斥子集,即${D = D1 \bigcup D2 \bigcup \dots \bigcup Dk},{Di\bigcap Dj = \emptyset}$ ($i\neq j$). 每个子集Di都尽可能保持数据分布的一致性,即从 D 中通过分层采样得到. 然后,每次用 k-1 个子集的并集作为训练集?余下的那个子集作为测试集;这样就可获得 k 组训练/测试集,从而可进行 k 次训练和测试,最终返回的是这 k 个测试结果的均值。交叉验证法评估结果的稳定性和保真性在很大程度上取决于 k 的取值。

与留出法相似,将数据集 D 划分为 k 个子集同样存在多种划分方式。为减小因样本划分不同而引入的差别,k折交叉验证通常要随机使用不同的划分重复p次,最终的评估结果是这 p次 k折交叉验证结果的均值。
院假定数据集 D 中包含 m 个样本,若令 k=m,则得到了交叉验证法的一个特例:留一法(Leave-One-Out比,简称 LOO)。

自助法

它直接以自助采样法 (bootstrap sampling)为基础。 给定包含 m 个样本的数据集 D ,我们对它进行采样产生数据集 D’: 每次随机从 D 中挑选一个样本,将其拷贝放入 D’ 然后再将该样本放回初始数据集 D 中,使得该样本在下次采样时仍有可能被采到;这个过程重复执行 m 次后,我们就得到了包含 m 个样本的数据集 D’,这就是自助采样的结果。

调参与最终模型

大多数学习算法都有些参数 (parameter)需要设定,参数配置不同,学得模 型的性能往往有显著差别.
对每种参数配置都 训练出模型,然后把对应最好模型的参数作为结果。
学习算法的很多参数是在实数范围内取值,因此,对每种参数配置都训练出模型来是不可行的。现实中常用的做法,是对每个参数选定一个范围和变化步长,例如在 [0,0.2] 范围内以 0.05 为步长,则实际要评估的候选参数值有 5 个,最终是从这 5 个候选值中产生选定值。

给定包含 m 个样本的数据集 D ,在模型评估与选择过程中由于需要留出 一部分数据进行评估测试,事实上我们只使用了一部分数据训练、模型。因此,在模型选择完成后,学习算法和参数配置己选定,此时应该用数据集 D 重新训练模型.这个模型在训练过程中使用了所有 m 个样本,这才是我们最终提交给用户的模型.

性能度量

错误率与精度

查准率、查全率与Fl

ROC 与 AUC

代价敏感错误率与代价曲线