欢迎关注”生信修炼手册”!
Feature Engineering, 称之为特征工程,属于机器学习中数据预处理阶段的重要内容,细分为以下两大类内容
1. Feature Extraction, 特征提取,从文本,图像等原始数据中提取可以用于建模的特征
2. Feature Selection, 特征选择,从原始数据中的多维特征中筛选最优特征自己,达到降维,提升模型准确性,减少运行时间等效果
特征选择的策略可以分为以下3大类
1. Filter
根据某项指标的阈值对特征进行过滤,常见的有以下三种方法
1. 方差
2. 相关系数
3. 卡方检验
方差表征数据的发散程度,方差越大,数据分布越发散。对于分类数据而言,特征对应的数据分布越集中,对分类器的贡献越小,所以会删除方差较小的特征。在scikit-learn中,可以通过如下方式指定方差阈值,删除低方差对应的特征
>>> 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]])
相关系数表征两个连续性变量之间的线性相关性,比如经典的pearson相关系数,适用于两个服从高斯分布的连续变量,相关系数越接近0,两个变量的相关性越弱。对于回归类问题,可以根据自变量与因变量的相关性,去除相关系数低的特征。
卡方检验适用于两个离散型变量之间的关联程度,可以用于筛选分类问题中的离散自变量。
2. Wrapper
封装类的方法是将特征选择和机器学习模型合并到一起来考虑,通过迭代使用不同的特征组合来训练机器学习的模型,根据模型的效果来筛选对应的特征。根据迭代的方式,分为以下3类
1. 前向选择法,放入模型的特征依次增多,每次循环放入能最大限度提升模型效果的特征,直到任何特征都不能提升模型表现
2. 后向选择法,与前向选择法相反,第一次循环就放入所有特征,然后每次循环,剔除最不显著的特征,直到模型收敛
在实践中,最常用的是递归特征消除法,全称如下
recursive feature elimination
简称RFE,策略上属于后向选择,通过递归逐步减少特征来进行筛选。首先,采用所有特征进行训练,训练完成后每个特征对应一个权重,然后去掉权重最小的特征,用剩余的特征在进行训练,重复上述步骤,直到剩余的特征数量达到所需的特征数量。在scikit-learn中,使用RFE算法的代码如下
>>> from sklearn.datasets import make_friedman1
>>> from sklearn.feature_selection import RFE
>>> from sklearn.svm import SVR
>>> X, y = make_friedman1(n_samples=50, n_features=10, random_state=0)
>>> estimator = SVR(kernel="linear")
>>> selector = RFE(estimator, n_features_to_select=5, step=1)
>>> selector = selector.fit(X, y)
>>> selector.support_
ar