我是靠谱客的博主 含蓄板栗,最近开发中收集的这篇文章主要介绍sklearn入门——特征选择,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

过滤法

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

方差过滤
  • 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等操作进行操作。

最后

以上就是含蓄板栗为你收集整理的sklearn入门——特征选择的全部内容,希望文章能够帮你解决sklearn入门——特征选择所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(67)

评论列表共有 0 条评论

立即
投稿
返回
顶部