综述
机器学习算法的最终目标是最小化期望损失风险(即机器学习模型在任意未知测试样本上的表现),但由于数据的真实分布我们通常是不知道的,我们可用的信息来自于训练数据,因此,机器学习的学习目标往往会转化为最小化经验风险。优化算法对经验风险最小化问题进行求解,并在算法结束的第 T T T次迭代中输出模型。我们希望所学习到的该模型对未知数据预测的误差尽可能小,这里的误差我们就将其定义为机器学习算法的泛化误差(generalization error): R exp ( f ^ ) = E P [ L ( Y , f ^ ( X ) ) ] = ∫ X × Y L ( y , f ^ ( x ) ) P ( x , y ) d x d y \begin{aligned} R_{\exp }(\hat{f}) &=E_{P}[L(Y, \hat{f}(X))] \\ &=\int_{\mathcal{X} \times \mathcal{Y}} L(y, \hat{f}(x)) P(x, y) \mathrm{d} x \mathrm{~d} y \end{aligned} Rexp(f^)=EP[L(Y,f^(X))]=∫X×YL(y,f^(x))P(x,y)dx dy
泛化误差反映了学习方法的泛化能力,因为我们学习一个模型通常是为了解决训练数据集这一领域中的一般化问题,因此仅仅将训练数据集的经验风险最小化得到的模型推广应用到更为一般的问题时,并不能保证模型仍然是最优的,甚至模型是否可用都不能保证。所以如果一种方法学习的模型比另一种方法学习的模型具有更小的泛化误差,那么这种方法就更有效。事实上,泛化误差就是学习得到的模型的期望风险。
泛化误差可以分解为偏差(Bias)、方差(Variance)和噪声(Noise)。我们下边将做详细介绍,但在学习偏差、方差之前,我们先来了解两个概念:训练误差与测试误差。
训练误差与测试误差
我们都知道,最好的机器学习模型不仅要对已知数据有很好的预测能力,也要求对新数据,也就是未知数据也要有很好的预测能力。
当选定了损失函数,基于损失函数而计算的模型的训练误差(training error)和测试误差(test error)就成为学习方法评估的标准。
- 训练误差:是机器学习模型关于训练数据集的平均损失
- 测试误差:是机器学习模型关于测试数据集的平均损失
假设现在有一个学习到的模型: Y = f ^ ( X ) Y=\hat{f}(X) Y=f^(X),另外假设 N N N是训练数据集的样本规模,那么训练误差为: R e m p ( f ^ ) = 1 N ∑ i = 1 N L ( y i , f ^ ( x i ) ) R_{\mathrm{emp}}(\hat{f})=\frac{ {1}}{N} \sum_{i=1}^{N} L\left(y_{i}, \hat{f}\left(x_{i}\right)\right) Remp(f^)=N1i=1∑NL(yi,f^(xi))
另外假设 N ′ N^{\prime} N′是测试数据集的样本规模,那么测试误差为 e t e s t = 1 N ′ ∑ i = 1 N ′ L ( y i , f ^ ( x i ) ) e_{\mathrm{test}}=\frac{1}{N^{\prime}} \sum_{i=1}^{N^{\prime}} L\left(y_{i}, \hat{f}\left(x_{i}\right)\right) etest=N′1i=1∑N′L(yi,f^(xi))
然后损失函数采用0-1损失时,测试误差就等于测试数据集上的误差率(error rate): e test = 1 N ′ ∑ i = 1 N ′ I ( y i ≠ f ^ ( x i