给定特征集合 { a 1 , a 2 , … , a d } \{a_1,a_2,\dots,a_d\} { a 1 , a 2 , … , a d } ,我们可将每个特征看作一个候选子集,对这 d d d 个候选单特正子集进行评价,假定 { a 2 } \{a_2\} { a 2 } 最优,于是将 { a 2 } \{a_2\} { a 2 } 作为第一轮的候选集;然后,在上一轮的选定集中加入一个特征,构成包含两个特征的候选子集,假定在这 d − 1 d-1 d − 1 个候选两特征子集中 { a 2 , a 4 } \{a_2,a_4\} { a 2 , a 4 } 最优,且优于 { a 2 } \{a_2\} { a 2 } ,于是将 { a 2 , a 4 } \{a_2,a_4\} { a 2 , a 4 } 作为本轮的选定集;……假定第 k + 1 k+1 k + 1 轮时,最优的候选 ( k + 1 ) (k+1) ( k + 1 ) 特征子集不如上一轮的选定集,则停止生成候选子集,并将上一轮选定的 k k k 特征集合作为特征选择结果。这样逐渐增加相关特征的策略称为“前向”搜索。类似的,若我们从完整的特征集开始,每次尝试去掉一个无关特征,这样逐渐减少特征的策略称为“后向”搜索。还可将前向与后向搜索结合起来,每一轮逐渐增加选定的相关特征(这些特征在后续轮中将确定不会被去除)、同时减少无关特征,这样的策略称为“双向”搜索。
给定数据集 D D D ,假定 D D D 中第 i i i 类样本所占的比例为 p i ( i − = 1 , 2 , … , ∣ Y ∣ ) p_i(i-=1,2,\dots,|\mathcal{Y}|) p i ( i − = 1 , 2 , … , ∣ Y ∣ ) 。假定样本属性均为离散型。对属性子集 A A A ,假定根据其取值将 D D D 分成 V V V 个子集 { D 1 , D 2 , … , D V } \{D^1,D^2,\dots,D^V\} { D 1 , D 2 , … , D V } ,每个子集中的样本在 A A A 上取值相同,于是我们可计算属性子集 A A A 的信息增益
G a i n ( A ) = E n t ( D ) − ∑ v = 1 V ∣ D v ∣ ∣ D ∣ E n t ( D v ) Gain(A)=Ent(D)-\sum\limits_{v=1}^V\frac{|D^v|}{|D|}Ent(D^v) G ain ( A ) = E n t ( D ) − v = 1 ∑ V ∣ D ∣ ∣ D v ∣ E n t ( D v )
E n t ( D ) = − ∑ k = 1 ∣ Y ∣ p k log 2 p k Ent(D)=-\sum\limits_{k=1}^{|\mathcal{Y}|}p_k\log_2p_k E n t ( D ) = − k = 1 ∑ ∣ Y ∣ p k log 2 p k
信息增益 G a i n ( A ) Gain(A) G ain ( A ) 越大,意味着特征子集 A A A 包含的有助于分类的信息越多。于是,对每个候选特征子集,我们可基于训练数据集 D D D 来计算其信息增益,以此作为评价准则。
Relief(Relevant Features)是一种著名的过滤式特征选择方法,该方法设计了一个“相关统计量”来度量特征的重要性。该统计量是一个向量,其每个分量分别对应一个初始特征,而特征子集的重要性则由子集中每个特征所对应的相关统计量分量之和来确定。于是,最终只需指定一个阈值 τ \tau τ ,然后选择比 τ \tau τ 大的相关统计量分量所对应的特征即可;也可指定欲选取的特征个数 k k k ,然后选择相关统计量分量最大的 k k k 个特征。
显然,Relief的关键是如何确定相关统计量。给定训练集 { ( x 1 , y 1 ) , ( x 2 , y 2 ) , … , ( x m , y m ) } \{(x_1,y_1),(x_2,y_2),\dots,(x_m,y_m)\} {( x 1 , y 1 ) , ( x 2 , y 2 ) , … , ( x m , y m )} ,对每个示例 x i x_i x i ,Relief先在 x i x_i x i 的同类样本中寻找其最近邻 x i , n h x_{i,nh} x i , nh ,称为“猜中近邻”,再从 x i x_i x i 的异类样本中寻找其最近邻 x i , n m x_{i,nm} x i , nm 称为“猜错近邻”,然后,相关统计量对应属性 j j j 的分量为
δ j = ∑ i − d i f f ( x i j , x i , n h j ) 2 + d i f f ( x i j , x i , n m j ) 2 \delta^j=\sum\limits_i-diff(x_i^j,x_{i,nh}^j)^2+diff(x_i^j,x_{i,nm}^j)^2 δ j = i ∑ − d i ff ( x i j , x i , nh j ) 2 + d i ff ( x i j , x i , nm j ) 2
其中 x a j x_a^j x a j 表示样本 x a x_a x a 在属性 j j j 上的取值, d i f f ( x a j , x b j ) diff(x_a^j,x_b^j) d i ff ( x a j , x b j ) 取决于属性 j j j 的类型:若属性 j j j 为离散型,则 x a j = x b j x_a^j=x_b^j x a j = x b j 时 d i f f ( x a j , x b j ) = 0 diff(x_a^j,x_b^j)=0 d i ff ( x a j , x b j ) = 0 ,否则为 1 1 1 ;若属性 j j j 为连续型,则 d i f f ( x a j , x b j ) = ∣ x a j − x b j ∣ diff(x_a^j,x_b^j)=|x_a^j-x_b^j| d i ff ( x a j , x b j ) = ∣ x a j − x b j ∣ ,注意 x a j , x b j x_a^j,x_b^j x a j , x b j 已规范化到 [ 0 , 1 ] [0,1] [ 0 , 1 ] 区间。
从 δ j = ∑ i − d i f f ( x i j , x i , n h j ) 2 + d i f f ( x i j , x i , n m j ) 2 \delta^j=\sum\limits_i-diff(x_i^j,x_{i,nh}^j)^2+diff(x_i^j,x_{i,nm}^j)^2 δ j = i ∑ − d i ff ( x i j , x i , nh j ) 2 + d i ff ( x i j , x i , nm j ) 2 可以看出,若 x i x_i x i 与其猜中近邻 x i , n h x_{i,nh} x i , nh 在属性 j j j 上的距离小于 x i x_i x i 与其猜错近邻 x i , n m x_{i,nm} x i , nm 的距离,则说明属性 j j j 对区分同类与异类样本是有益的,于是增大属性 j j j 所对应的统计分量;反之,则减小所对应的统计分量。最后,对基于不同样本得到的估计结果进行平均,就得到各属性的相关统计量分量,分量值越大,则对应属性的分类能力就越强。
Relief是为二分类问题设计的,其扩展变体Relief-F为处理多分类问题,相关统计量对应于属性 j j j 的分量
δ j = ∑ i − d i f f ( x i j , x i , n h j ) 2 + ∑ l ≠ k ( p l × d i f f ( x i j , x i , n m j ) 2 ) ) \delta^j=\sum\limits_i-diff(x_i^j,x_{i,nh}^j)^2+\sum\limits_{l\neq k}(p_l\times diff(x_i^j,x_{i,nm}^j)^2)) δ j = i ∑ − d i ff ( x i j , x i , nh j ) 2 + l = k ∑ ( p l × d i ff ( x i j , x i , nm j ) 2 ))
其中 p l p_l p l 为第 l l l 类样本在数据集 D D D 中所占的比例。
输入:数据集 D D D ,特征集 A A A ,学习算法 f f f ,停止条件控制参数 T T T
初始化:E = ∞ E=\infty E = ∞ , d = ∣ A ∣ d = |A| d = ∣ A ∣ , A ∗ = A A^* = A A ∗ = A , t = 0 t = 0 t = 0
随机生成特征子集 A ′ A' A ′ , d ′ = ∣ A ′ ∣ d'=|A'| d ′ = ∣ A ′ ∣
E ′ = C r o s s V a l i d a t i o n ( f ( D A ′ ) ) E' = Cross\ Validation(f(D^{A'})) E ′ = C ross Va l i d a t i o n ( f ( D A ′ ))
if ( E ′ < E ) ∨ ( ( E ′ = E ) ∧ ( d ′ < d ) ) (E'<E)\vee ((E'=E)\wedge(d'<d)) ( E ′ < E ) ∨ (( E ′ = E ) ∧ ( d ′ < d )) :
t = 0 t = 0 t = 0 , E = E ′ E=E' E = E ′ , d = d ′ d = d' d = d ′ , A ∗ = A ′ A^*=A' A ∗ = A ′
通过在数据集 D D D 上使用交叉验证来估计学习器的误差,注意这个误差是在仅考虑特征子集 A ′ A' A ′ 时得到的,即特征子集 A ′ A' A ′ 上的误差。然后if判断若它比当前特征子集 A A A 上的误差更小,或者误差相当但 A ′ A' A ′ 中包含的特征数更少,则将 A ′ A' A ′ 保留下来。
给定数据集 D = { ( x 1 , y 1 ) , ( x 2 , y 2 ) , … , ( x m , y m ) } , x ∈ R d , y ∈ R D=\{(x_1,y_1),(x_2,y_2),\dots,(x_m,y_m)\},\ x\in \mathbb{R}^d,\ y\in \mathbb{R} D = {( x 1 , y 1 ) , ( x 2 , y 2 ) , … , ( x m , y m )} , x ∈ R d , y ∈ R 我们考虑最简单的线性回归模型,以平方误差为损失函数,则优化目标为
min w ∑ i = 1 m ( y i − w T x i ) 2 \min\limits_w\sum\limits_{i=1}^m(y_i-w^T x_i)^2 w min i = 1 ∑ m ( y i − w T x i ) 2
当样本特征很多,而样本数相对较少时,上式很容易过拟合,为了缓解过拟合问题,可引入正则化项。若使用 L 2 L_2 L 2 范数正则化,则有
min w ∑ i = 1 m ( y i − w T x i ) 2 + λ ∣ ∣ w ∣ ∣ 2 2 \min\limits_w\sum\limits_{i=1}^m(y_i-w^T x_i)^2+\lambda||w||^2_2 w min i = 1 ∑ m ( y i − w T x i ) 2 + λ ∣∣ w ∣ ∣ 2 2
其中正则化参数 λ > 0 \lambda>0 λ > 0 。上式“岭回归”(ridge regression),通过引入 L 2 L_2 L 2 范数正则化,确能显著降低过拟合的风险。
当然也可以将正则化项中的 L 2 L_2 L 2 范数替换为 L p L_p L p 范数,若令 p = 1 p = 1 p = 1 ,即采用 L 1 L_1 L 1 范数,则有
min w ∑ i = 1 m ( y i − w T x i ) 2 + λ ∣ ∣ w ∣ ∣ 1 \min\limits_w\sum\limits_{i=1}^m(y_i-w^T x_i)^2+\lambda||w||_1 w min i = 1 ∑ m ( y i − w T x i ) 2 + λ ∣∣ w ∣ ∣ 1
其中正则化参数 λ > 0 \lambda>0 λ > 0 。上式称为LASSO(Least Absolute Shrinkage and Selection Operator)。
L 1 L_1 L 1 范数和 L 2 L_2 L 2 范数正则化都有助于降低过拟合风险,但前者还会带来一个额外的好处: L 1 L_1 L 1 比 L 2 L_2 L 2 更易获得“稀疏”解,即它求得的 w w w 会有更少的非零分量。比如如下例子:假定 x x x 仅有两个属性,于是无论岭回归还是LASSO解出的 w w w 都只有两个分量,即 w 1 , w 2 w_1,w_2 w 1 , w 2 ,我们将其作为两个坐标轴,然后在图中绘制出第一项的“等值线”,即在 ( w 1 , w 2 ) (w_1,w_2) ( w 1 , w 2 ) 空间中平方误差取值相同的点的连线,再分别绘制出 L 1 L_1 L 1 范数与 L 2 L_2 L 2 范数的等值线,即在 ( w 1 , w 2 ) (w_1,w_2) ( w 1 , w 2 ) 空间中 L 1 L_1 L 1 范数取值相同的点的连线,以及 L 2 L_2 L 2 范数取值相同的点的连线。
岭回归和LASSO的解要在平方误差项与正则化项之间折中,即出现在图中平方误差项等值线与正则化等值线相交处。由上图可看出,采用 L 1 L_1 L 1 范数时平方误差项等值线与正则化项等值线的焦点经常出现在坐标轴上,即 w 1 w_1 w 1 或 w 2 w_2 w 2 为 0 0 0 ,而采用 L 2 L_2 L 2 范数时,两者的交点常出现在某个象限中,即 w 1 w_1 w 1 和 w 2 w_2 w 2 为 0 0 0 ;换言之,采用 L 1 L_1 L 1 范数比 L 2 L_2 L 2 范数更易于得到稀疏解。