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

“巧妇难为无米之炊”,放到数据行业,“巧妇”是模型,“米”就是数据与特征。正如业界经典的一句话"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. 基于正则化特征选择

我们考虑最简单的线性回归模型,平方误差为损失函数,优化目标为:
\min{\ \mathrm{\Sigma}{(y_i-w_i^Tx_i)}^2}
当特征过多,优化目标很容易过拟合,为了缓解过拟合问题,可以在该优化目标引入正则项。如果使用L_1正则项,则有
\min{\ \mathrm{\Sigma}{(y_i-w_i^Tx_i)}^2}+\mathrm{\lambda}‖w‖1
在二维空间,L1范数下w解空间是菱形,与平方误差项等值线交叉点在坐标轴,有些w是0,所以产生稀疏解。
L2范数下,w解空间是圆形,与平方误差等值线交叉点在某一象限。因此,L1正则化更容易产生稀疏解,实现特征的自动选择。L2正则化使各项权值趋于平均,解决不稳定问题。

image.png

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

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

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

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,997评论 6 502
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,603评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 163,359评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,309评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,346评论 6 390
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,258评论 1 300
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,122评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,970评论 0 275
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,403评论 1 313
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,596评论 3 334
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,769评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,464评论 5 344
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,075评论 3 327
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,705评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,848评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,831评论 2 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,678评论 2 354

推荐阅读更多精彩内容