特征工程
数据和特征决定了模型的上限,算法只是在帮忙逼近这个上限。
1. 显性特征:可以理解为用户直接可以拿到的数据字段
2. 半隐性特征:用户数据在通过GBDT等算法的计算过程中产出的一些特征
3. 隐性特征:深度学习在很大程度上可以简化人肉特征工程的工作量,因为深度学习可以在计算过程中自动生成一些特征向量,这些特征的表达往往是不可解释的,那这些特征就是隐性特征。
显性特征:
1. 数据清洗
主要包括两方面,一方面是填充缺失值,因为在机器学习算法的计算过程中会对数据进行各种运算符的计算,需要把一些空值填充,通常会被填充为0(使用最可能的值填充空缺值)或者是对应特征列的均值。第二方面是乱码问题,如果是文本数据,经常会出现编码问题,需要把数据的类型全部处理好,最好是double型的。
最常用的是用回归技术确定最可能值,比如构造一个决策树,来预测缺失值。
2. 去量纲
因为数据的量纲会影响到某些算法的计算,比如有两个字段数据分别是一个人吃饭用了多少秒、吃了多少斤饭,那一个是时间数据,另一个是重量数据,算法是无法感知这些量纲的影响的,所以需要一些数学手段规避。去量纲常用的方法是归一化和标准化。
标准化就是每个特征值减去均值再除以方差,表现的是数据的一个分布情况。
归一化是把数据的分布强制性的限制到0和1之间,使得向量单位化。每个特征值减去最小值/(最大值-最小值)
3. 数据平滑
大家可能平时会接触到一些分布极不均匀的数据,比如一个数据区间是[0,256],但是百分之九十以上的数据分布在[0,10]和[200,256]这两个区间中。对于这样的数据可以通过取对数的方式来处理,让数据的分布更加平滑。或者干脆数据分桶,取一个中间阈值128,小于128的标记为0,大于128的标记为1。不管是哪一种数据平滑的方法,整体的思想都是“劫富济贫”。每个行业有自己经典的数据平滑方法,比如文本的平滑方法就很多
4. 数据去噪
很多时候数据因为采集方式可能出现个别事故,比如有的数据是靠调查问卷采集上来的,但是就有一个人不认真写,瞎写,造成了噪声数据。这种跟事实偏差极大的数据,可以通过正态分布的原理去除,因为可以设想数据的分布大部分是比较平均的,符合正态分布,那与均值偏差极大的部分就很有可能是噪声,需要去除。
利用离群点分析:如聚类检测离群点。聚类将类似的值组织成群,落在簇集合之外的值为视为离群点。
5. 降维
降维的方式很多啦,如果要讲的话需要非常大的篇幅,之前在写书的时候已经写了一遍了~有点懒,在这里简单题下。其实除了PCA、LDA这两种降维方式以外,逻辑回归中的正则L1也可以理解为一种降维处理。
主成分分析是计算协方差的特征向量和特征值
设有m条n维数据。
1)将原始数据按列组成n行m列矩阵X
2)将X的每一行(代表一个属性字段)进行零均值化,即减去这一行的均值
3)求出协方差矩阵C=\frac{1}{m}XX^\mathsf{T}
4)求出协方差矩阵的特征值及对应的特征向量
5)将特征向量按对应特征值大小从上到下按行排列成矩阵,取前k行组成矩阵P
6)Y=PX即为降维到k维后的数据
主成分分析
https://www.cnblogs.com/zhangchaoyang/articles/2222048.html
LDA线性判别
- 出发思想不同。PCA主要是从特征的协方差角度,去找到比较好的投影方式,即选择样本点投影具有最大方差的方向;而LDA则更多的是考虑了分类标签信息,寻求投影后不同类别之间数据点距离更大化以及同一类别数据点距离最小化,即选择分类性能最好的方向。
- 学习模式不同。PCA属于无监督式学习,因此大多场景下只作为数据处理过程的一部分,需要与其他算法结合使用,例如将PCA与聚类、判别分析、回归分析等组合使用;LDA是一种监督式学习方法,本身除了可以降维外,还可以进行预测应用,因此既可以组合其他模型一起使用,也可以独立使用。
- 降维后可用维度数量不同。LDA降维后最多可生成C-1维子空间(分类标签数-1),因此LDA与原始维度数量无关,只有数据标签分类数量有关;而PCA最多有n维度可用,即最大可以选择全部可用维度。
PCA投影的坐标系都是正交的,而LDA根据类别的标注关注分类能力,因此不保证投影到的坐标系是正交的(一般都不正交)
LDA步骤)
https://www.cnblogs.com/pinard/p/6244265.html (写的很好)
逻辑回归中的正则L1
也是降维技术,因为训练计出来的结果会有很多特征对应的系数为0
6. 特征的衍生
其实特征工程真正的难点是如何结合业务需求衍生出新的特征。结合业务需求讲的是利用专家经验来提取出数据里对结果影响更大的特征,往往是原有数据字段通过加减乘除等操作生成新的字段