1. 背景
1.1 问题
在机器学习的实际应用中,特征数量可能较多,其中可能存在不相关的特征,特征之间也可能存在相关性,容易导致如下的后果:
(1) 特征个数越多,分析特征、训练模型所需的时间就越长,模型也会越复杂。
(2) 特征个数越多,容易引起“维度灾难”,其推广能力会下降。
(3) 特征个数越多,容易导致机器学习中经常出现的特征稀疏的问题,导致模型效果下降。
(4)对于模型来说,可能会导致不适定的情况,即是解出的参数会因为样本的微小变化而出现大的波动。
特征选择,能剔除不相关、冗余、没有差异刻画能力的特征,从而达到减少特征个数、减少训练或者运行时间、提高模型精确度的作用。
1.2 如何做特征选择
特征选择,即是指从全部特征中选取一个特征子集,使得使构造出来的模型效果更好,推广能力更强。如何做特征选择呢,如果要从全部特征中选择一个最优的子集,使得其在一定的评价标准下,在当前训练和测试数据上表现最好。
从这个层面上理解,特征选择可以看作三个问题:
(1)从原始特征集中选出固定数目的特征,使得分类器的错误率最小这是一个无约束的组合优化问题;
(2)对于给定的允许错误率,求维数最小的特征子集,这是一种有约束的最优化问题;
(3)在错误率和特征子集的维数之间进行折中。
上述3个问题都是一个NP难问题,当特征维度较小时,实现起来可行,但是当维度较大时,实现起来的复杂度很大,所以实际应用中很难实用。上述三种特征选择都属十NP难的问题。由于求最优解的计算量太大,需要在一定的时间限制下寻找能得到较好次优解的算法。以下介绍对次优解的求解过程。
2. 特征选择的一般过程
特征选择的一般过程可用图1表示。首先从特征全集中产生出一个特征子集,然后用评价函数对该特征子集进行评价,评价的结果与停止准则进行比较,若满足停止准则就停止,否则就继续产生下一组特征子集,继续进行特征选择。选出来的特征子集一般还要验证其有效性。
综上所述,特征选择过程一般包括:特征子集产生过程,评价函数,停止准则,验证过程,这4个部分。
特征子集产生过程( Generation Procedure )
采取一定的子集选取办法,为评价函数提供特征子集。根据搜索过程的方法的不同,可以将特征选择分为穷举、启发式、随机几种方法。
以上几种方法不改变特征的原始属性,而有些方法通过对特征进行空间变换,去除相关性。比如PCA、傅立叶变换、小波变换等.
评价函数( EvaluationFunction )
评价函数是评价一个特征子集好坏程度的一个准则。评价函数的设计在不同的应用场景下会不同,比如有的会根据其分布是否均匀判断,或者看对最终模型的效果进行判断。每种评价函数各有优劣,所以需要根据实际情况进行选择。根据不同的评价准则,可以分为:筛选器模型、封装器模型以及混合模型。过滤器模型是将特征选择作为一个预处理过程,利用数据的内在特性对选取的特征子集进行评价,独立于学习算法。而封装器模型则将后续学习算法的结果作为特征评价准则的一部分。根据评价函数的不同(与采用的分类方法是否关联),可以将特征选择分为独立性准则、关联性度量。
筛选器通过分析特征子集内部的特点来衡量其好坏。筛选器一般用作预处理,与分类器的选择无关。筛选器的原理如下图1:
1. Filter原理(RicardoGutierrez-Osuna 2008 )
封装器实质上是一个分类器,封装器用选取的特征子集对样本集进行分类,分类的精度作为衡量特征子集好坏的标准。封装器的原理如图2所示。
图2. Wrapper原理(RicardoGutierrez-Osuna 2008 )
停止准则( StoppingCriterion )
停止准则是与评价函数相关的,当评价函数值达到某个阈值后就可停止搜索。比如对于独立性准则,可以选择样本间平均间距最大;对于关联性度量,可以选择使得分类器的准确召回最高作为准则。
验证过程(Validation Procedure )
度量测试数据集上验证选出来的特征子集的有效性。最好采取与前期选择方法不相关的度量方法,这样可以减少其间的耦合。
图3特征选择的过程 ( M.Dash and H. Liu 1997 )
这几个过程中的不同方法可以看作一种组件,分别进行组合。比如可以采取启发式特征筛选方法,结合相关性度量作为评价函数等。
3. 特征子集产生过程
产生过程是搜索特征子空间的过程。搜索的算法分为完全搜索(Complete),启发式搜索(Heuristic),随机搜索(Random)3大类,如图4所示。
图4 特征子集搜寻过程分类
当然,每种方法都不是互斥的,也可以将多种方法结合起来使用,取长补短。下面对常见的搜索算法进行简单介绍。
3.1完全搜索(complete)
完全搜索分为穷举搜索(Exhaustive)与非穷举搜索(Non-Exhaustive)两类。完全搜索部分考虑特征之间的相关性,从而能更好地找到最优集合。
A. 广度优先搜索( Breadth First Search )
算法描述:广度优先遍历特征子空间。
Step1:首先将根节点放入队列中。
Step2:从队列中取出第一个节点,并检验它是否为目标。
substep:如果找到目标,则结束搜寻并回传结果。
substep:否则将它所有尚未检验过的直接子节点加入队列中。
Step3:若队列为空,表示所有特征都检查过了。结束搜寻并回传「找不到目标」。
Step4:重复step2。
算法评价:枚举了所有的特征组合,属于穷举搜索,时间复杂度是O(2n),实用性不高。
B. 分支限界搜索( Branch and Bound )
算法描述:在穷举搜索的基础上加入分支限界。例如:若断定某些分支不可能搜索出比当前找到的最优解更优的解,则可以剪掉这些分支。
C. 定向搜索(Beam Search )
算法描述:首先选择N个得分最高的特征作为特征子集,将其加入一个限制最大长度的优先队列,每次从队列中取出得分最高的子集,然后穷举向该子集加入1个特征后产生的所有特征集,将这些特征集加入队列。
D. 最优优先搜索( Best First Search )
算法描述:与定向搜索类似,唯一的不同点是不限制优先队列的长度。
3.2启发式搜索(heuristic)
启发式搜索更多地采用贪心的思想,某些算法没有考虑特征之间的相关性,而单纯考虑单个特征对最终结果的影响,然而现实中的特征可能存在各种相关性。某些算法也从这些方面进行改进,比如增L去R选择算法,序列浮动选择。
A. 序列前向选择( SFS , Sequential Forward Selection )
算法描述:特征子集X从空集开始,每次选择一个特征x加入特征子集X,使得特征函数J( X)最优。简单说就是,每次都选择一个使得评价函数的取值达到更优的特征加入,是一种简单的贪心算法。
算法评价:缺点是只能加入特征而不能去除特征。例如:特征A完全依赖于特征B与C,可以认为如果加入了特征B与C则A就是多余的。假设序列前向选择算法首先将A加入特征集,然后又将B与C加入,那么特征子集中就包含了多余的特征A。
B. 序列后向选择( SBS , Sequential Backward Selection )
算法描述:从特征全集O开始,每次从特征集O中剔除一个特征x,使得剔除特征x后评价函数值达到最优。
算法评价:序列后向选择与序列前向选择正好相反,它的缺点是特征只能去除不能加入。
另外,SFS与SBS都属于贪心算法,容易陷入局部最优值。
C. 双向搜索( BDS , Bidirectional Search )
算法描述:使用序列前向选择(SFS)从空集开始,同时使用序列后向选择(SBS)从全集开始搜索,当两者搜索到一个相同的特征子集C时停止搜索。
双向搜索的出发点是 。如下图所示,O点代表搜索起点,A点代表搜索目标。灰色的圆代表单向搜索可能的搜索范围,绿色的2个圆表示某次双向搜索的搜索范围,容易证明绿色的面积必定要比灰色的要小。
图5. 双向搜索
D. 增L去R选择算法( LRS , Plus-L Minus-R Selection )
该算法有两种形式:
<1>算法从空集开始,每轮先加入L个特征,然后从中去除R个特征,使得评价函数值最优。( L> R )
<2> 算法从全集开始,每轮先去除R个特征,然后加入L个特征,使得评价函数值最优。( L< R )
算法评价:增L去R选择算法结合了序列前向选择与序列后向选择思想, L与R的选择是算法的关键。
E. 序列浮动选择( Sequential Floating Selection )
算法描述:序列浮动选择由增L去R选择算法发展而来,该算法与增L去R选择算法的不同之处在于:序列浮动选择的L与R不是固定的,而是“浮动”的,也就是会变化的。
序列浮动选择根据搜索方向的不同,有以下两种变种。
<1>序列浮动前向选择( SFFS, Sequential Floating Forward Selection )
算法描述:从空集开始,每轮在未选择的特征中选择一个子集x,使加入子集x后评价函数达到最优,然后在已选择的特征中选择子集z,使剔除子集z后评价函数达到最优。
<2>序列浮动后向选择( SFBS, Sequential Floating Backward Selection )
算法描述:与SFFS类似,不同之处在于SFBS是从全集开始,每轮先剔除特征,然后加入特征。
算法评价:序列浮动选择结合了序列前向选择、序列后向选择、增L去R选择的特点,并弥补了它们的缺点。
F. 决策树( Decision Tree Method , DTM)
算法描述:在训练样本集上运行C4.5或其他决策树生成算法,待决策树充分生长后,再在树上运行剪枝算法。则最终决策树各分支处的特征就是选出来的特征子集了。决策树方法一般使用信息增益作为评价函数。
3.3 随机算法(random)
A. 随机产生序列选择算法(RGSS, Random Generation plus Sequential Selection)
算法描述:随机产生一个特征子集,然后在该子集上执行SFS与SBS算法。
算法评价:可作为SFS与SBS的补充,用于跳出局部最优值。
B. 模拟退火算法( SA, Simulated Annealing )
算法评价:模拟退火一定程度克服了序列搜索算法容易陷入局部最优值的缺点,但是若最优解的区域太小(如所谓的“高尔夫球洞”地形),则模拟退火难以求解。
C. 遗传算法( GA, Genetic Algorithms )
算法描述:首先随机产生一批特征子集,并用评价函数给这些特征子集评分,然后通过交叉、突变等操作繁殖出下一代的特征子集,并且评分越高的特征子集被选中参加繁殖的概率越高。这样经过N代的繁殖和优胜劣汰后,种群中就可能产生了评价函数值最高的特征子集。
随机算法的共同缺点:依赖于随机因素,有实验结果难以重现。
3.4 特征变换方法
A. PCA
PCA(Principal ComponentAnalysis),中文名为主成份变换,是一种坐标变换的方法,可以去除冗余特征。
具体特征变换过程中,去掉较小的特征值,从而达到去噪、去除相关性和特征减少的目的。
B. 小波变换
小波也是一种特征空间变换的方法,相较于傅立叶变换,小波变换能更好地适应剧烈的变换。
4. 评价函数
评价函数的作用是评价产生过程所提供的特征子集的好坏。
4.1 独立准则
独立准则通常应用在过滤器模型的特征选择算法中,试图通过训练数据的内在特性对所选择的特征子集进行评价,独立于特定的学习算法。通常包括:距离度置、信息度量,关联性度量和一致性度量。
在做比较通用的特征选择方法时,建议采用这种方法,因为这是独立于特定机器学习算法的,适用于大多数后续机器学习方法。
4.2关联性度量
关联准则通常应用在封装器模型的特征选择算法中,先确定一个学习算法并且利用机器学习算法的性能作为评价准则。对于特定的学习算法来说,通常可以找到比过滤器模型更好的特征子集,但是需要多次调用学习算法,一般时间开销较大,并且可能不适介其它学习算法。
在我们做模式分类算法时,可以根据自己的实际情况,采用关联性度量方法,这样能更好地和我们的分类方法相结合,通常能找到比较好的子集。
综上,两种种评价函数的优缺点和适用情况总结如下:
4.3 常见的评价函数
A. 卡方检验
卡方检验最基本的思想就是通过观察实际值与理论值的偏差来确定理论的正确与否.具体做的时候常常先假设两个变量确实是独立的(“原假设”),然后观察实际值(观察值)与理论值(这个理论值是指“如果两者确实独立”的情况下应该有的值)的偏差程度,如果偏差足够小,我们就认为误差是很自然的样本误差,是测量手段不够精确导致或者偶然发生的,两者确确实实是独立的,此时就接受原假设;如果偏差大到一定程度,使得这样的误差不太可能是偶然产生或者测量不精确所致,我们就认为两者实际上是相关的,即否定原假设,而接受备择假设.
理论值为E,实际值为x,偏差程度的计算公式为:
这个式子就是开方检验使用的差值衡量公式.当提供了数个样本的观察值x1,x2,……xi,……xn之后,代入到式中就可以求得开方值,用这个值与事先设定的阈值比较,如果大于阈值(即偏差很大),就认为原假设不成立,反之则认为原假设成立.[请参考我的另外一篇卡方检验的普及文章]
B. 相关性( Correlation)
运用相关性来度量特征子集的好坏是基于这样一个假设:好的特征子集所包含的特征应该是与分类的相关度较高(相关度高),而特征之间相关度较低的(冗余度低)。
可以使用线性相关系数(correlationcoefficient) 来衡量向量之间线性相关度。
C. 距离(Distance Metrics )
运用距离度量进行特征选择是基于这样的假设:好的特征子集应该使得属于同一类的样本距离尽可能小,属于不同类的样本之间的距离尽可能远。同样基于此种思想的有fisher判别分类反法。
常用的距离度量(相似性度量)包括欧氏距离、标准化欧氏距离、马氏距离等。
D. 信息增益( Information Gain )
假设存在离散变量Y,Y中的取值包括{y1,y2,….,ym} ,yi出现的概率为Pi。则Y的信息熵定义为:
信息熵是对不确定性的一种描述。具有如下特性:若集合Y的元素分布不均,则其信息熵越小;若Y分布越平均,则其信息熵越大。在极端的情况下:若Y只能取一个值,即P1=1,则H(Y)取最小值0;反之若各种取值出现的概率都相等,即都是1/m,则H(Y)取最大值log2m。
对于一个特征t,系统有它和没它的时候信息量各是多少,两者的差值就是这个特征给系统带来的信息量.有它即信息熵,无它则是条件熵.
条件熵:计算当一个特征t不能变化时,系统的信息量是多少.
对于一个特征X,它可能的取值有n多种(x1,x2,……,xn),计算每个值的条件熵,再取平均值.
在文本分类中,特征词t的取值只有t(代表t出现)和(代表t不出现).那么
最后,信息增益
但信息增益最大的问题[对于多分类存在这个问题,对于二分类则不存在]还在于它只能考察特征对整个系统的贡献,而不能具体到某个类别上,这就使得它只适合用来做所谓“全局”的特征选择(指所有的类都使用相同的特征集合),而无法做“本地”的特征选择(每个类别有自己的特征集合,因为有的词,对这个类别很有区分度,对另一个类别则无足轻重).
同时,信息熵会偏向于特征的分布较多的特征,所以改进方法是可以尝试信息增益率。
E. 分类器错误率(Classifier error rate )
使用特定的分类器,用给定的特征子集对样本集进行分类,用分类的精度来衡量特征子集的好坏。
以上4种度量方法中,卡方检验、相关性、距离、信息增益、属于筛选器,而分类器错误率属于封装器。筛选器由于与具体的分类算法无关,因此其在不同的分类算法之间的推广能力较强,而且计算量也较小。而封装器由于在评价的过程中应用了具体的分类算法进行分类,因此其推广到其他分类算法的效果可能较差,而且计算量也较大。
5. 应用实例
此处举出一个实际应用中的栗子,基本方法为启发式搜索(顺序添加)+关联性准则(卡方检验、最大熵)+准召停止准则。以下详细介绍操作步骤。 数据分析师培训
Step1:统计每种特征的卡方值.
Step2:取topN的特征值.
Step3:带入模型训练,并在测试集合上计算准确和召回.
Step4:如果达标,停止,否则,gotostep2.
数据分析咨询请扫描二维码
数据分析师的工作内容涉及多个方面,主要包括数据的收集、整理、分析和可视化,以支持商业决策和问题解决。以下是数据分析师的一 ...
2024-11-21数据分析师必须掌握的技能可以从多个方面进行归纳和总结。以下是数据分析师需要具备的主要技能: 统计学基础:数据分析师需要 ...
2024-11-21数据分析入门的难易程度因人而异,总体来看,入门并不算特别困难,但需要一定的学习和实践积累。 入门难度:数据分析入门相对 ...
2024-11-21数据分析是一项通过收集、整理和解释数据来发现有用信息的过程,它在现代社会中具有广泛的应用和重要性。数据分析能够帮助人们更 ...
2024-11-21数据分析行业正在迅速发展,随着技术的不断进步和数据量的爆炸式增长,企业对数据分析人才的需求也与日俱增。本文将探讨数据分析 ...
2024-11-21数据分析的常用方法包括多种技术,每种方法都有其特定的应用场景和优势。以下是几种常见的数据分析方法: 对比分析法:通过比 ...
2024-11-21企业数字化转型是指企业利用数字技术对其业务进行改造和升级,以实现提高效率、降低成本、创新业务模式等目标的过程。这一过程不 ...
2024-11-21数据分析作为一个备受追捧的职业领域,吸引着越来越多的女性加入其中。对于女生而言,在选择成为一名数据分析师时,行业选择至关 ...
2024-11-21大数据技术专业主要学习计算机科学、数学、统计学和信息技术等领域的基础理论和技能,旨在培养具备大数据处理、分析和应用能力的 ...
2024-11-21《Python数据分析极简入门》 第2节 3 Pandas数据查看 这里我们创建一个DataFrame命名为df: importnumpyasnpi ...
2024-11-21越老越吃香的行业主要集中在需要长时间经验积累和专业知识的领域。这些行业通常知识更新换代较慢,因此随着年龄的增长,从业者能 ...
2024-11-20数据导入 使用pandas库的read_csv()函数读取CSV文件或使用read_excel()函数读取Excel文件。 支持处理不同格式数据,可指定分隔 ...
2024-11-20大数据与会计专业是一门结合了大数据分析技术和会计财务理论知识的新型复合型学科,旨在培养能够适应现代会计业务新特征的高层次 ...
2024-11-20要成为一名数据分析师,需要掌握一系列硬技能和软技能。以下是成为数据分析师所需的关键技能: 统计学基础 理解基本的统计概念 ...
2024-11-20是的,Python可以用于数据分析。Python在数据分析领域非常流行,因为它拥有丰富的库和工具,能够高效地处理从数据清洗到可视化的 ...
2024-11-20在这个数据驱动的时代,数据分析师的角色变得愈发不可或缺。他们承担着帮助企业从数据中提取有价值信息的责任,而这些信息可以大 ...
2024-11-20数据分析作为现代信息时代的支柱之一,已经成为各行业不可或缺的工具。无论是在商业、科研还是日常决策中,数据分析都扮演着至关 ...
2024-11-20数字化转型已成为当今商业世界的热点话题。它不仅代表着技术的提升,还涉及企业业务流程、组织结构和文化的深层次变革。理解数字 ...
2024-11-20在现代社会的快速变迁中,选择一个具有长期增长潜力的行业显得至关重要。了解未来发展前景好的行业不仅能帮助我们进行职业选择, ...
2024-11-20统计学专业的就业方向和前景非常广泛且充满机遇。随着大数据、人工智能等技术的快速发展,统计学的重要性进一步凸显,相关人才的 ...
2024-11-20