(接上篇)
-
<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
参数来设置选择特征数量。如何使用该方法请看下面的示例。
示例:- 使用SelectFromModel和LassoCV进行特征选择:从事先不知道阈值的糖尿病数据集中选择最重要的两个特征。
<mark>1.13.4.1. 基于L1的特征选择</mark>
使用L1范数/正则化惩罚的线性模型会得到稀疏的解:它们的许多系数都是零。当目标是减少与另一个分类器一起使用的数据维度时,可以将它们与feature_selection.SelectFromModel 方法一起使用来选择非零系数。特别是,可用于此目的的稀疏评估器有,用于回归的 linear_model.Lasso,以及用于分类的linear_model.LogisticRegression和svm.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参数越高,选择的特征就越少。
示例:
- 使用稀疏特征对文本文档进行分类:比较不同的文档分类算法,包括基于L1的特征选择。
(未完待续。。。)