特征选择—过滤法(Filter)、嵌入法(Embedded)和包装法(Wrapper)

特征选择—过滤法(Filter)、嵌入法(Embedded)和包装法(Wrapper)_第1张图片

一、过滤法(Filter)

  • 目的:在维持算法表现的前提下,帮助算法们降低计算成本
  • 特点:独立操作,不与后续分类(或者回归)模型相关
  • 过程:

在这里插入图片描述

  • 目标对象:需要遍历特征或升维的算法。最近邻算法KNN,支持向量机SVM,决策树,神经网络,回归算法等遍历特征或升维运算,本身的运算量很大,需要的时间很长,因此特征选择很重要。随机森林不需要遍历特征,每次选的特征就很随机,并非用到所有的特征,所以特征选择作用不大。

    思考:过滤法对随机森林无效,却对树模型有效?
    解释:传统决策树需遍历所有特征,计算不纯度后分枝,而随机森林却是随机选择特征进行计算和分枝,因此随机森林的运算更快,过滤法对随机森林无用,对决策树有用。

1、方差过滤

  • sklearn模块:sklearn.feature_selection中VarianceThreshold
  • 过程:对每一个特征得所有数据进行方差计算,方差越大,证明该特征的区别度较大,适合选作分类,如果方差较小,则证明特征内部的差异较小,不适合进行分类。当方差为0时,此时的特征值相同。
  • 说明:此特征只针对特征,与标签无关;在进行特征选择时,先优先进行方差检验,去除方差为0的特征。
  • 公式:

在这里插入图片描述
2、卡方过滤

  • sklearn模块:sklearn.feature_selection中chi2
  • 过程:计算每个非负特征和标签之间的卡方统计量,选择顺序排在前k得特征。卡方值越大,二者之间的相关性越大,相互影响越明显
  • 说明:针对离散型标签(分类)问题;所有特征必须非负,数据先归一化或标准化。
  • 公式:

在这里插入图片描述

  • 原理:计算样本的实际值和理论值,然后进行计算卡方值。将得到的卡方值与对应自由度下的临界值进行对比,当卡方值大于临界值的时候,假设不成立,反之假设成立。下表对应的是对应自由度n和置信度p下的卡方临界值。
    自由度:V = (行数 - 1) * (列数 -1)。对四格表,自由度V = 1。
    置信度P值:一般取0.01或者0.05,比如p=0.01就是有99%的可信度接受他们有相关性。 P<0.01或者<0.05的特征,与标签时显著线性相关的。
    特征选择—过滤法(Filter)、嵌入法(Embedded)和包装法(Wrapper)_第2张图片
  • 举例:求喜欢象棋和科幻电影间的关联性,即喜欢科幻电影对喜欢下象棋有影响吗?
    特征选择—过滤法(Filter)、嵌入法(Embedded)和包装法(Wrapper)_第3张图片
    已知所有人300+1200=1600中:
    喜欢下象棋的人/不喜欢下象棋的人=300/1200=1/4
    我们假设下象棋与喜欢科幻电影二者之间没有影响,那么:
    喜欢科幻电影的450人中,有450*(1/4)=90的人喜欢象棋,360人不喜欢象棋
    不喜欢科幻电影的1050人中,有1050*(1/4)=210人喜欢象棋,840人不喜欢象棋
    以上计算出的(表格中红色部分)就是我们假设的理论值,黑色的就是实际值
    利用卡方计算公式,计算得到卡方值为507.93
    此时的自由度为1,置信度为0.01时,对应的临界值为10.83
    因为507.93>10.83,所以假设(无影响)不成立,也就是二者之间有影响。
    (理解:当理论值与实际值相同时,卡方值为0,此时二者完全独立,无任何影响。)

3、F检验

  • sklearn模块:feature_selection中的f_classif和f_regression

  • 过程:用来捕捉每个特征与标签之间的线性关系的过滤方法。又叫方差齐性检验(ANOVA)。简单来说,就是求得F统计量(组间方差/组内方差),然后查F表,如果大于临界值(一般是0.05显著性水平下)则拒绝原假设,即组间具有显著性的差异。

  • 说明:可以离散也可以是连续数据。只处理线性关系

  • 公式:F统计量 = 组间方差/组内方差

    这里的方差等于平方和除以自由度,组间的自由度为(组数-1),组内自由度为组数*(样本量-1),此样本量可以不一样,所以方差分析各组的样本量可以不一样。

  • 原理:F检验的本质是寻找两组数据之间的线性关系,其原假设是”数据不存在显著的线性关系“。它返回F值和p值两个统计量,F值越大,原假设越不成立,即存在明显线性关系。

4、互信息和最大信息系数过滤

  • 模块:feature_selection中mutual_info_classif和mutual_info_regression

  • 过程:通过计算“每个特征与标签之间的互信息量的估计”,进行相关性的计算,这个估计量在[0,1]之间取值,0表示两个变量独立,为1则表示两个变量完全相关。

  • 注意:既可以连续,也可以离散。既可以线性,也可以非线性。

  • 原理:根据熵计算信息量的多少,并与0和1进行比较,取得相关性的大小。

  • 熵的定义:表示信息量的多少
    在这里插入图片描述
    “今天周一,明天周二。” 概率是1,所以熵H(x)=0 →废话
    “我是男孩。”概率是0.5,所以熵H(x)=0.5*log0.5=1.5 →有点意思
    特征选择—过滤法(Filter)、嵌入法(Embedded)和包装法(Wrapper)_第4张图片
    H(X),H(Y):事件X,Y的信息
    H(X|Y):条件熵,表示在知道事件X的情况下,再知道事件y可以提供的信息。
    H(X;Y):联合熵,表示知道事件X和y之后可以提供给我们的信息。
    I(X;Y):互信息,表示事件X和Y共同提供的信息
    其中有:
    I(X;Y)= H(X) - H(X|Y)= H(Y) - H(Y|X)= H(Y) + H(X) - H(X;Y)

  • 最终得到互信息的计算公式:
    在这里插入图片描述

    互信息I(X;Y)可以理解为联合分布P(X,Y)和乘积分布P(X)*P(Y)之间相对熵。当X和Y独立时,P(X,Y)=P(X)*P(Y),则I(X;Y)=0;当X和Y完全相关时(红色和蓝色重合),I(X;Y)=H(X)=H(Y),此时的MI=1.

二、嵌入法(Embedded)

  • sklearn模块:feature_selection中的SelectFromModel

  • 特点:结合后续分类(或者回归)模型,根据评估结果进行选择

               每次遍历所有的特征(包括选择和未选择的)

  • 过程:类似于Filter,只不过系数是通过训练得来的。嵌入法是一种让算法自己决定使用哪些特征的方法,即特征选择和算法训练同时进行。在使用嵌入法时,我们先使用某些机器学习的算法和模型进行训练,得到各个特征的权值系数,根据权值系数从大到小选择特征。设置的阈值threshold决定最后选择出的特征的个数,阈值threshold是个超参数,选取比较不易控。

    注意:后续的评估器必须可以得到相关特征的权值系数,比如随机森林和树模型中的feature_importances,逻辑回归的l1和l2惩罚项,线性支持向量机的l2惩罚项等。

在这里插入图片描述

说明:此处的算法为分类(或者回归)的算法,如SVM,逻辑回归等。

三、包装法(Wrapper)

  • sklearn模块:sklearn.feature_selection中的RFE

  • 特点:结合后续分类(或者回归)模型,根据评估结果进行选择 每次遍历剩余所有未选择的特征

  • 过程:特征选择和算法训练同时进行的方法,依赖于算法自身的选择,比如coef_属性或feature_importances_属性来完成特征选择。对于每一个待选的特征子集,都在训练集上训练一遍模型,然后在测试集上根据误差大小选择出特征子集。前提是要选好后续要用的分类(或者回归)算法,如Random
    Forest,SVM,kNN等等。
    在这里插入图片描述

  • 算法:前向搜索,后向搜索和递归特征消除法。
    (1)前向搜索:初始为空,每次增加一个到特征集中,直到K为止。
    (2)后向搜索:初始为全部特征,每次较少一个排除特征集中,直到剩余K为止。
    (3)递归特征消除法:一种贪婪的优化算法,找到性能最佳的特征子集。它反复创建模型,并在每次迭代时(针对N个特征操作)保留最佳特征或剔除最差特征,下一次迭代时,它会使用上一次建模中没有被选中的特征来构建下一个模型,直到所有特征都耗尽为止。然后,它根据自己保留或剔除特征的顺序来对特征进行排名,最终选出一最佳子集。

    说明:此处的算法为选择最佳特征的算法,选择结束后再进行模型评估。随着分类(或者回归)的学习器(评估器)的改变,最佳特征组合可能会改变。

参考:

F检验(ANOVA)

【机器学习】特征选择(Feature Selection)方法汇总

机器学习中,有哪些特征选择的工程方法?

基于互信息的特征选择方法杂谈

特征工程 | 相关系数、卡方检验与互信息法

卡方检验和卡方分布

菜菜的scikit-learn课堂 ——sklearn中的数据预处理和特征工程

学堂在线:数据挖掘:理论与算法,清华大学,袁博老师

你可能感兴趣的:(机器学习)