- 首先声明,本人个人观点,仅供交流。
- 本人欠专业人士,并不了解显示实践中的特征工程。
特征选择是一个重要的数据预处理过程,获得数据之后要先进行特征选择然后再训练模型。主要作用:1、降维 2、去除不相关特征。
特征选择方法包含:子集搜索和子集评价两个问题。
子集搜索包含前向搜索、后向搜索、双向搜索等。
子集评价方法包含:信息增益,交叉熵,相关性,余弦相似度等评级准则。
两者结合起来就是特征选择方法,例如前向搜索与信息熵结合,显然与决策树很相似。
常见特征选择有三类方法:过滤式(filter),包裹式(wrapper)和嵌入式(embedding).————见周志华老师《机器学习》11章。
1. 过滤式(filter)
过滤式方法先对数据集进行特征选择,再训练学习器。两者分裂开来。Relief是一种著名的过滤式特征选择方法,设计了一种相关统计量来度量特征重要性。
sklearn模块中有一些特征选择的方法。
(1)* Removing features with low variance*
特征筛选的时候,对于特征全0,全1 ,多数1,多数0的要删去。利用sklearn中模块,可如下操作(个人认为属于过滤式的)。
代码如下:
from sklearn.feature_selection import VarianceThreshold
X = [[0, 0, 1], [0, 1, 0], [1, 0, 0], [0, 1, 1], [0, 1, 0], [0, 1, 1]]
sel = VarianceThreshold(threshold=(.8 * (1 - .8))) #选择方差大于某个数的特征。
sel.fit_transform(X)
array([[0, 1],
[1, 0],
[0, 0],
[1, 1],
[1, 0],
[1, 1]])
(2)利用单变量特征选择(统计测试方法)。
Univariate feature selection works by selecting the best features based on univariate statistical tests. It can be seen as a preprocessing step to an estimator. Scikit-learn exposes feature selection routines as objects that implement the transform method:
SelectKBest选择排名排在前n个的变量
SelectPercentile 选择排名排在前n%的变量
其他指标: false positive rate SelectFpr, false discovery rate SelectFdr, or family wise error SelectFwe 和 GenericUnivariateSelect。
对于regression问题:用f_regression函数。
对于classification问题:用chi2或者f_classif函数。
例如:利用 F-test for feature scoring
We use the default selection function: the 10% most significant features**
代码来源
print(__doc__)
import<