1. 什么是特征工程
对数据进行一系列处理构成特征输入给模型
例如,我们想让机器识别这个图片是不是苹果,可以选择 形状,颜色分布,边 来作为feature:
特征越好,模型的性能越好,而且可以不用很复杂的数学模型也能达到不错的效果
特征工程的目的
去掉数据中的杂质
构造更高级的高效的特征来描述数据。
怎么做特征工程?
特征工程一般包括三个子模块:特征构建->特征提取->特征选择
特征构建:根据原始数据构建新的特征,需要找出一些具有物理意义的特征。
特征提取:自动地构建新的特征,将原始特征转换为一组具有明显物理意义或者统计意义或核的特征。例如 Gabor、几何特征、纹理等。
常用的方法有:
PCA (Principal component analysis,主成分分析)
ICA (Independent component analysis,独立成分分析)
LDA (Linear Discriminant Analysis,线性判别分析)
- 特征选择:从特征集合中挑选一组最具统计意义的特征子集,把无关的特征删掉,从而达到降维的效果
常用的方法:
filter 方法:Pearson相关系数,Gini-index(基尼指数),IG(信息增益)等
wrapper :有逐步回归(Stepwise regression 递归特征消除法)、向前选择(Forward selection)和向后选择(Backward selection)等
Embeded :Regularization(基于L1,L2惩罚项的特征选择法),或者使用决策树思想,Random Forest和Gradient boosting等
2. 两种常用的数据类型
- 结构化数据
即每一行数据表示一个样本,每列都有清晰的定义
有数值型、类别型两种基本类型
- 非结构化数据
主要包括文本、图像、音频、视频数据
无法用一个简单的数值表示,每条数据的大小各不相同
3. 为什么需要对数值类型的特征做归一化?
什么是特征归一化?
将所有的特征都统一到一个大致相同的数值区间内。
如何进行归一化?
-
Min-Max Scaling
结果映射到[0, 1]之间
公式:
-
Z-Score Normalization
将原始数据映射到均值为 0、标准差为 1 的分布上
公式:
为什么要进行归一化?
例如,身高特征会在 1.6~1.8m 范围,体重特征会在 50~100kg 的范围,体重特征会对问题有更大的影响
理论上看
因为特征的数值范围不同的话,会影响梯度下降的速率
如果将目标函数的等值图画出来,数值范围大的特征,那个方向会需要更多次的迭代才能找到最优解。
如果将每个特征的范围转化成一致的,那么等值图的图形会是一个圆形,梯度下降在各个方向的速率是一样的,可以更快地找到最优解。
什么时候需要进行归一化?
-
通常在需要用到梯度下降法的时候。
包括线性回归、逻辑回归、支持向量机、神经网络等模型。
-
决策树模型就不适用
例如 C4.5 ,主要根据信息增益比来分裂,归一化不会改变样本在特征 x 上的信息增益
4. 类别型特征
什么是类别型特征?
例如:性别(男、女)、血型(A、B、AB、O)
通常是字符串形式,需要转化成数值型,传递给模型
如何处理类别型特征?
-
序号编码(Ordinal Encoding)
例如学习成绩有高中低三档,也就是不同类别之间关系。
这时可以用321来表示,保留了大小关系。
-
独热编码(One-hot Encoding)
例如血型,它的类别没有大小关系。A 型血表示为(1, 0, 0, 0),B 型血表示为(0, 1, 0, 0)……
-
二进制编码(Binary Encoding)
第一步,先用序号编码给每个类别编码
第二步,将类别 ID 转化为相应的二进制
例如,B 型血的 ID 为 2,二进制表示为 010
优点:这种方法得到的结果维数少于独热编码