一、递归特征消除
递归特征消除法(Recursive feature elimination):通过学习器返回的 coef_ 属性 或者 feature_importances_ 属性来获得每个特征的重要程度。 然后,从当前的特征集合中移除最不重要的特征。在特征集合上不断的重复递归这个步骤,直到最终达到所需要的特征数量为止。
1.1 sklearn.feature_selection 的 RFE 方法
使用 sklearn.feature_selection 的 RFE 方法对 随机森林分类器(RandomForestClassifier)中的特征进行选择。
from sklearn.feature_selection import RFE
# 加载随机森林分类器
from sklearn.ensemble import RandomForestClassifier
# 加载鸢尾花数据集
from sklearn.datasets import load_iris
# 进行模型的划分和选择
from sklearn import model_selection
# 加载数据集
iris = load_iris()
X, y = iris.data, iris.target
# 模型实例化
estimator = RandomForestClassifier()
# 特征选取,这里设置的特征选取个数是2
selector = RFE(estimator=estimator, n_features_to_select=2)
# 拟合数据
selector.fit_transform(X, y)
# 获取筛选的特征数据
{'筛选出来的最优特征是': list(selector.get_feature_names_out())}
1.2 sklearn.feature_selection 的 RFECV 方法
该方法通过通过交叉验证,让模型自主选择最优特征数据
from sklearn.feature_selection import RFECV
from sklearn.datasets import load_iris
# 加载鸢尾花数据集
iris = load_iris()
# 确定自变量
X = iris.data
# 确定因变量
y = iris.target
# 确定学习器
estimator = RandomForestClassifier()
# 实例化交叉验证
selector = RFECV(estimator=estimator, cv=3)
# 拟合数据
selector.fit(X, y)
# 选择的特征特殊
print("N_features %s" % selector.n_features_)
# 是否选择该特征的布尔值
print("Support is %s" % selector.support_)
# 输出最有特征字段
{'筛选出来的最优特征是': list(selector.get_feature_names_out())}
二、序列特征选择
序列特征选择算法:使用AIC或者BIC信息池(补充AIC或者BIC的信息) 1.前向选择:该过程从一个空的特性集合开始,并逐个添加最优特征到集合中。 2.向后消除:该过程从所有特征集开始。通过逐步删除集合中剩余的最差特征。 3.前向选择和后向消除的组合:将前向选择和后向消除方法进行组合,在每个步骤中,选择最佳特征,并从其余特征中消除最差的。
from sklearn.feature_selection import SequentialFeatureSelector
from sklearn.datasets import load_iris
# 加载鸢尾花数据集
iris = load_iris()
# 确定自变量
X = iris.data
# 确定因变量
y = iris.target
rfc = RandomForestClassifier()
# 进行前向选择或者后向选择 由参数 direction='forward' 确定
sfs = SequentialFeatureSelector(rfc, n_features_to_select=2, direction='forward')
sfs.fit(X, y)
# 输出最有特征字段
{'筛选出来的最优特征是': list(sfs.get_feature_names_out())}
进行前向特征选择还是后向特征选择,由参数 direction 确定。