- Python机器学习算法与实战
- 孙玉林 余本国
- 1118字
- 2025-02-18 02:36:38
3.3 特征选择
特征选择是使用某些统计方法,从数据中选择出有用的特征,把数据中无用的特征抛弃,该方法不会产生新的特征,常用的方式有基于统计方法的特征选择、利用递归消除法选择有用的特征、利用机器学习算法选择重要的特征等。本节将以一个关于酒的多分类数据集为例,介绍相关特征选择的使用。数据准备的程序如下:

从输出结果可以知道,该数据集有178个样本,13个特征,包含3类数据,每类分别包含59、71和48个样本。
3.3.1 基于统计方法
基于统计方法的特征选择,常用的方法有剔除低方差的特征;使用卡方值、互信息、方差分析等方式选择K个特征。下面介绍如何使用Python完成这些方式的特征选择。
剔除低方差的特征可以通过sklearn.feature_selection模块的VarianceThreshold来完成,相关程序如下:

运行程序后,从输出结果可以发现只保留了8个方差大于0.5的特征,可以通过下面的方式确定哪些特征被保留。在输出结果中True表示对应的特征被保留。

sklearn.feature_selection模块提供了SelectKBest方式,其可以通过相关统计信息,从数据集中选择指定数目的特征数量,其中利用方差分析的F统计量选择5个特征的程序如下:


使用SelectKBest,利用卡方值选择5个特征的程序如下:

使用SelectKBest,利用互信息选择5个特征的程序如下:

针对回归问题的K个最高得分特征的选择问题,可以使用f_regression(回归分析的F统计量)、mutual_info_regression(回归分析的互信息)等统计量进行特征选择。
3.3.2 基于递归消除特征法
递归消除特征法是使用一个基模型进行多轮训练,每轮训练后,消除若干不重要的特征,再基于新的特征集进行下一轮训练。它使用模型精度来识别哪些属性(或属性组合)对预测目标属性的贡献最大,然后消除无用的特征。sklearn中提供了两种递归消除特征法,分别是递归消除特征法(RFE)和交叉递归消除特征法(RFECV)。
使用随机森林分类器作为基模型,利用递归消除特征法从数据中选择9个最佳特征,程序如下:

运行上面的程序后获得的数据集rfe_wine_x有9个特征,并且可以使用rfe.support_输出被选中的特征,在输出中True表示对应的特征被选中。
递归消除特征法还可以使用交叉验证的方式进行特征选择。下面的程序中,仍然使用随机森林作为基模型,然后使用5折交叉验证进行递归消除特征法的应用,同时利用参数min_features_to_select=5指定要选择的最少特征数量。

运行程序后,从输出结果可以发现选择了12个特征,只剔除了一个特征。
3.3.3 基于机器学习的方法
sklearn.feature_selection模块的SelectFromModel方式,提供了一种通过模型进行特征选择的方法,因此可以使用该方法进行基于机器学习的特征选择。首先使用该方法,利用随机森林分类器进行特征选择,程序如下:

运行上面的程序后可以发现,数据中的6个特征被选择出来。
SelectFromModel利用基础模型进行特征选择时,如果基础模型可以使用l1范数,则可以利用l1范数进行选择。利用支持向量机分类器,借助l1范数进行特征选择的程序如下:

运行程序后,从输出结果可以发现数据集中的8个特征被选择出来。