机器学习笔记5——特征选择和稀疏学习

151 阅读5分钟

特征子集选择

对当前学习任务有用的特征称为相关特征(relewant feature),无用的特征称为无关特征(irrelevant feature),从给定特征集合中选择相关特征子集的过程称为特征选择(feature selection)。

冗余特征(redundant feature):从其他特征中推演出来的特征,例如从底面长和底面宽中推演出底面积。冗余特征很多时候对学习没有太大作用可以去除掉,但有些时候冗余特征是有益的,例如在估算立方体体积的任务中底面积能使估算更简单。

子集搜索 subset search

从给定特征集合中查找最优子集的过程,从0开始逐渐增加相关特征的策略称为前向(forward)搜索,从完整的集合开始逐渐去除无用特征的策略称为后向(backward)搜索,每一轮即增加又减少的策略称为双向(bidrectional)搜索。

这些策略都是基于贪心法则:即每轮都选最优的集合,但是可能导致一种情况就是三个元素的选定集合在不是四个元素集合中的最优子集,如果不用穷举法不能找到最优集。

子集评价 subset evaluation

对于给定数据集DD,假定DD中第ii类样本占比为pi(i,1,2,...,Y)p_i(i,1,2,...,|Y|)假定样本特征均为离散型,对于特征子集AA根据其取值将DD分成了VV个子集{D1,...,DV}\{D^1,...,D^V\},计算可得子集AA的信息增益:

Gain(A)=Ent(D)v=1VDvDEnt(Dv)Gain(A)=Ent(D)-\sum^V_{v=1}\frac{|D^v|}{|D|}Ent(D^v)

其中Ent(D)Ent(D)信息熵AA的信息增益越大表示特征子集包含的有用信息越多,因此可以基于信息增益选择特征子集。

特征选择方法

主要可以分为过滤式(filter)、包裹式(wrapper)和嵌入式(embedding)。

过滤式 filter

过滤式方法先对数据集进行特征选择,然后再训练学习器,特征选择过程与后续学习器无关

Relief法

代表性的过滤式方法之一,它设计了一个相关统计量来度量特征的重要性,为一个向量,向量的每一个分量对应了一个初始特征,特征子集的重要性由子集中每个特征对应相关统计量分量之和来度量。最终通过指定一个阈值选择比阈值大的特征或者指定选取特征的个数便可以获得较好的特征子集。

对于样本xi\pmb{x}_i,Relief法先在xi\pmb{x}_i的同类样本中搜索最近邻xi,nh\pmb{x}_{i,nh},称为猜中近邻(near-hit),再从xi\pmb{x}_i的异类样本中搜索最近邻xi,nm\pmb{x}_{i,nm},称为猜错近邻(near-miss),则特征jj的相关统计量计算公式为:

δj=idiff(xij,xi,nhj)2+diff(xij,xi,nmj)2\delta^j=\sum_i -diff(x_i^j,x^j_{i,nh})^2 + diff(x_i^j,x^j_{i,nm})^2

其中diff()为求差分的函数,当特征为离散型,且xaj=xbjx_a^j=x_b^j的时候,diff(xaj,xbj)=0diff(x_a^j,x_b^j)=0,否则为1;若特征为连续型,则diff(xaj,xbj)=xajxbjdiff(x_a^j,x_b^j)=|x_a^j-x_b^j|xaj,xbjx_a^j,x_b^j已标准化到[0,1]区间)。(此处在diff(xij,xi,nhj)diff(x_i^j,x^j_{i,nh})前加负号是因为在全部的算法中权重会减去阈值δj\delta^j

根据公式可以看到若xi\pmb{x}_i与猜中近邻的距离更近则说明特征jj对于分类是有益的。

Relief法是面向二分类的,但扩展到多分类也很简单,Relief-F法是处理多分类问题的方法。

包裹式

包裹式特征选择直接把最终将要使用的学习器的性能作为特征子集的评价准则,也就是说包裹式方法中特征子集的选择方法和后续的学习器类型是绑定关系,显然包裹式方法的效果通常会比过滤式更好,但开销会大很多。

LVM Las Vegas Wrapper

image.png

嵌入式选择与L1正则化

嵌入式特征选择将特征选择过程与学习器训练过程融为一体,两者在同一个优化过程中完成,即在学习器训练过程中自动包含特征选择的步骤。

正则化的作用和意义,以及L1范数为什么能更容易得到稀疏解见链接

求解L1范数正则化的结果是仅采用一部分初始特征的模型,也就是说基于L1正则化的学习方法就是一种嵌入式特征选择。

稀疏表示与字典学习

数据集在学习中通常会被表示成一个大矩阵,每行对应一个样本,每列对应一种特征,而很多任务中这个大矩阵是具有稀疏性的,即很多0元素,但并不是一整列或一整行的0元素,适当的稀疏性对于学习是有利的,例如SVM可以轻松的在稀疏矩阵中使用,而且稀疏矩阵的存储已经有利很多压缩技术,并不会造成存储和计算的负担。

当数据集是稠密的非稀疏数据时,若能将其转化为稀疏表示((sparse representation)形式,则更有利于模型的求解,因此我们希望学习出一个“字典”,将稠密表达的样本转化为合适的稀疏表达形式,简化学习任务,这就称之为字典学习(dictionary learning)或稀疏编码(sparse coding),字典学习侧重于学习字典的过程,稀疏编码则侧重于样本的稀疏表达。

对于给定数据集(x1,...,xi)(\pmb{x}_1,...,\pmb{x}_i),字典学习最简单的形式为:

minB,αii=1mxiBαi22+λi=1mαi1\min_{\pmb{B},\pmb{\alpha}_i}\sum^m_{i=1}||\pmb{x}_i-\pmb{B}\pmb{\alpha}_i||^2_2+\lambda\sum^m_{i=1}||\pmb{\alpha}_i||_1

其中BRd×k\pmb{B}\in \mathbb{R}^{d\times k}为字典矩阵,k为字典的词汇量(即稀疏后的列数)由用户指定,αi\pmb{\alpha}_i是样本xi\pmb{x}_i的稀疏表示。显然公式的第一项是希望稀疏表示和原样本表示越接近越好,第二项是希望αi\pmb{\alpha}_i尽可能稀疏(L1范数表示向量内元素和,即特征和越小表示特征越少)。

字典学习的目标就是求解B\pmb{B}αi\pmb{\alpha}_i,求解方法很多,其中一种见链接