特征选择, 经典三刀

       

【特征工程】特征选择与特征学习

       特征选择(Feature Selection,FS)和特征抽取(Feature Extraction, FE)是特征工程(Feature Engineering)的两个重要的方面。  他们之间最大的区别就是是否生成新的属性。  FS仅仅对特征进行排序(Ranking)和选择, FE更为复杂,需要重新认识事物, 挖掘新的角度, 创新性的创立新的属性, 而目前深度学习这么火, 一个很重要的原因是缩减了特征提取的任务。 不过, 目前特征工程依然是各种机器学习应用领域的重要组成部分。

1.为什么要特征选择?

1.1特征选择与分类器性能的关系

一般说来,当固定一个分类器的话, 所选择的特征数量和分类器的效果之间会有一个曲线, 在某个x(1<=x<=n)的地方, 会达到最优。那么, 该怎么选这x个特征呢? 这是一个比较难的问题。

1.2 为什么特征少了不行?

这个比较直观, 特征少了会导致无法区分的情况发生。 如下图所示,仅仅依赖x1或者x2特征, 都无法区分这两类数据, 所以当特征数量过小, 很可能导致数据重叠。进而, 所有分类器都会失效。

1.3 为什么特征多了也不行?

那为什么特征多了也不行呢? 如下图所示,明明根据纵轴来判断就可以容易的区分两类, 但是因为引入了横轴的特征, 使得同类数据在空间中距离变远,变稀疏了。 进而使得很多分类器失效。 所以, 特征不是越多越好!

2. 特征选择的一般流程

根据前面如何得到一个最优的子集, 那么特征选择的的一般流程就是, 找一个集合,然后针对某个学习算法, 测试效果如何, 一直循环直到找到最优集合为止。

如果把Evaluation再突出表示, 那么整个流程就会是如下图这样一个过程。

那么按照这个流程, 是不是特征选择就解决呢?  固定一个算法, 然后搜索(Search)一个测试子集, 然后进行Cross-Validation进行评价,直到找到最优目标。 那么这个搜索空间有多大呢?假设有n个特征, 每个特征可以选择或者不选择, 那么就是2的n次方的搜索空间,n为特征数量。所以基本上n=10的时候,就是一个1024次的尝试。如果每次尝试1分钟, 光这个就需要1天时间。  尤其当n>10的情况, 是非常常见的。

所以当n<10的时候, 看上去一些暴力搜索算法还是可以尝试一下的。其他一些常见的搜索算法也可以试试:

穷举法(Exhaustive): 暴力穷尽

贪心法(Greedy Selection): 线性时间

模拟退火(Simulated Annealing): 随机尝试找最优

基因算法(Genetic Algorithm): 组合深度优先尝试

邻居搜索(Variable Neighbor Search): 利用相近关系搜索

我们把基于Cross-Validation和基因算法(GA)的一般流程列在如下:

但是, 始终当n很大的时候, 这个搜索空间会很大,如何找最优值还是需要一些经验结论。

3. 机器学习特征选择的经典三刀?

特征选择的经典经验总结起来主要有三刀: 飞刀(Filter), 弯刀(Wrapper), 电刀(Embedded)。 类比起来:

小李飞刀(Filter):  快速无比, 但是能不能打的准,还得看各自功力。

圆月弯刀(Wrapper):  实力无穷, 但是会不会用, 需要点悟性和魔力,还靠点运气。

高频电刀(Embedded): 模式单调,快速并且效果明显, 但是如何参数设置, 需要深厚的背景知识。

Filter, Wrapper, Embedded 为什么是具有这些特性呢?

3.1 Filter 过滤式 (飞刀)

顾名思义,就是要基于贪心的思想, 把需要的特征筛/滤出来。  一般说来, 基于贪心就需要对特征进行打分。  而这个打分可以基于领域知识, 相关性, 距离,缺失, 稳定性 等等。

单一特征选择

根据每个特征属性和目标属性之间的计算值来进行排序选择:

a. Welch‘s t-Test:   来判断两个属性的分布的均值方差距离。

b. Fish-Score: 和Welch‘s t-Test类似, 计算两个分布的距离, 均值只差和方差之和的距离。

c. Chi-Squared test: 计算类别离散值之间的相关性。

d. Information Gain:计算两个划分的一致性。

多特征选择

根据多个特征属性和目标属性之间的计算值来进行排序选择:

e. Relief-F: 根据随机选择的样本点,来计算属性之间的相关性。

f. Correlation Feature Selection (CFS): 利用属性之间的相关性, 进行选择。

3.2. Wrapper 包裹式 (弯刀)

就是先选定特定算法,然后再根据算法效果来选择特征集合。  一般会选用普遍效果较好的算法, 例如Random Forest, SVM, kNN等等。

这可以使用前面提到的各种减小搜索空间的尝试。 其中最经典的是使用启发式搜索(Heuristic Search), 而概括的来说主要分为两大类:

g. Forward Selection: 挑出一些属性, 然后慢慢增大挑出的集合。

h. Backward Elimination: 删除一些属性,然后慢慢减小保留的集合。

3.3 Embedded 嵌入式 (电刀)

利用正则化思想, 将部分特征属性的权重变成零。 常见的正则化有L1的Lasso,L2的Ridge和混合的Elastic Net。其中L1的算子有明显的特征选择的功能。

在这里面,比较简单的就是会自动进行特征选择, 而且一次性就搞定了, 速度也不错, 难点就是损失函数的选择和缩放参数的选择。   常见的损失函数如下图所示:

Binary(0-1) loss: 灰线 对应错误率

Square loss: 紫线 对应 最新二乘法

Hinge loss: 浅蓝 对应 SVM

Logistic loss:红线 对应 逻辑回归

Exponential loss:绿线 对应 adaboost

结构化Lasso

除了上述的简单的Lasso,还有结构化的Lasso。

i. Group Lasso: 先将属性进行分组, 然后对每个分组,看成一个属性那样 的采用Lasso的方法选择, 要么全要, 要么全部不要。 再进一步, Sparse Group Lasso再在组内进行选择。

j. Tree-Structured Lasso:  除了前面的扁平(Flat)的结构外, 还有层次化的结构。


对于这种情况, 同样采用类似Group Lasso的思想。 对于一个数的子结构, 要么全要或者全不要,也可以允许分支单独要。

在这种树结构的思想下, 那么每个树的分支的正则化惩罚也可以采用不同的形式。

k. Graph Structure Lasso: 更进一步还可以推广到基于图的Lasso

在图的情况下, 那么两两节点之间要定义一个惩罚项。

树结构Lasso也可以利用图来表示。

再次强调, 很多时候, 需要综合上面的三刀来进行综合选择。  特征选择不是一个容易的任务噢。

小结, 特征选择的三刀要用的好需要自己实战体会的, 下面再简单归纳下:

Filter (F刀):

优点: 快速, 只需要基础统计知识。

缺点:特征之间的组合效应难以挖掘。

Wrapper(W刀):

优点: 直接面向算法优化, 不需要太多知识。

缺点: 庞大的搜索空间, 需要定义启发式策略。

Embedded(E刀):

优点: 快速, 并且面向算法。

缺点: 需要调整结构和参数配置, 而这需要深入的知识和经验。

特征选择, 经典三刀

时间: 2024-10-29 20:37:41

特征选择, 经典三刀的相关文章

特征选择, 经典三刀(转)

特征选择(Feature Selection,FS)和特征抽取(Feature Extraction, FE)是特征工程(Feature Engineering)的两个重要的方面.  他们之间最大的区别就是是否生成新的属性.  FS仅仅对特征进行排序(Ranking)和选择, FE更为复杂,需要重新认识事物, 挖掘新的角度, 创新性的创立新的属性, 而目前深度学习这么火, 一个很重要的原因是缩减了特征提取的任务. 不过, 目前特征工程依然是各种机器学习应用领域的重要组成部分. 1.为什么要特征选

特征选择(三)-K-L变换

上一讲说到,各个特征(各个分量)对分类来说,其重要性当然是不同的. 舍去不重要的分量,这就是降维. 聚类变换认为:重要的分量就是能让变换后类内距离小的分量. 类内距离小,意味着抱团抱得紧. 但是,抱团抱得紧,真的就一定容易分类么? 如图1所示,根据聚类变换的原则,我们要留下方差小的分量,把方差大(波动大)的分量丢掉,所以两个椭圆都要向y轴投影,这样悲剧了,两个重叠在一起,根本分不开了.而另一种情况却可以这么做,把方差大的分量丢掉,于是向x轴投影,很顺利就能分开了.因此,聚类变换并不是每次都能成功

Css布局系列-经典三列布局

今天给大家介绍经典三列布局和实现原理: 通过浮动(float)进行实现,如果对float不是很清楚可以去看看我上篇介绍的: 通过绝对定位布局: 通过float加margin的负值进行组合实现.  对三种情况分析: 第一种通过浮动(float)布局,特别需要注意在定义元素结构的时候要将居中元素放到right元素的后面(container->left-right-center),不能像正常那种思维去定义结构(container ->left-center-right): *{margin: 0;p

数据库规范化与经典三范式

数据库规范化与经典三范式 冗余导致多种更新异常,也就是插入.更新和删除行的操作困难. 规范化(normalization)是通过修改表以减少冗余和矛盾的一系列步骤. 在每一步之后,数据库都达到一个特定的范式(normal form) . 关系模型定义了三种范式,以著名的序数命名. 第一范式(1NF) 第二范式(2NF) 第三范式(3NF) 每一种范式都比前一种更健壮.符合3NF的数据库也符合2NF和1NF.规范化水平越高,表的数量也越多. 无损分解(lossless decomposition)

经典三栏布局之圣杯、双飞翼、弹性布局

经典三栏布局之圣杯.双飞翼.弹性布局 圣杯布局和双飞翼布局是前端工程师需要掌握的布局方式,两者功能相同,都是为了实现两侧宽度固定,中间宽度自适应的布局方式,此外,使用新增的flex布局,可以使布局更加简单. 双飞翼布局和圣杯布局虽然实现方式有所差异,但是基本上都遵循了以下几点: 两侧宽度固定,中间宽度自适应 中间结构在DOM上优先,以便于优先渲染 下面依次介绍圣杯布局.双飞翼布局.弹性布局实现三栏布局 圣杯布局 一.搭建主体结构 我们先搭建主体框架,将主体结构写出来 <div class="

CSS 经典三列布局

一 圣杯布局 1 html结构 <!DOCTYPE html> <html> <head> <title></title> <link rel="stylesheet" type="text/css" href="css/css.css"> </head> <body> <div class="header">头部<

经典三列布局

html代码中,middle部分首先要放在container的最前面,然后是left,right.三列布局,中间宽度自适应,两边定宽.1.[国外]圣杯布局:左中右三列都设置浮动和相对定位,中列宽度100%占满,左右两列都有负边距,左列有左定位数,右列有右定位数.(IE6有问题) <div class="cupContainer"> <div class="middle">中列</div> <div class="l

css的经典三栏式布局

今天上百度前端技术学院的做任务巩固基础,之前做了两个比较复杂的页面,总觉得自己有时好有时差,于是决定从基础任务开始从新做一遍查缺补漏. 第一个任务是实现一个三栏布局,外部的两栏固定宽度,中间自适应,以下是效果图: 我自己采用了两种布局方式: 首先是:浮动float css代码: .team-inf{  //左边栏的宽为固定宽200px float: left; width: 200px; } .logo-group{   //右边栏的宽为固定宽120px float: right; paddin

CSS实现经典三栏布局(两侧定宽,中间自适应)

近期开始独立攻克百度前端技术学院的各项任务,之前做了两个比较复杂的页面,深深感觉基础不好,好多css的语句都是为了实现效果而去写的,出现了好多问题,而自己的解决方案也不够优,于是决定从基础开始学起,循序渐进. 第一个任务是实现一个三栏布局,外部的两栏固定宽度,中间自适应,以下是效果图: 我使用了两种方法实现以上效果:float和position 以下是float方法的CSS代码: 1 .team-inf{ 2 float: left; 3 width: 200px; 4 } 5 .logo-gr