总结 特征选择(feature selection)算法笔记

总结 特征选择(feature selection)算法笔记

原创  2017年01月02日 16:50:18
  • 什么是特征选择
    • 特征选择也称特征子集选择,或者属性选择,是指从全部特诊中选取一个特征子集,使构造出来的模型更好。

  • 为什么要做特征选择
    • 在机器学习的实际应用中,特征数量往往较多,其中可能存在不相关的特征,特征之间也可能存在相互依赖,容易导致:
      • 特征个数越多,分析特征、训练模型所需的时间也就越长
      • 特征个数越多,容易引起“维度灾难”,模型也会越复杂,其推广能力会下降。
    • 特征选择能剔除不相关(irrelevant)或亢余(redundant)的特征,从而达到减少特征个数,提高模型精确度,减少运行时间的目的。另一方面,选取出真正相关的特征简化了模型,是研究人员易于理解数据产生的过程



  • 工程上常用的特征选择的方法

    • 计算每一个特征与相应变量的相关性
      • 皮尔森(Pearson):只能衡量线性相关性
      • 互信息系数:能够很好地度量各种相关性,计算复杂,不过很多toolkit都包含此工具(例如sklearn的MINE),得到相关性就可以排序选择特征了。

    • 构建单个特征的模型,通过模型的准确性为特征排序,借此选择特征。
      • 当选择到了目标特征之后,再用来训练最终的模型。

    • 通过L1正则项来选择特征
      • L1正则方法具有稀疏解的特性,因此天然具备特征选择的特性,
      • 但是要注意,L1没有选到的特征不代表不重要,原因是连个具有高相关性的特征可能只保留了一个,如果要确定哪个特征重要应再通过L2正则方法交叉检验。
      • 具体来说,应该分别使用L1和L2拟合,如果两个特征在L2中系数相接近,在L1中一个系数为0一个系数不为0,那么其实这两个特征都应该保留,原因是L1对于强相关特征只会保留一个。

    • 训练能够对特征打分的预选模型:RandomForest和Logistic Regression等都能对模型的特征打分,通过打分获得相关性后再训练最终模型

    • 通过特征组合后再来选择特征:如对用户id和用户特征最组合来获得较大的特征集再来选择特征,这种做法在推荐系统和广告系统中比较常见,这也是所谓亿级甚至十亿级特征的主要来源,原因是用户数据比较稀疏,组合特征能够同时兼顾全局模型和个性化模型。

    • 通过深度学习来进行特征选择:目前这种首都正在随着深度学习的流行而成为一种手段,尤其是在计算机视觉领域,原因是深度学习(unsupervised feature learning)具有自动学习特征的能力。从深度学习模型中选择某一神经层的特征后就可以用来进行最终目标模型的训练。



  • 特征选择常用算法综述

       特征选择的一般过程:
            1.  生成子集:搜索特征子集,为评价函数提供特征子集
            2  .评价函数:评价特征子集的好坏
            3.  停止准则:与评价函数相关,一般是阈值,评价函数达到一定标准后就可停止搜索
            4.  验证过程:在验证数据集上验证选出来的特征子集的有效性 

            


    • 生成子集    :  搜索算法有 完全搜索、启发式搜索、随机搜索 三大类。

      • 完全搜索
        • 广度优先搜索(Breadth First Search): 广度优先遍历特征子空间。属于穷举(Exhaustive)搜索,枚举了所有特征组合,时间复杂度O(n*n),实用度不高。又名宽搜。
        • 分支限界搜索(Branch and Bound):在穷举搜索的基础上加入分支限界。 例如:若断定默写分支不可能搜索出比当前找到的最优解更优的解,则可以剪掉这些分支。
        • 定向搜索(Beam Search):首先选择N个得分最高的特征作为特征子集,将其加入一个限制最大长度的优先队列,每次从队列中取出得分最高的子集,然后穷举向该子集加入1个特征后产生的所有特征集,将这些特征集加入队列。其实算是启发式的一种,对宽搜加上每次展开结点数的限制以节省时间空间,对于展开哪几个节点由启发式函数确定
        • 最优优化搜索(Best First Search):与定向搜索相似,唯一不同电视不限制优先队列的长度。

      • 启发式搜索
        • 序列前向选择(SFS,Sequential Forward Seelction):特征子集X从空集开始,每次选择一个特征x加入特征子集X,使得特征函数J(X)最优。简单说就是,每次都选择一个使得评价函数的取值达到最优的特征加入,其实就是一种简单的贪心算法。缺点就是只能加入特征而不能去除特征。例如:特征A完全依赖于特征B与C,可以认为如果加入了特征B与C则A就是多余的。假设序列前向选择算法首先将A加入特征集,然后又将B与C加入,那么特征子集中就包含了多余的特征A。
        • 序列后向选择(SBS,Sequential Backward Selection):从特征全集O开始,每次从特征集O中剔除一个特征x,使得剔除特征x后评价函数值达到最优。和SFS相反,从特征全集开始,每次选择使评价函数J(X)最优的特征x剔除,也是贪心算法,缺点是只减不增。
        • 双向搜索(BDS,Bidirectional Search):使用SFS从空集开始,同时使用SBS从全集开始搜索,当两者搜索到一个相同的特征子集C时停止搜索。双向搜索的出发点是。如下图所示,O点代表搜索七点,A点代表搜索目标。灰色的圆代表单向搜索可能的搜索范围,绿色的2个圆表示某次双向搜索的搜索范围,容易证明绿色的面积必定比灰色的要小。
        • 增L去R选择算法(LRS,Plus-L Minus-R Selection):该算法有两种形式,此算法结合了SBS和SFS思想,L和R的选择是关键。
          • 算法从空集开始,每轮先加入L个特征,然后从中去除R个特征,使得评价函数值最优。(L>R)
          • 算法从全集开始,每轮先去除R个特征,然后加入L个特征,使得评价函数最优。(L<R)

        • 浮动序列选择(Sequential Floating Selection):序列浮动选择由LRS发展而来,该算法与LRS算法不同之处在:序列浮动选择的L与R不是固定的,而是“浮动”的,也就是会变化的。此算法结合了SBS, SFS, LRS的特点,并弥补了它们的缺点。根据搜索方向的不同,有以下两种变种:
          • 序列浮动前向选择(SFFS, Sequential Floating Forward Selection):从空集开始,每轮在未选择的特征中选择一个子集x,使加入子集x后评价函数达到最优,然后在已选择的特征中选择子集z,使剔除子集z后评价函数达到最优。
          • 序列浮动后向选择(SBBS, Sequential Floating Backward Selection):从全集开始,每轮在已选择的特征中剔除一个子集z,使剔除子集z后评价函数达到最优,然后在未选择的特征中选择子集x,使加入子集x后评价函数达到最优。

        • 决策树(Decision Tree Mtehod,DTM):在训练样本集上运行C4.5或其他决策树生成算法,待决策树充分生长后,再在树上运行剪枝算法。则最终决策树各分支处的特征(叶子)就是选出来的特征子集了。决策树方法一般使用Information Gain作为评价函数。


      • 随机算法
              随机算法的共同缺点:依赖于随机因素,有实验结果难以重现。
        • 随机产生序列选择算法(RGSS, Random Generation plus Sequential Selection):随机产生一个特征子集,然后在该子集上执行SBS和SFS算法。可作为SBS与SFS的补充,用于跳出局部算法。
        • 模拟退火算法(SA,Simulated Annealing):一定程度上客服了序列搜索算法容易陷入局部最优质的缺点,但是若最优解的区域太小(如“高尔夫球洞”地形),则模拟退火难以求解。
        • 遗传算法(GA,Genetic Algorithms):首先随机产生一批特征子集,并用评价函数给这些特征子集评分,然后通过交叉、突变等操作繁殖出下一代的特征子集,并且通过评分越高的特征子集被选中参加繁殖的概率越高。这样经过N带的繁殖和优胜劣汰之后,种群中就可能产生了评价函数值最高的特征子集。















部分内容来源于:http://www.cnblogs.com/IvanSSSS/p/4951758.html
https://www.zhihu.com/question/28641663/answer/41653367          



  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在 MATLAB 中,有几种常用的特征选择算法可以使用。下面列举了一些常见的特征选择方法: 1. 单变量特征选择(Univariate Feature Selection):该方法通过计算每个特征与目标变量之间的相关性来选择特征。常用的指标包括卡方检验、相关系数、互信息等。你可以使用 MATLAB 中的相关函数(如`corrcoef()`、`chi2test()`、`mutualinfo()`)来实现单变量特征选择。 2. 递归特征消除(Recursive Feature Elimination, RFE):该方法通过递归地训练模型并剔除最不重要的特征来进行特征选择。常用的算法包括支持向量机(SVM)和线性回归。你可以使用 MATLAB 中的 `fitrlinear()` 或 `fitcsvm()` 函数结合 RFE 算法来进行特征选择。 3. 主成分分析(Principal Component Analysis, PCA):该方法通过将原始特征转换为线性无关的主成分来实现特征选择。你可以使用 MATLAB 中的 `pca()` 函数来进行主成分分析。 4. 基于树的特征选择(Tree-based Feature Selection):该方法基于决策树或随机森林等算法构建模型,利用特征的重要性进行特征选择。你可以使用 MATLAB 中的 `fitctree()` 或 `fitensemble()` 函数结合特征重要性评估方法来进行特征选择。 以上仅是一些常见的特征选择算法,实际应用中可以根据具体问题选择适合的方法。MATLAB 提供了丰富的函数和工具箱来支持特征选择任务,你可以参考 MATLAB 的文档和示例代码来进一步学习和实践。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值