特征选取
概念:
将数据集中与要预测的值没有因果关系或者因果关系不大,或者冗余的特征去除,选取出对要预测的值关系密切的特征。
好处:
性能提升/提高模型的准确率
sklearn的feature_selection模块
简单特征选取
根据单个特征的在整个数据集中的方差直接选择
当某个特征在样例中方差越小时,也就是说它的一致性越高,对于整个的分类作用也就越小,当它小于 threshold时,我们就可以去除这个特征。
在sklearn中用来 VarianceThreshold 来提取。
1
2
3
4
5
6
7
8
9
10
11
12
13
14from sklearn.feature_selection import VarianceThreshold
#定义特征矩阵(X)
X = [[0, 0, 1], [0, 1, 0], [1, 0, 0], [0, 1, 1], [0, 1, 0], [0, 1, 1]]
#如果一个特征出现的概率小于0.8,则删除其(注意:threshold是方差0.8是概率。根据 variance = p * (1 - p)计算)
sel = VarianceThreshold(threshold=(0.8 * (1 - 0.8)))
sel_X = sel.fit_transform(X)
print(sel_X)
[[0 1],
[1 0],
[0 0],
[1 1],
[1 0],
[1 1]]单变量特征选择:Univariate feature selection
上面的根据方差来选择特征显然太naive了,在单变量特征选择中,我们通过一些统计度量方法来选择。
SelectKBest:从特征值中选取K个最好的特征SelectPercentile:从特征值中选取一定比例的特征对每个变量使用常用的单变量统计测试: 假阳性率(false positive rate)
SelectFpr,伪发现率(false discovry rate)SelectFdr,或者族系误差(family wise error)SelectFwe。统计度量方法根据预测值可以分为两类:
回归:
f_regression,mutual_info_regression分类:
chi2,f_classif,mutual_info_classif以SelectKBest为例:
1
2
3
4
5
6
7
8from sklearn.feature_selection import SelectKBest,f_classif
from sklearn import datasets
#load data
iris = datasets.load_iris()
X,Y = iris.data,iris.target
# 使用SelectKBest函数,统计度量方法为f_classif,选取3个特征值
Ksel = SelectKBest(f_classif, k=3).fit_transform(X, Y)
print(Ksel.shape)OutPut:
1
(150, 3)
//在接着介绍sklearn的feature_selection模块前,先介绍一下有关特征选取的常用的两个过程。
递归式特征消除:Univariate feature selection
分两个部分介绍:
- 子集搜索:递归式特征消除选择使用一个额外的估计器(这个估计器必须可以对每个特征赋予一定的权重)
- 子集评价:通过
coef_属性 或者feature_importances_属性获得每个特征的重要性,注意先归一化,去除掉最不重要的属性,知道满足要求。
提供的recursive feature elimination (RFE)函数:
- `RFE`:自动寻找到要求到的feature数量。
- `RFECV`:在一个交叉验证循环中自动找到最优的feature数量。
SelectFromModel:使用模型选取特征
总的来说类似上面的递归式特征消除,不过在子集评价中不是去掉最不重要的特征,而是去掉所有coef_属性 或者feature_importances_属性低于阀值的特征。
基于L1正则选取。
线性模型的L1正则会产生稀疏解,可以用此选取特征。可以用于此目的的稀疏评估器有用于回归的
linear_model.Lasso, 以及用于分类的linear_model.LogisticRegression和svm.LinearSVC在 SVM 和逻辑回归中,参数 C 是用来控制稀疏性的:小的 C 会导致少的特征被选择。使用 Lasso,alpha 的值越大,越少的特征会被选择。
Tree-based feature selection(基于树的特征选取)
树可以产生每个feature的重要性,因此也可用于特征选取,与SelectFromModel结合使用。
##