sklearn入门——特征选择

本文详细介绍了机器学习预处理阶段的特征选择方法——过滤法,包括方差过滤、卡方过滤、F检验和互信息法。通过方差阈值筛选特征,再利用卡方、F检验或互信息评估特征与标签的相关性,选择相关性高的特征。此外,还提及了嵌入法和包装法,如RFE,它们在模型训练过程中选择特征。这些方法有助于降低计算成本,提升模型性能。
摘要由CSDN通过智能技术生成
过滤法

过滤法是在机器学习训练之前进行的数据预处理,根据各种统计检验指标筛选出较好的特征子集。

方差过滤
  • VarianceThreshold类
    通过特征的方差来筛选特征的类。有些特征的方差很小,所以要首先消除方差为0的特征。其中的参数threshold,表示方差的阈值,消除方差小于阈值的特征,默认值是0.
    相关操作及注释:
import pandas as pd
import numpy as np
from sklearn.feature_selection import VarianceThreshold

data = pd.read_csv()
X = data.iloc[:,1:]# 取出特征
Y = data.iloc[:,0]# 取出标签
selector = VarianceThreshold() #实例化
X_var0 = selector.fit_transform(X) # 和前边学的操作一样

# X.var()计算方差,结果包括索引和数值
np.sort(X.var().values)[100]
# 当特征是二分类时,方差就是p(1-p)

对于KNN、SVM、神经网络等算法,需要遍历所有特征,计算量很大,过滤法过滤后的数据就可以降低这些算法的计算成本。而随机森林是随机选择特征进行分支。

  • 参数threshold选择
    经验,尝试。通常用阈值为0或者阈值很小的方差来过滤,先消除明显用不到的特征。
相关性过滤

方差过滤后,希望挑选出与标签相关且有意义的特征来为我们提供大量信息。在sklearn中评判相关性的有:卡方、F检验、互信息

  • 卡方过滤
    卡方过滤是专门针对离散型标签(即分类问题)的相关性过滤。卡方检验类为:feature_selectio.chi2,可以计算每个非负特征和标签之间的卡方统计量,并按照卡方统计量由高到低为特征排序。然后可以结合feature_selection.SelectKBest来获取前k个相关的特征。
    相关操作:
from sklearn.ensemble import RandomForestClassifier as RFC
from sklearn.model_selection import cross_val_score
from sklearn.feature_selection import SelectKBest# 选出前k个评分最高的特征的类
from sklearn.feature_selection import chi2 # 计算每个非负特征和标签之间的卡方统计量

X_fschi = SelectKBest(chi2, k=356).fit_transform(X_fsvar, y)# 和其他操作一样都用fit等操作
cross_val_score(RFC(n_estimators=10,random_state=0),X_fschi,y,cv=5).mean()# 交叉验证一下

调参时可以根据统计学中的相关性检验来调参,就是让两者之间的相关性越强越好,看p值,p值越小越好。
可以chi2训练结果中返回。

	chival, pval = chi2(X_fsvar, y)
  • F检验
    F检验,又称ANOVA,方差齐性检验,用来捕捉每个特征和标签之间的线性关系的过滤方法,既可以做回归,又可以做分类。在sklearn中有feature_selection.f_classiffeature_selection.f_regression两种。同样,要和SelectKBest同时使用来获取前k个特征。F检验和卡方检验结果可能相差不大。
    相关操作:
from sklearn.feature_selection import f_classif
F, p = f_classif(X_fsvar,y)
F
  • 互信息法
    互信息可以获取每个特征和标签之间的任意关系。既可以做回归,也可以做分类。分别为:feature_selection.mutual_info_classifmutual_info_regression
    互信息返回是两个量之间的估计,在0-1之间,为0表示两个变量独立,为1则表示两个变量完全相关。
    相关操作也是fit啥的都一样。
嵌入法

嵌入法是一种让算法自己决定使用那些特征的方法,特征选择和训练同时进行。在使用嵌入法时,我们先使用某些机器学习的算法和模型进行训练,得到各个特征的权值系数,根据权值系数从大到小选择特征。这些权值系数往往代表了特征对于模型的某种贡献或某种重要性,比如决策树和树的集成模型中的feature_importances_属性,可以列出各个特征对树的建立的贡献,我们就可以基于这种贡献的评估,找出对模型建立最有用的特征。
嵌入法的类:feature_selection.SelectFromModel
SelectFromModel是一个元变换器,可以与任何在拟合后具有coef_,feature_importances_属性或参数中可选惩
罚项的评估器一起使用(比如随机森林和树模型就具有属性feature_importances_,逻辑回归就带有l1和l2惩罚
项,线性支持向量机也支持l2惩罚)。
在这里插入图片描述

包装法

包装法也是一个特征选择和算法训练同时进行的方法,与嵌入法十分相似,它也是依赖于算法自身的选择,比如coef_属性或feature_importances_属性来完成特征选择。但不同的是,我们往往使用一个目标函数作为黑盒来帮助我们选取特征,而不是自己输入某个评估指标或统计量的阈值。这个算法是专用的数据挖掘算法,常见的是递归特征消除法(RFE)。它是一种贪婪的优化算法,旨在找到性能最佳的特征子集。 它反复创建模型,并在每次迭代时保留最佳特征或剔除最差特征,下一次迭代时,它会使用上一次建模中没有被选中的特征来构建下一个模型,直到所有特征都耗尽为止。 然后,它根据自己保留或
剔除特征的顺序来对特征进行排名,最终选出一个最佳子集。

  • feature_selection.RFE
    class sklearn.feature_selection.RFE (estimator, n_features_to_select=None, step=1, verbose=0)
    参数estimator是需要填写的实例化后的评估器,n_features_to_select是想要选择的特征个数,step表示每次迭代中希望移除的特征个数。除此之外,RFE类有两个很重要的属性,.support_:返回所有的特征的是否最后被选中的布尔矩阵,以及.ranking_返回特征的按数次迭代中综合重要性的排名。类feature_selection.RFECV会在交叉验证循环中执行RFE以找到最佳数量的特征,增加参数cv,其他用法都和RFE一模一样。
    也是fit、transform等操作进行操作。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

up-to-star

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值