python:机器学习特征选择之包裹法代码实现

一、递归特征消除

        递归特征消除法(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 确定。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值