sklearn.feature_selection.SelectFromModel 特征重要性选择(嵌入法的一种)

嵌入式特征选择在学习器训练过程中自动地进行特征选择。嵌入式选择最常用的是L1正则化与L2正则化。

SelectFromModel是一个元变压器,可与拟合后具有coef_或feature_importances_属性的任何估算器一起使用。如果相应的coef_或feature_importances_值低于提供的 threshold参数,则认为这些功能不重要并已删除 。除了通过数字指定阈值之外,还有一些内置的启发式方法,可使用字符串参数查找阈值。可用的试探法是“平均值”,“中位数”和浮点数的倍数,例如“ 0.1 *平均值”。与threshold标准结合使用时,可以使用 max_features参数设置对要选择的要素数量的限制

基于L1-特征选择

受L1范式惩罚的线性模型的稀疏解:其许多估计系数为零。当目标是减少要与另一个分类器一起使用的数据的维数时,可以将它们与feature_selection.SelectFromModel 选择非零系数一起使用。特别地,用于此目的的稀疏估计量是linear_model.Lasso用于回归,的linear_model.LogisticRegression和svm.LinearSVC 用于分类的,对于SVM和logistic回归,参数C控制稀疏度:C越小,选择的特征就越少。使用套索,alpha参数越高,选择的特征就越少,为了很好地选择alpha ,只要满足某些特定条件,套索就可以使用很少的观测值完全恢复非零变量的确切集合。特别是,样本数量应为“足够大”,否则L1模型将随机执行,其中“足够大”取决于非零系数的数量,特征数量的对数,噪声量,非零系数的最小绝对值以及设计矩阵X的结构。此外,设计矩阵必须显示某些特定的属性,例如,不具有太大的相关性。没有一般规则来选择用于恢复非零系数的alpha参数。它可以通过交叉验证(LassoCV或LassoLarsCV)进行设置,尽管这可能会导致惩罚模型不足:包括少量不相关的变量不会损害预测得分。LassoLarsIC相反,BIC()倾向于设置较高的alpha值。

 基于树的特征选择

基于树的估计器(请参阅sklearn.tree模块和模块中的树林sklearn.ensemble)可用于计算基于杂质的特征重要性,而反过来又可用于丢弃不相关的特征(当与sklearn.feature_selection.SelectFromModel 元变压器结合使用时)

函数用法:

 

class sklearn.feature_selection.SelectFromModel(estimator, *, threshold=None, prefit=False, norm_order=1, max_features=None)

 

可选参数:

(1)estimator: object,用来构建变压器的基本估算器。既可以是拟合的(如果prefit设置为True),也可以是不拟合的估计量。拟合后,估计量必须具有 feature_importances_或coef_属性
(2)threshold: str, float, optional default None,用于特征选择的阈值。保留重要性更高或相等的要素,而其他要素则被丢弃。如果为“中位数”(分别为“均值”),则该threshold值为特征重要性的中位数(分别为均值)。也可以使用缩放因子(例如,“ 1.25 *平均值”)。如果为None(无),并且估计器的参数惩罚显式或隐式设置为l1(例如Lasso),则使用的阈值为1e-5。否则,默认情况下使用“平均值”
(3)prefit: bool, default False,预设模型是否期望直接传递给构造函数。如果为True,transform必须直接调用和SelectFromModel不能使用cross_val_score, GridSearchCV而且克隆估计类似的实用程序。否则,使用训练模型fit,然后transform进行特征选择。
(4)norm_order: 非零 int, inf, -inf, default 1,在估算器threshold的coef_属性为维度2 的情况下,用于过滤以下系数矢量的范数的顺序 ,正则化
(5)max_features:int or None, optional,要选择的最大功能数。若要仅基于选择max_features,请设置threshold=-np.inf

属性:

estimator_:一个估算器,用来建立变压器的基本估计器。只有当一个不适合的估计器传递给SelectFromModel时,才会存储这个值,即当prefit为False时。
threshold_:float,用于特征选择的阈值

方法:

fit(X [,y])适合SelectFromModel元变压器。
fit_transform(X [,y])适合数据,然后对其进行转换。
get_params([deep])获取此估计量的参数。
get_support([index])获取所选特征的掩码或整数索引
inverse_transform(X)反向转换操作
partial_fit(X [,y])仅将SelectFromModel元变压器安装一次。
set_params(**参数)设置此估算器的参数。
transform(X)将X缩小为选定的特征。

 from sklearn.svm import LinearSVC
 from sklearn.datasets import load_iris
 from sklearn.feature_selection import SelectFromModel
 X, y = load_iris(return_X_y=True)
 X.shape
# (150, 4)
 lsvc = LinearSVC(C=0.01, penalty="l1", dual=False).fit(X, y)
 model = SelectFromModel(lsvc, prefit=True)  #已经fit过了,所以必须带上参数prefit
 X_new = model.transform(X)   
 X_new.shape
 #(150, 3)

 

posted on 2020-08-31 12:22  小小喽啰  阅读(3836)  评论(0编辑  收藏  举报