对于一个学习问题,往往我们有不同的模型可以选择,本文首先介绍两种模型选择(model selection) 的通用做法,分别是交叉验证法(cross validation)和k重交叉验证法(k-folds cross validation)。本文的第二部分介绍了两种特征选择(feature selection) 的方法,分别是包围式特征选择(wapper feature selection) 以及过滤式特征选择(filter feature selection)。
在前面我们看到了选择模型时,需要对模型的偏差和方差进行权衡,现在假设我们选用的模型集合为 M = { M 1 , . . . , M k } M = \{M_1,...,M_k\} M={M1,...,Mk},如果我们仅仅是对每一类模型 M i M_i Mi进行训练,得到一些假设 h i h_i hi。最后在各个 h i h_i hi中挑选出具有最小经验误差的 h ∗ h^* h∗作为结果,那么显然我们会倾向于那些比较复杂的模型 M ∗ M^* M∗。
交叉验证法比较好的解决了这个问题,我们将样本集分为 S t r a i n S_{train} Strain, S c v S_{cv} Scv。然后利用 S t r a i n S_{train} Strain在模型 M i M_i Mi中训练出假设 h i h_i hi,最后选择在 S c v S_{cv} Scv上经验误差最小的假设 h ∗ h^* h∗,因此 S c v S_{cv} Scv上的经验误差是泛化误差的一个更好的估计,一般而言我们需要将样本集划分为70%和30%,这也带来一个问题,即我们总会浪费掉一部分样本,因此就有了下面的模型选择方法。
我们样本集 S S S等分为 S 1 , . . . , S k S_1,... ,S_k S1,...,Sk,然后对于模型 M i M_i Mi,在样本集 S 1 ∪ . . . ∪ S j − 1 ∪ S j + 1 ∪ . . . S k S_1\cup...\cup S_{j-1} \cup S_{j+1} \cup ...S_k S1∪...∪Sj−1∪Sj+1∪...Sk,训练出假设 h i j h_{ij} hij,然后计算在 S j S_j Sj上的经验误差 ϵ ^ S j ( h i j ) \hat{\epsilon}_{S_j}(h_{ij}) ϵ^Sj(hij),最后利用各个 ϵ ^ S j ( h i j ) \hat{\epsilon}_{S_j}(h_{ij}) ϵ^Sj(hij)的平均作为模型 M i M_i Mi的泛化误差的估计。一般情况下,我们选择 k = 10 k = 10 k=10。k重交叉验证法的一个缺点是计算成本比较大,它需要k轮,但优点在于它在选择模型的过程中,没有造成样本的浪费。 在一些样本来源方便,并且样本量很多的情况下,我们可以直接用交叉验证法。
对于高维数据,有时候其中仅仅只有少量的维度与我们关注的属性值相关,我们称这些属性为特征,我们需要一种方法筛选出特征,否则过拟合将会是我们面临的一个潜在问题。
逐个添加特征,并利用交叉验证法验证对当前的 F i F_i Fi进行检验,最后选择合适的特征集合 F F F。
在这种方法下,我们针对每一个属性 x i x_i xi,计算一个属性特征系数 S ( i ) S(i) S(i),最后我们根据 S ( i ) S(i) S(i)对所有属性 x i x_i xi进行排序,然后选择前面的k个属性作为特征。 一般而言,我们计算 S ( i ) S(i) S(i)可以有多种方法,一种可能的方法是计算其 x i x_i xi与 y y y的相关系数。但是在实际中,更多采用的是计算 x i x_i xi与 y y y的互信息(mutual information),即 M I ( x i , y ) = ∑ x i ∑ y p ( x i , y ) log p ( x i , y ) p ( x i ) p ( y ) MI(x_i,y) = \sum_{x_i}\sum_{y}p(x_i,y)\log{\frac{p(x_i,y)}{p(x_i)p(y)}} MI(xi,y)=xi∑y∑p(xi,y)logp(xi)p(y)p(xi,y)。