选择合适的特征
- 预选出特征集:可以询问该领域懂业务的专家,让他们给一些建议。较大影响的和较小影响的特征都选入候选集。
过滤法选择特征
特征集合很大时,在尝试降维之前,有必要用特征工程的方法去选择出较重要的特征结合。
过滤法:
按照特征的发散性或者相关性指标对各个特征进行评分,设定评分阈值或者待选择阈值的个数,选择合适特征。
-
feature_selection.VarianceThreshold([threshold])
方差筛选。方差越大的特征,那么可以认为它是比较有用的。如果方差较小,比如小于1,那么这个特征可能对算法作用很小。可以指定一个方差的阈值,方差小于这个阈值的特征会被筛掉。
-
feature_selection.SelectKBest([score_func, k]),score_func=scipy.stats.pearsonr
相关系数。主要用于输出连续值的监督学习算法中。分别计算所有训练集中各个特征与输出值之间的相关系数,设定一个阈值,选择相关系数较大的部分特征。 -
feature_selection.chi2(X, y)
假设检验如卡方检验。卡方检验可以检验某个特征分布和输出值分布之间的相关性。使用chi2这个类来做卡方检验得到所有特征的卡方值与显著性水平P临界值,可以给定卡方值阈值, 选择卡方值较大的部分特征。 -
feature_selection.f_classif(X, y), feature_selection.f_regression(X, y)
假设检验除了卡方检验,还可以使用F检验和t检验。F检验的函数f_classif和f_regression,分别在分类和回归特征选择时使用。 -
feature_selection.mutual_info_classif(X, y),feature_selection.mutual_info_regression(X, y)
互信息,即从信息熵的角度分析各个特征和输出值之间的关系评分。在决策树中出现过互信息(信息增益)。互信息值越大,说明该特征和输出值之间的相关性越大,越需要保留。
(可以优先使用卡方检验和互信息来做特征选择)
包装法
通过选择一个目标函数来一步步的筛选特征。通常是预测效果评分,每次选择部分特征,或者排除部分特征。
- feature_selection.RFE(estimator)
递归消除特征法(recursive feature elimination, RFE),使用一个机器学习模型来进行多轮训练,每轮训练后,消除若干权值系数对应的特征,再基于新的特征集进行下一轮训练。
SVM-RFE算法:每轮使用特征集中特征来训练,得到分类超平面𝑤𝑥+𝑏=0后,选出𝑤中分量的平方值 w i 2 w^2_i wi2最小的那个序号i对应的特征,将其排除。
嵌入法
用机器学习的方法来选择特征,但是它和RFE的区别是它不是通过不停的筛掉特征来进行训练,而是使用的都是特征全集。
- feature_selection.SelectFromModel(estimator)
最常用的是使用L1正则化和L2正则化来选择特征。正则化惩罚项越大,那么模型的系数就会越小,当正则化惩罚项大到一定程度时,部分特征系数会更容易先变成0,这部分系数就是可以筛掉的。
常用逻辑回归作为基学习器。此外也可以使用决策树或GBDT。
寻找高级特征
- 若干项特征加和: 假设希望根据每日销售额得到一周销售额的特征。可以将最近7天的销售额相加得到。
- 若干项特征之差: 假设已经拥有每周销售额以及每月销售额两项特征,可以求一周前一月内的销售额。
- 若干项特征乘积: 假设有商品价格和商品销量的特征,就可以得到销售额的特征。
- 若干项特征除商: 假设有销售额和购买的商品件数,就可以得到平均每件商品的销售额。
注意:不是随便两两组合就可以形成高级特征,这样容易导致特征爆炸,反而没有办法得到较好的模型。(聚类的时候高级特征尽量少一点,分类回归的时候高级特征适度的多一点)