包裹式
主要思想是反复的构建模型(如SVM或者回归模型)然后选择最好的(或者最差的)特征(可以根据系数来选)
把选出来的特征选出来,然后在剩余的特征上重复这个过程,直到所有的特征都遍历过
这个过程特征被消除的次序就是特征的排序,因此这是一种寻找最优特征子集的贪心算法
from sklearn.svm import LinearSVC
from sklearn.datasets import load_iris
from sklearn.feature_selection import RFE
iris=load_iris()
x=iris.data
y=iris.target
estimator=LinearSVC()
selector=RFE(estimator=estimator,n_features_to_select=2)
selector.fit(x,y)
print('特征数:',selector.n_features_)
print('哪些特征被挑选出来了:',selector.support_)
print('特征评分:',selector.ranking_)#第二,第四个为1,所以挑选出来
#特征选择对预测性能的提升没有联系
特征数: 2
哪些特征被挑选出来了: [False True False True]
特征评分: [3 1 2 1]
嵌入式特征选择
在嵌入式特征选择中,特征选择算法本身作为组成部分嵌入到学习算法里,最典型的就是决策树算法,如Quinlan的ID3,C4.5以及Breiman的CART算法等,决策树算法在树增长过程的每个递归步都必须选择一个特征,将样本划分成较小的子集,选择特征的一句通常是划分后子节点的纯度,划分后子节点越纯,则说明划分效果越好,可见决策树生成的过程也就是特征选择的过程。