3种特征选择
Filter
过滤法,按照发散性或者相关性对各个特征进行评分,设定阈值或者待选择阈值的个数,选择特征。
(先对数据集进行特征选择,然后再训练学习器)
Wrapper
包装法,根据目标函数(通常是预测效果评分),每次选择若干特征,或者排除若干特征。
(给定学习器选择最有利于其性能、“量身定做”的特征子集)
Embedded
嵌入法,先使用某些机器学习的算法和模型进行训练,得到各个特征的权值系数,根据系数从大到小选择特征。类似于Filter方法,但是是通过训练来确定特征的优劣。
(将特征选择过程与学习器训练过程融为一体,两者在同一个优化过程中完成,即在学习器训练过程中自动地进行了特征选择)
特征选择的功能
①减少特征数量、降维,使模型泛化能力更强,减少过拟合。
②增强对特征和特征值之间的理解。
一、Filter
1、删除低方差特征 Removing features with low variance
假设某特征的特征值只有0和1,并且在所有输入样本中,95%的实例的该特征取值都是1,那就可以认为这个特征作用不大。如果100%都是1,那这个特征就没意义了,可以对其进行删除。
这种方法简单但不实用。
假设我们想要删除 超过80%的样本数都是0或都是1(假设是boolean features) 的所有特征,由于boolean features是bernoulli随机变量,所以方差为Var[X] = p(1-p),所以我们可以使用阈值0.8*(1-0.8):
VarianceThreshold删除了第一列,这列包含0的概率 p=5/6>0.8
2、单变量特征选择 Univariate feature selection
单变量特征选择的原理是分别单独的计算每个变量的某个统计指标,根据该指标来判断哪些指标重要,剔除那些不重要的指标。
这种方法比较简单,易于运行,易于理解,通常对于理解数据有较好的效果(但对特征优化、提高泛化能力来说不一定有效);这种方法有许多改进的版本、变种。
Scikit-learn
执行transform
方法作特征选择。
SelectKBest
删除除k个最高分数的特征外的所有特征SelectPercentile
删除除最高分位数特征外的所有特征- 使用普遍的单变量统计检验选择特征:假阳性率(false positive rate)
SelectFpr
, 假发现率(false discovery rate)SelectFdr
, 或族系误差率SelectFwe
GenericUnivariateSelect
用一个可配置策略作单变量特征选择。它可以使用超参数搜索估计量选择最好的策略。
将特征输入到评分函数,返回一个单变量的f_score(F检验的值)或p-values(P值,假设检验中的一个标准,P-value用来和显著性水平作比较),注意SelectKBest 和 SelectPercentile只有得分,没有p-value。
对于分类问题(y离散),可采用:
卡方检验,f_classif, mutual_info_classif,互信息
对于回归问题(y连续),可采用:
皮尔森相关系数&#