感觉文章写的很好,故转过来,如有不当,请通知后马上删除。

http://mp.weixin.qq.com/s?__biz=MzIzMDA1MTM3Mg==&mid=2653077415&idx=1&sn=5a036534000cb7566e78e0e315242fe2&chksm=f36f44e4c418cdf2c62936fb9213dbdb27241dd28f44521549a704379ac952a9b8a6d824251c&mpshare=1&scene=1&srcid=1121U7CAhheBHqnlHA0pBCk8#rd

特约作者:史春奇

数据应用学院


特征选择(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刀):

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

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




参考:

http://www.rokkincat.com/blog/2016/04/28/feature-selection

http://www.denizyuret.com/2014/02/machine-learning-in-5-pictures.html

特征选择, 经典三刀相关推荐

  1. php 蛋糕一刀均分试题,5个小朋友分一个蛋糕,只准切三刀,该怎样才能平分

    搞笑段子精选:有个人请客喝酒,但酒味很淡,客人尝了尝后却极力称赞他家的烹调技艺高超,十分可口.主人便说:"普通的饭菜都还没有上桌,你怎么就说好呢?"客人答道:"不用提别的 ...

  2. 失传万年的PS致富经典(三)

    PS选区与填色 失传万年的PS致富经典(一):失传万年的PS致富经典(一) 失传万年的PS致富经典(二):失传万年的PS致富经典(二) 失传万年的PS致富经典(三): 失传万年的PS致富经典(三) 失 ...

  3. 儒家经典三礼,你知道指的是哪三礼吗?它们有什么区别?

    中国自古以来就是礼仪之邦,礼文化深深融入中华民族的生活当中,作为道德准则对人们的素质修养起了重要作用.说到礼,不得不提儒家经典三礼,三礼是指<周礼>.<仪礼>.<礼记&g ...

  4. Latex中经典三线表、多线表、内容跨行/跨列复杂表的详解与源代码

    一.经典三线表 1.1 效果图 1.2 分析 经典三线表主要采用booktabs宏包中提供的三个命令,即\toprule.\midrule以及\bottomrule来实现.通俗的讲,\toprule. ...

  5. 专栏 | 基于 Jupyter 的特征工程手册:特征选择(三)

    作者:陈颖祥.杨子晗 编译:AI有道 数据预处理后,我们生成了大量的新变量(比如独热编码生成了大量仅包含0或1的变量).但实际上,部分新生成的变量可能是多余:一方面它们本身不一定包含有用的信息,故无法 ...

  6. CSS圣杯布局常用吗,CSS 经典三列布局之圣杯布局

    圣杯布局 圣杯布局是典型的 CSS 布局问题,有着众多的解决方案. 圣杯布局是一种非常经典和常用的布局方式,其所指的是三列布局,中间宽度自适应,两边定宽:或者两列布局,主体宽度自适应,左边或右边定宽. ...

  7. Swing第三刀:做套ERP,要配得上我的登录界面!

    2019独角兽企业重金招聘Python工程师标准>>> 在<Swing第一刀>和<Swing第二刀>中提到了一个我正在折腾的一个ERP界面小框架,不少童鞋表示 ...

  8. css的经典三栏布局如何实现,css 实现三栏布局的四种方式

    三栏布局就是左中右,左右两边固定,中间自适应. 1. 绝对定位 左边 中间 右边 body { padding: ; margin: ; } /* 绝对定位 */ .left, .right { po ...

  9. SilverlightCMS开发之3经典三页面CMS浮现

    随笔思路: CMS粗略介绍 CMS具体说明 一个ListBox的效果实例 一些RIA Service 实例 那个SL CMS 的效果. 下一步 1CMS粗略介绍 @1本来昨晚就弄好了的.今天又改了一天 ...

最新文章

  1. rsyslogd 重启_ubuntu12.04 syslog记录正常与非正常关机重启
  2. 动态规划入门_数塔问题
  3. 第3章:分布式文件系统 HDFS
  4. Django(part13)--过滤器
  5. C#委托及事件处理机制浅析
  6. 执行yum:Error: Cannot retrieve metalink for repository: epel. Please verify its path and try again...
  7. 设置python路径
  8. 2003文件共享服务器搭建,用Windows Server 2003搭建安全文件服务器(2)
  9. go中make、new和直接var的区别
  10. Django框架第一篇基础
  11. python_射门小游戏
  12. oracle里的or 短路么,Oracle CASE短路不能分组工作
  13. 年会活动现场抽奖签到互动小程序开发制作
  14. mysql中一个字符等于几个字节_细说一个汉字等于几个字符,以及汉字,字符,字节,位之间的关系...
  15. 使用Node.js爬取双色球十六年来所有中奖号码
  16. c++11总结19——std::mutex
  17. idea 注释格式化之后回到同一行
  18. python语言单词_python单词_python 单词_python单词书 - 云+社区 - 腾讯云
  19. 人生的换档时刻?你是怎么度过的
  20. 如何查找sci期刊的历年影响因子

热门文章

  1. vue笔记一:Vue技术栈
  2. Silverlight 上传下载之三种方式解析
  3. IOC和DI有什么区别
  4. python转义html字符串,用python处理html代码的转义与复原
  5. VSCode与Keil联合开发STM32
  6. 利用cad编辑器pdf转cad格式
  7. 【电子学会】2020年12月图形化四级 -- 绘制雪花
  8. 让车载系统与外部系统无缝对接——掌握SOA跨系统通信技术
  9. XAxiDma_IntrGetIrq(AxiDmaInst, XAXIDMA_DEVICE_TO_DMA)
  10. mysql字符串拼接 空值_mysql字符串拼接并设置null值的实例方法