1.选择合适的特征
特征集合有时会很大,在尝试降维之前,有必要用特征工程的方法选择较为重要的特征集合。
最简单的方法就是方差筛选。方差越大的特征,认为特征越重要。方差较小,比如小于1,认为特征可能对算法没什么作用。最极端的,特征方差为0,即所有的样本在该特征的取值都是一样的,那么它对模型训练没有任何作用,可以直接舍弃。在实际应用中,我们指定一个方差阈值,当方差小于这个阈值的特征会被我们筛掉。sklearn中的VarianceThreshold类可以方便完成这个工作。
特征选择方法有很多,一般分为三类:
第一类过滤法比较简单,它按照特征的发散性或者相关性指标对各个特征进行评分,设定评分阈值或者待选择阈值的个数,选择合适的特征。上面提到的方差筛选就是过滤法的一种。
第二类是包装法,根据目标函数,通常是预测效果评分,每次选择特征部分特征,或者排除部分特征。
第三类嵌入法稍微复杂一点,它先使用机器学习算法和模型进行训练,得到各个特征的权值系数,根据权值系数从大到小来选择特征。类似过滤法,但是它是通过机器学习训练来确定特征的优劣,而不是直接从特征的一些统计学指标来确定特征的优劣。
1.1过滤法选择特征
第一个方差筛选。
第二个可以使用相关系数。这个主要用于输出连续值的监督学习算法中,我们分别计算所有训练集中各个特征与输出值之间的相关系数,设定一个阈值,选择相关系数较大的部分特征。
第三个假设检验。
比如卡方检验。卡方检验可以检验某个特征分布和输出值分布之间的相关性。个人觉得它比粗暴的方差法好用。在sklearn中,可以使用chi2类来做卡方检验得到所有特征的卡方值与显著性水平P临界值,我们可以给定卡方值阈值,选择卡方值较大的部分特征。
除了卡方检验,我们还可以使用F检验和t检验,它们都是使用假设检验的方法,只是使用的统计分布不是卡方分布,而是F分布和t分布而已。在sklearn中,有F检验的函数f_classif和f_regression,分别在分类和回归特征选择时使用。
第四个是互信息。即从信息熵的角度分析各个特征和输出值之间的关系评分。互信息越大,说明该特征与输出值之间的相关性越大,月需要保留。在sklearn中,可以使用 mutual_info_classif(分类)和 mutual_info_regression(回归)来计算各个输入特征和输出值之间的互信息。
以上就是过滤法的主要方法,个人经验,在没什么思路的时候,可以优先使用卡方检验和互信息来做特征选择。
1.2包装法选择特征
包装法解决思路没有过滤法这么直接,它会选择一个目标函数来一步步的筛选特征。
最常用的包装法是递归消除特征法(recursive feature elimination,简称RFE)。递归消除特征法使用一个机器学习模型来进行多轮训练,每轮训练后,消除若干权值系数的对应的特征,再基于新的特征级进行下一轮训练。在sklearn中,可以使用RFE函数来选择特征。
1.3嵌入法选择特征
2.寻找高级特征
来自:刘建平