sklearn中文链接:/0.21.3/14/
sklearn官网链接:https://scikit-/stable/modules/classes.html?highlight=feature_selection#module-sklearn.feature_selection
本模块主要是对样本集进行feature_selection(特征选择)和dimensionality reduction(降温),这将会提高估计器的准确度或者增强它们在高维数据集上的性能
API
SelectKBest
sklearn.feature_selection.SelectKBest(score_func=<function f_classif>, *, k=10)
根据k次中最高的分数选择特征集,即移除那些除了评分最高的 K 个特征之外的所有特征
score_fun
一个接受array类型X,y的函数,return (scores,pvalues)或者只返回scores.默认的函数只作用于分类任务中
scores:是评测分数
pvalues:暂时不知??k:int or “all”,default=10
选择最好的k个特征集,"all"是
示例
使用chi2作为score_fun
>>> from sklearn.datasets import load_digits>>> from sklearn.feature_selection import SelectKBest, chi2>>> X, y = load_digits(return_X_y=True)>>> X.shape(1797, 64)>>> X_new = SelectKBest(chi2, k=20).fit_transform(X, y)>>> X_new.shape(1797, 20)
SelectKBest官方链接
chi2
sklearn.feature_selection.chi2(X, y)
VarianceThreshold
移除所有那些方差不满足一些阈值的特征默认情况下,它将会移除所有的零方差特征,即那些在所有的样本上的取值均不变的特征
sklearn.feature_selection.VarianceThreshold(threshold=0.0)
这个算法只是对features(X),并没有直接关系到outputs(Y),所以可以应用到无监督学习
Notes:允许input中有NaN
示例
假如我们有一个特征是布尔值的数据集,我们要移除那些在整个数据集中特征值为0或者为1的比例超过80%的特征。布尔特征是伯努利随机变量,变量的方差是p(1−p)p(1-p)p(1−p)
>>> from sklearn.feature_selection import VarianceThreshold>>> X = [[0, 0, 1], [0, 1, 0], [1, 0, 0], [0, 1, 1], [0, 1, 0], [0, 1, 1]]>>> sel = VarianceThreshold(threshold=(.8 * (1 - .8)))#先fit参数X,然后transform X>>> sel.fit_transform(X)array([[0, 1],[1, 0],[0, 0],[1, 1],[1, 0],[1, 1]])# 默认情况是去除方差为0的特征列>>> X = [[0, 2, 0, 3], [0, 1, 4, 3], [0, 1, 1, 3]]>>> selector = VarianceThreshold()>>> selector.fit_transform(X)array([[2, 0],[1, 4],[1, 1]])
正如预期那样,其移除了第一列
RFE
即Recursive Feature Elimination,递归式特征消除
给定一个外部的估计器,可以对特征赋予一定的权重(比如,线性模型的相关系数),通过考虑越来越小的特征集合来递归的选择特征。
首先,评估其在初始的特征及和上面训练并且每一个特征的重要程度是通过一个coef_属性或者feature_importance_属性来获得。
然后,从当前的特征集中删除最不重要的特征。在经过修剪的集合上递归地重复这个过程,直到最终达到需要选择的特征数量
sklearn.feature_selection.RFE(estimator, *, n_features_to_select=None, step=1, verbose=0)
参数
estimator
n_features_to_select
step
verbose
SelectFromModel
是一个meta-transformer(元转换器),它可以用来处理任何带有coef_或feature_importance_属性的训练之后的评估器
sklearn.feature_selection.SelectFromModel(estimator, *, threshold=None, prefit=False, norm_order=1, max_features=None)