数据挖掘:特征工程——特征提取与选择( 六 )


相关系数计算速度快,这在处理大规模数据的时候很重要 。相关系数的取值区间是[-1,1],而MIC和距离相关系数都是[0,1] 。这个特点使相关系数能够表征更丰富的关系,符号表示关系的正负,绝对值能够表示强度 。当然,相关性有效的前提是两个变量的变化关系是单调的 。另外的两种相关系数也可以做参考 。

数据挖掘:特征工程——特征提取与选择

文章插图
以下内容主要出自这篇文章基于模型的特征选择详解 ( & )
5.2 包裹法
相比于过滤式特征选择不考虑后续学习器,包裹式特征选择直接把最终将要使用的学习器的性能作为特征子集的评价原则 。其目的就是为给定学习器选择最有利于其性能、量身定做的特征子集 。
建立在基于模型的特征选择方法基础之上的,例如回归和SVM,在不同的子集上建立模型,然后汇总最终确定特征得分 。
5.2.1 稳定性选择 ( )
在的官方文档中,该方法叫做随机稀疏模型 ():基于L1的稀疏模型的局限在于,当面对一组互相关的特征时,它们只会选择其中一项特征 。为了减轻该问题的影响可以使用随机化技术,通过多次重新估计稀疏模型来扰乱设计矩阵,或通过多次下采样数据来统计一个给定的回归量被选中的次数 。
稳定性选择是一种基于 二次抽样 和 选择算法 相结合较新的方法,选择算法可以是回归、SVM或其他类似的方法 。它的主要思想是在不同的数据子集和特征子集上运行特征选择算法,不断的重复,最终汇总特征选择结果,比如可以统计某个特征被认为是重要特征的频率(被选为重要特征的次数除以它所在的子集被测试的次数) 。理想情况下,重要特征的得分会接近100% 。稍微弱一点的特征得分会是非0的数,而最无用的特征得分将会接近于0 。
在 随机lasso() 和 随机逻辑回归() 中有对稳定性选择的实现 。
from sklearn.linear_model import RandomizedLassofrom sklearn.datasets import load_bostonboston = load_boston()#using the Boston housing data. #Data gets scaled automatically by sklearn's implementationX = boston["data"]Y = boston["target"]names = boston["feature_names"]rlasso = RandomizedLasso(alpha=0.025)rlasso.fit(X, Y)print("Features sorted by their score:")print(sorted(zip(map(lambda x: format(x, '.4f'), rlasso.scores_), names), reverse=True))Features sorted by their score:[('1.0000', 'RM'), ('1.0000', 'PTRATIO'), ('1.0000', 'LSTAT'), ('0.6450', 'CHAS'), ('0.6100', 'B'), ('0.3950', 'CRIM'), ('0.3800', 'TAX'), ('0.2250', 'DIS'), ('0.2000', 'NOX'), ('0.1150', 'INDUS'), ('0.0750', 'ZN'), ('0.0200', 'RAD'), ('0.0100', 'AGE')]
在上边这个例子当中,最高的3个特征得分是1.0,这表示他们总会被选作有用的特征(当然,得分会受到正则化参数alpha的影响,但是的随机lasso能够自动选择最优的alpha) 。接下来的几个特征得分就开始下降,但是下降的不是特别急剧,这跟纯lasso的方法和随机森林的结果不一样 。能够看出稳定性选择对于克服过拟合和对数据理解来说都是有帮助的:总的来说,好的特征不会因为有相似的特征、关联特征而得分为0,这跟Lasso是不同的 。对于特征选择任务,在许多数据集和环境下,稳定性选择往往是性能最好的方法之一 。
5.2.2 递归特征消除(RFE)
递归消除特征法使用一个基模型来进行多轮训练,每轮训练后,移除若干权值系数的特征,再基于新的特征集进行下一轮训练 。