机器学习之特征工程简介
Posted 未央夜色
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了机器学习之特征工程简介相关的知识,希望对你有一定的参考价值。
简介
特征工程非常重要。对于模型的效果起大了极大的作用。实际开发中,大部分的时间都花费在特征工程上面。特征工程最重要的是对具体业务的深刻理解。
减少数据存储和输入的代价,降低数据的维度
发现更多深入的特征,提升准确率。
特征工程和降维,是处理高维度数据的两大主要手段。
特征选择(选)
- 去掉无关特征,只保留核心特征。从总体特征中选择一个最好(最能代表整体)的特征子集
- 本质上是一个降维的过程。
- 核心是不丢失关键特征。
特征变换(变)
- 将原特征中的数据变换一下,使其更适合处理
特征提取(组)
- 将原始的特征转换成计算机更容易识别,输入的特征,本质上是个特征转换。
- 不关心这些处理的特征是不是有用
流程
- 数据采集
- 思考哪些数据是有用的,多维度,多方向
- 这些数据是否能采集到
- 运用于工业场景的时候能否快捷计算
- 数据格式化
- 数据存储格式
- 数据清洗
- 模型出结果的好坏,很大程度取决于数据的清洗
- 非常耗时间
- 非常有助于理解具体业务
- 数据采样
- 样本正负分布是不均匀的
- 训练模型对于正负样本比是敏感的
- 随机采样和分层采样
方法
过滤式
先对数据进行特征选择,在训练学习器。特征选择的过程和学习过程是分隔开的,相当于先对初始特征进行过滤,再根据过滤后的特征来训练学习器。
// 选择判定的模型,指定每次留下的个数
from sklearn.feayre_selection import SelectKbBest
- 需要指定特征的个数,但是可能导致结果问题,指定的特征数不能争取的反映结果。
- 没有考虑特征之间的组合关系。可能某些特征组合起来后效果非常好
包裹式
把特征选择看成一个特征子集搜索问题。
先训练,后选择。给当前ml任务量身定做的特征过滤方法。
比过滤型的效果更好。但是过程中需要多次训练,开销更大
把特征选择看成一个特征子集搜索问题
- 先用全部的特征跑
- 根据线性模型的系数,删除一部分弱特征,指定留下的特征的个数。观察auc变化
- B比A的误差更小,或者误差相当,但是特征更少,就把B保留下来
// 选择判定的模型,指定每次留下的个数
from sklearn.feature_selection import RFE
frc = RFE(lr,n_feature_to_select = num)
frc.fit(x,y)
嵌入式
非常常用,根据模型来分析特征的重要性。上述两个是将机器学习和特征选择分割开来
嵌入型将两个融为一体(嵌入),在学习的过程中自动进行特征选择。
//指定具体的ML算法
from skleart.teature_Select import SelectFromModel
sfm = SelectFromModel(lr,threshold = num)
- 选择算法
- 训练所有的特征
- 调用指定的特征选择方法
- 转换格式,将原始的总的特征转成筛选后的特征。
具体处理
- 分析统计值(maxminmeanstd等)
利用py中np,pd的方法(describe,info,mean等) - 离散化处理
能把连续的数据离散化。pd的cut方法
l1 = np.random.randint(1,12,5)
print pd.cut(l1,4)
[(1.991, 4.25], (1.991, 4.25], (8.75, 11], (6.5, 8.75], (4.25, 6.5]]
Categories (4, object): [(1.991, 4.25] < (4.25, 6.5] < (6.5, 8.75] < (8.75, 11]]
- 类别型数据
one-hot方法。处理完后生成哑变量
python的pd中的getdummy方法
pd.getdummys(obj)
- 时间型
既可以看成连续值又可以看成离散型 - 文本型
词袋 - 统计特征
这是在工业场景中非常常用的方法。
注意
以上是关于机器学习之特征工程简介的主要内容,如果未能解决你的问题,请参考以下文章