Filter

128 阅读2分钟

携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第2天,点击查看活动详情

特征选择:


本质:选取并删除冗杂和不相关特征,降低维度。通常与pca或lda结合使用,将高维空间的样本转换到低维空间,达到初步降维的目的,然后再通过特征选择来进一步降维。

 

 

作用:

  1. 提高泛化能力,减少过拟合

  2. 减少数据量,提高计算速度

  3. 增加了可视化的可能性

  4. 节省数据存储空间和减少输入数据带宽

  5. 减少冗余

  6. 减少与目标值相关性弱的特征,确定影响目标值的主要特征

  7. 增强了特征和特征值之间的理解,也就是一列数据只解释一个相对应的特征。

Removing features with low variance(过滤)

我们先举个例子,例如,如果某一特征的特征值分布是90%-95%为某一常数值a,其它特征值为另一与a数值差别不大的常数值b或者多个与a差别不大的数值,那么我们认为这样的特征对整个模型影响是十分有限的;如果某一特征值的分布超过95%,我们就可以认为该特征的作用基本可以忽略,如果某特征仅有一个特征值,那么该特征就无任何意义,必须删除。

上面例子的几种情况中,特征方差都十分小,这就说明小方差的特征由于其作用太过有限因此是可以考虑删除的。然而遗憾的是该方法只适合离散数据。

import numpy as np

import pandas as pd

from sklearn.feature_selection import VarianceThreshold

from scipy.stats import f

np.random.seed(4)

X = np.random.randint(6,8,(300,5))

X_fr=pd.DataFrame(X)

X_fr[X_fr[0]==6]=7

selector=VarianceThreshold(threshold=(0.05))

selector.fit_transform(X)#建议阈值为0.05左右

 

array([[7, 7, 7, 7],

       [7, 7, 7, 7],

       [7, 7, 7, 7],

       ...,

       [7, 7, 7, 7],

       [7, 7, 7, 7],

       [7, 7, 7, 6]])

selector.variances_

array([0.        , 0.21      , 0.20305556, 0.20728889, 0.2016    ])

Univariate feature selection

 

单变量特征选择的原理是分别单独的计算每个特征的某个统计指标,根据该指标来判断哪些特征重要,剔除那些不重要的特征。

通常对于分类问题(y离散),可采用:

    卡方检验,f_classif, mutual_info_classif,互信息

对于回归问题(y连续),可采用:

    皮尔森相关系数,f_regression, mutual_info_regression,最大信息系数,距离相关系数