机器学习特征工程
什么是特征工程?
特征工程就是对原始数据进行一系列的工程处理,最后将其提炼成特征,作为输入供算法和模型使用。 在计算机领域,通常包含两种常用的数据
- 结构化数据,可以看做是关系型数据库的一张表,每一行都有清晰统一的数据格式组成
- 非结构化数据,文本,视频,音频,图像。包含的信息无法用数值表示,也没有清晰的定义。
为什么要对特征归一化(数值型特征)
首先,为了消除对数据特征之间的量纲的影响,需要对特征做归一化处理,使得不同指标之间具有可比性。
我们来复习一下,对数值特征做归一化的方法:
- 线性函数归一化(min-max归一化),等比缩放到0-1
- 零均值归一化,将数据映射到均值为0标准差为1的分布上
那为什么要对数值型特征做归一化呢?首先是梯度下降方面,在使用归一化的特征在学习速率相同的情况下,可以更快的通过梯度下降找到最优解。
缺点,在实际应用中,通过梯度下降的模型需要归一化,包括线性R,LR,SVM,神经网络等模型,但对于决策树模型却并不适用。决策树在进行节点分裂的时候主要依据数据集关于特征x的信息增益比,而信息增益比跟特征是否经过归一化是无关的。 归一化无法改变样本在特征x上的信息增益。
类别型特征怎么处理?
类别特征主要指的是在有限的选项中取值的特征。 决策树可以直接处理字符串的输入,而对于逻辑回归,SVM而言,类别型特征必须经过处理转换成数值型特征才能正常工作。
对类别特征编码的时候,考虑三种编码方式:
- 序号编码,将有具有大小关系类别的数据分配id,保留大小关系
- 独热编码,one-hot,处理不具有大小关系的类别数据。 但是one--hot编码有以下注意,利用稀疏向量来节省空间 ,或者配合特征来降低维度 因为在类别较多的时候,one-hot向量在维度较高的空间中,两点之间的距离很难得到有效的衡量 其次参数会随着维度越高而增高,容易引起过拟合 并且通常只有部分维度对分类和预测有帮助,因此可以考虑配合特征选择来降低维度。
- 二进制编码,首先给类别分配id,然后使用id对应的二进制编码作为结果。其实本质是对id进行了哈希映射,最终得到了01向量,且维度少于one-hot
- 求和编码:求和编码通过比较某一特征取值下对应标签(或其他相关变量)的均值与标签的均值之间的差別来 对特征进行编码。但是据我所知,如果做不好细节,这个方法非常容易出现过拟合,所以需要配 合留一法或者五折交叉验证进行特征的编码。还有根据方差加入惩罚项防止过拟合的方法。
- Helmet编码:是仅次于OHE和SumEncoder使用最广泛的编码方法,与SumEncoder不同的是,它比较的是某一特征取值下对应标签(或其他相关变量)的均值与他之前特征的均值之间的差异,而不是和所有特征的均值比较。这个特征同样容易出现过拟合的情况。不知道Helmet这个词是指的什么方面……使用标签时容易出现过拟合。
- Frequency编码,统计编码 这个方法统计训练集中每个特征出现的频率,在某些场景下非常有用(例如推荐系统中商品被购买的次数,直接反映了商品的流行程度),也不容易出现过拟合,但是缺点是在每个特征的取值数分布比较均匀时会遗漏大量的信息。
为什么需要组合特征
为了提高复杂关系的拟合能力,在特征工程中经常会把一阶离散特征两两组合,构成高阶组合特征。
比如性别(取值男女),城市(取值上海北京),组合后特征为:上海男,上海女,北京男,北京女。
假设数据的特征向量为X = (x1, x2, x3, x4, x5 ……xk)。比如xi和xj两个特征组合,组合之后特征的维度 = xi取值个数 * xj取值个数。但是当引入特征 ID进行组合后,会存在参数规模过大的问题。比如用户数量为m,物品数量为n,那么需要学习的参数规模为mn。用户数、物品数都很多的时候,几乎无法学习mn规模的参数。这个时候,需要将用户和物品分别用k维的低维向量表示(k<<m,k<<n),即降维。这时,学习参数的规模变为了mk+nk(其实是矩阵分解的思路)。
怎么有效的找到组合特征
很多实际问题中,我们常常需要面对多种高维特征。如果简单的两两组合,依然容易存在参数过多、过拟合等问题,而且不是所有的特征组合都是有意义的。因此,需要一种有效的方法来帮助我们找到应该对那些特征进行组合。 基于决策树的特征组合方法。根据原始输入特征和标签构造出决策树。构造的决策树中每一条从根节点到叶节点的路径都可以看成一种特征组合的方式。 比如:输入原始特征为年龄,性别,用户类型(试用期,付费),物品类型(食品,护肤等),标签为是否点击,构造出的决策树特征组合方式有以下4种:
年龄<=35, 物品类型=食品 年龄<=35, 性别=女 用户类型=付费,物品类型=护肤 用户类型=付费,年龄<=49
决策树为:
两个样本为:
那么按照上边的四个特征组合,第一条样本可以编码为:(0,1,0,0);第二条样本可以编码为:(0,0,0,1)
给定原始输入如何有效的构造决策树? 可以采用梯度提升决策树。梯度提升决策树的思想是每次都在之前构建的决策树的残差上构建下一棵决策树。
以上的特征分别是数值型特征,类别型特征,组合特征