转自july算法班:
为什么要进行特征选择?
原因:
1)冗余:部分特征的相关度太高了,消耗计算性能
2)噪声:部分特征对预测结果有负影响
-- 特征选择 VS 降维
1. 前者只踢掉原本特征里和结果预测关系不大的,后者做特征的计算组合构成新特征
2. SVD或者PCA确实也能解决一些高维度问题
---常见的特征选择
------过滤型
评估单个特征和结果之间的相关程度,留下top相关的特征部分
Pearson相关系数、互信息、距离相关度量
缺点:没有考虑到特征之间的相互关联作用,可能把有用的关联特征误踢掉
sklearn-->selectKBest-->selectPercentile
----常见的特征选择方式--包裹型【适合线性模型】
1. 把特征看作一个特征子集搜索的过程,筛选各种特征子集,用模型评估效果
2. 典型的包裹型“递归特征删除算法”RFE
1)用全量特征跑一个模型
2)根据线性模型的系数(体现相关性),删除掉5-10%的弱特征,观察准确率/AUC的变化【用逻辑回归算theta,剔除掉theta小的特征】
3)逐步进行,直到AUC出现大的下滑停止
3. 如果是用LR呢?
----一般先做特征工程,再做特征选择
------常见的特征选择--嵌入型
1)根据模型来分析特征的重要性(有别于上面的方式,是从生产的模型权重等)
2)最常见的方式是用正则化来做特征选择
3)举个栗子,最早在电商用LR做CTR预估,在3亿-5亿维的系数特征上用L1正则化的LR模型,剩余2-3千万的feature,意味着其他的feature重要度不够
L1正则化是截断性效益
L2正则化是缩段性效益
线性模型的话可以用SelectFromModel
lsvc = LinearSVC(c=0.01,penalty="L1",dual=False).fit(X,y)
网友评论