特征工程(二)——特征选择

“巧妇难为无米之炊”,放到数据行业,“巧妇”是模型,“米”就是数据与特征。正如业界经典的一句话"Garbage in, garbage out",如果没有充足数据、合理的特征,再强大的模型结构也难以得到令人满意的结果。

实际工作中,特征工程是去除数据中的杂质,提炼为更合理的特征,供算法和模型使用。特征工程主要包括特征归一化、类型特征的表示、特征选择及非结构化数据的表示。本文主要介绍特征选择的常用方法。

现实任务中如果特征过多会遇到维数灾难问题,如果能从中选出重要的特征,就会大大减轻维数灾难的问题。特征选择的方法主要是过滤式、包裹式和嵌入式。

过滤式

过滤式,先进行特征选择再训练。主要有方差选择法、相关系数法、卡方检验等。

1. 方差选择法

因为方差较低的样本差异不大,对目标变量贡献不大。所以设定阈值,如果方差低于某个阈值就被移除。阈值的设定,需要根据实际场景决定。比如某一个特征数据是boolean类型,伯努利分布指的是存在参数p,分别以p和1-p的概率取1和0的值,则方差为D(p)=p(1-p)。我们要去掉75%都是0或都是1的样本,方差的阈值定义为0.75*(1-0.75)。

df = pd.DataFrame({'num':np.random.randint(0,50,size=10),
                   'money':np.random.randint(0,3000,size=10),
                   'type':[0,0,0,0,0,1,0,0,0,1]})
from sklearn.feature_selection import VarianceThreshold
clf = VarianceThreshold(threshold=0.75*(1-0.75))
dfv= clf.fit_transform(df)
image.png

可以看到,type一列因为80%都是0被移除了,利用clf.variances_可以查看各特征的方差。

2. 相关系数法

计算各个特征对目标值的相关系数以及相关系数的p值,取相关系数最高的k个特征。
构造目标变量Y是money的函数,验证选出的最相关特征,这里取k=1。

Y=df['money']/df['money'].max() 
from sklearn.feature_selection import SelectKBest
from scipy.stats import pearsonr
skb = SelectKBest(lambda X,Y:np.array(list(map(lambda x:pearsonr(x,Y),X.T))).T[0],k=1)
print(skb.fit_transform(df,Y))
image.png

可以看到最相关的特征和money字段是一致的,说明目标函数与money相关度最大。利用skb.scores_可以查看各特征的相关性得分。

3. 卡方检验

卡方检验评价定性自变量和定性因变量之间的相关性。

包裹式

包裹式将机器学习的性能当做子集评价标准,主要包括递归特征消除法等。

1. 递归特征消除法RFE

Recursive feature elimination(RFE)是对基模型进行多轮训练,每次消除掉贡献率最差的特征。如选择SVM为基模型,选出最相关的特征。

from sklearn.feature_selection import RFE
from sklearn.svm import SVC
svc = SVC(kernel='linear',C=1)
rf = RFE(estimator=svc,n_features_to_select=1)
fit = rf.fit(df,Y)
print(fit.support_)

Selector.support_ 展示特征是否被选择
Selector.ranking_ 展示特征的重要程度排名

嵌入式

与过滤式、包裹式不同,嵌入式是将特征选择和机器学习在同一个优化过程中完成。主要包括基于正则化特征选择、基于树模型特征选择。

1. 基于正则化特征选择

我们考虑最简单的线性回归模型,平方误差为损失函数,优化目标为:

当特征过多,优化目标很容易过拟合,为了缓解过拟合问题,可以在该优化目标引入正则项。如果使用L_1正则项,则有

在二维空间,L1范数下w解空间是菱形,与平方误差项等值线交叉点在坐标轴,有些w是0,所以产生稀疏解。
L2范数下,w解空间是圆形,与平方误差等值线交叉点在某一象限。因此,L1正则化更容易产生稀疏解,实现特征的自动选择。L2正则化使各项权值趋于平均,解决不稳定问题。

image.png

可以实现这个目的的有lasso回归、logisticRegression逻辑回归和svm.LinearSVC。

2. 基于树模型的特征选取

树模型根据信息增益最大的特征建模,树模型的建立就是特征选择的过程。输出各特征的feature_importances_,传入SelectFromModel进行特征选择。

你可能感兴趣的:(特征工程(二)——特征选择)