(接上篇

  • <mark>1.13.3. 递归特征消除</mark>
    给定一个对特征进行权重分配的外部评估器(比如线性模型里面的系数),递归特征消除(RFE)***通过递归考虑越来越少的特征集来进行特征选择。首先,在初始化的特征集上面已经训练好的评估器要么通过coef_属性,要么通过feature_importances_属性获取每个特征的重要性。接着,最不重要的特征将从当前特征集中删除。然后会在修剪集(即刚才删除最不重要特征后的数据集)上递归地重复这个过程直到最终达到所需要的特征数量。

    RFECV则以交叉验证循环的方式执行RFE来找到最佳特征数量。
    示例

  • <mark>1.13.4. 使用SelectFromModel进行特征选择</mark>
    SelectFromModel是元转换器,即它能与拟合后任一具有coef_feature_importances_属性的评估器一起使用。如果这些特征相应的coef_feature_importances_值低于预设的threshold参数,那么这些特征会被认为是不重要的且会被移除。除了通过数值来指定阈值,还可以通过内置的启发式方法,使用字符串参数找到阈值。可用的启发式方法有“mean(平均数)”、“median(中位数)”以及像“0.1*mean”这样倍数的浮点数。同threshold标准结合的时候,可以使用max_features参数来设置选择特征数量。

    如何使用该方法请看下面的示例。
    示例

    <mark>1.13.4.1. 基于L1的特征选择</mark>

    使用L1范数/正则化惩罚的线性模型会得到稀疏的解:它们的许多系数都是零。当目标是减少与另一个分类器一起使用的数据维度时,可以将它们与feature_selection.SelectFromModel 方法一起使用来选择非零系数。特别是,可用于此目的的稀疏评估器有,用于回归的 linear_model.Lasso,以及用于分类的linear_model.LogisticRegressionsvm.LinearSVC

>>> 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)
>>> X_new = model.transform(X)
>>> X_new.shape
(150, 3)

对于SVM和逻辑回归,参数C控制稀疏性:C越小,选择的特征就越少。对于Lasso,alpha参数越高,选择的特征就越少。

示例

(未完待续。。。)