假设我们为了一个学习问题尝试从几个模型中选择一个合适的模型。例如,我们可能用一个多项式回归模型 hθ(x)=g(θ0+θ1x+θ2x2+…θkxk) ,我们需要设定一个合适的阶数k,怎样才能决定这个阶数k,以使得最终模型的bias与variance之间能够达到某种平衡,或者,在locally weighted regression 中,我们如何确定参数 τ ,以及在 ℓ1 -regularized 的SVM中,如何确定参数C。
在为某个learning problem选择模型的时候,我们假设存在一个有限的模型集合即, M={M1,...Md} 供我们选择,比如对于多项式回归模型,第 i 个模型 Mi 可以是一个i阶的多项式回归模型,或者说我们想从SVM,神经网络,logistic regression中选择一个合适的模型,那么模型集合就包括这些模型。下面我们介绍一些模型选择的方法。
Cross validation
第一个方法是cross validation,假设我们有一个训练集,并且给定了 empirical risk minimization (ERM),一个比较直观的方法就是利用ERM作为指标,测试每一个模型在训练集上的ERM,然后选择ERM最小的那个模型。但是实际上,这种方式选择的模型并不好,之前我们已经看到过,如果单纯地依靠ERM,会出现过拟合的问题,所以一个更加可靠的方式是hold-out cross validation,我们通过以下步骤实现模型的选择:
1:将训练集S随机分成 Strain (一般来说占训练集的70\%)和 Scv (占训练集的30\%)。 Scv 称为hold-out cross validation set。
2: 只利用 Strain 训练每一个模型,并且得到假设决策函数 hi 。
3: 我们利用 Scv 来测试这些模型与决策函数,在 Scv 上误差最小的模型将被选择。
通过这种方式,我们可以利用一些模型未曾见过的数据来测试模型的generalization error,这样对模型的generalization error 可以有更好的估计,通常我们选择训练集的 1/4−1/3 作为hold out cross validation set,30\% 是一个比较经典的选择。
利用hold out cross validation 的一个缺陷是它“浪费”了30\%的数据,这些数据不能用于训练,如果数据量很大的话,这种“浪费”可以接受,但是如果数据本来就很少的时候,我们需要考虑换一种
方式来选择最优的学习模型,下面介绍的这种方式称为\textbf{k-fold cross validation},这种方式每次剔除出来的数据要少一点。
1:将含有m个训练样本的训练集S,随机分成没有交集的k组,每一组含有m/k个样本,我们称每一组为一个子集,即: S1,...Sk 。
2:对于一个学习模型,我们每次剔除一组,剩下的k-1组用来训练这个学习模型,并且得到一个对应的决策函数,用得到的决策函数在事先剔除出来的哪一组上做测试,如此循环k次,我们可以得到这个学习模型在这个训练集上的平均误差。
3:对应每一个学习模型都采取这样的策略训练,最终在训练集上的平均误差最小的模型将被选择。
在实际应用中,k一般设为10,这样每次有1/10的数据被剔除出来做测试,剩下的90\%的数据可以用来训练,这种方式比起上一种方式,可以让更多的数据用来训练,不过这种方式需要花费更多的训练时间,因为每一个学习模型我们都要训练k次。
虽然k=10是一个比较常见的选择,但是有的时候,当数据样本非常稀少的时候,我们也会选择k=m以确保每次剔除的数据尽可能地少,在这种情况下,我们每次剔除一个样本,循环m次,然后用平均误差来估计学习模型的generalization error,这种方式也称为leave-one-out cross validation。
虽然我们介绍了这几种方法从模型集合中来选择一个合适的模型,但是这几种方法有的时候也可以直接用来评价一个模型或者算法的性能。而实际应用中,我们也经常
用这几种方法来评价一些算法的性能。
Feature Selection
模型选择的一个特殊而重要的应用是特征选择。想象一下,如果我们遇到一个supervised的学习问题,其输入特征的维数n远远大于样本数m,但是这些特征可能只有一部分与问题是有关系的,在这种情况下,可以设计一个特征选择的算法来降低特征的个数,如果一个训练样本含有n个特征,那么就有 2n 特征组合,如果n很大的话,那么这样算法的计算量会很大,所以一般不会用这种方法选择特征,一个可替代的方法是forward research:
1: 初始化 F=∅ 。
2: Repeat { \
(a) 对于 i=1,2,...n ,如果 i∉F ,让 Fi=F∪{i} ,利用前面介绍的cross validation的方法对 Fi 进行评估。(即用学习模型训练 Fi ,并且估计它的generalization error。)\
(b) 设定 F 为步骤(a)中的最佳特征子集。\
}
3: 从整个循环过程中,选择最佳的训练子集。
这个方法给出了wrapper model feature selection的一个实例,因为这是一个不断用特征子集”warps”学习模型的过程,需要不断地调用学习模型以评估各个特征子集的性能,除了forward research,还有一种方法就是backward research,这个也很容易理解,forward research 就是从空集一点一点的增大,直到全部n个特征,而backward research恰恰相反,从全部n个特征开始,一点一点地减少,直到空集。虽然这两种特征选择的方法比较有效,但是非常耗时,通常来说,含有n个特征的训练集,
需要 O(n2) 次调用学习算法。
Filter feature selection是一种相对来说更加高效的特征选择方法,这种方法的核心思想就是计算一些简单的指标 S(i) 来衡量特征 xi 与输出 y 之间的关联性,然后,挑出与输出之间关联最紧密的k个特征作为特征子集。
一个可能的选择就是将 S(i) 定义为 xi 与输出 y 之间的相关性,实际应用中,我们会定义 S(i) 为 xi 与输出 y 之间的mutual information:
其中, p(xi,y),p(xi),p(y) 可以通过训练集估计得到。
上式也可以表示成Kullback-Leibler (KL) divergence:
Bayesian statistics and regularization
下面,我们再介绍一种防止overfitting的方法,之前我们介绍过利用最大似然估计来求参数的方法,我们会建立如下的目标函数:
上式中, p(y(i)|x(i),θ) 取决于我们所选择的学习模型,比如,如果我们选择Bayesian logistic regression,那么我们可能会选择:
p(y(i)|x(i),θ)=hθ(x(i))y(i)(1−hθ(x(i)))1−y(i) ,其中, hθ(x(i))=1/(1+exp(−θTx(i))) ,
当我们需要对一个新输入的样本做预测的时候,我们可以利用参数 θ 的后验分布计算输出y的后验分布: