【机器学习】特征工程:数值与类别
对于一个机器学习问题,数据和特征往往决定了结果的上限,而模型、算法的选择及优化则是在逐步接近这个上限。
在最初的特征处理中最常见的数据类型有结构化数据和非结构化数据,结构化数据可以简单理解为每一个数值或类别都具备清晰的定义,非结构化数据主要为文本、图像、音视频等,其所包含的信息无法通过简单的数值或类别定义。
本文将主要涉及结构化数据的常见特征处理。
1.数值型特征处理
数值型特征又可以理解为连续型特征,一般除了特征归一化处理无需做过多特殊处理。
特征归一化主要是为了减少或消除特征之间的量纲影响,将所有的特征都统一到一个大致相同的数值区间内。特征的单位或尺度不同往往会影响最后的计算结果,特征数值较大的在计算过程中的作用会比较大,而特征数值较小的作用往往容易被忽略。类似长度单位、面积单位、体重单位、占比等量化数值特征,特征之间的变化范围会直接影响计算结果,因而将每一个特征进行归一化处理,将特征放在同一重要程度参与计算,减少因数值变化范围的差异对计算结果带来额外影响。另一个点就是,归一化后的特征能够更快的完成梯度下降的过程。在实际应用中通过梯度下降法求解的模型大部分都需要对特征进行归一化,包括线性回归、逻辑回归、支持向量机、神经网络等。决策模型一般不需要,决策模型主要是进行节点分裂,分裂过程中主要参考特征的信息增益比,而信息的增益比与是否归一化是无关的。
常用的归一化处理方法有线性函数归一化和零均值归一化,同时还有一些非线性归一化方法如log对数函数转换、atan反正切函数转换等。一般常用的归一化方法为线性函数归一化和零均值归一化,当遇到一些数值分化比较大的情况下会考虑使用非线性归一化方法。
-
线性函数归一化/最大最小标准化/0-1标准化(Min-Max Scaling)即对原始数据进行线性变化,将结果映射到[0, 1]区间。
线性函数归一化 -
零均值归一化(Z-Score Normalization),spss默认的标准化方法,将原始数据映射到均值为0、标准差为1的分布上。假设原始特征的均值为u、标准差为σ,则归一化公式为
Z-Score -
log对数函数转换,通过以10为底的log函数转换的方法,具体公式为
log对数函数 -
atan反正切函数转换是用反正切函数也可以实现数据的归一化,具体公式为
反正切函数转换
2.类别型特征处理
除了决策树等少数模型可以直接处理字符串形式的输入,对于逻辑回归、支持向量机等模型来说,类别型特征必须经过处理转换成数值型特征才能正确工作。本文介绍常用的几种编码方式:
- 序号编码(Ordinal Encoding):对不同类编按照一定的序号进行编码,一般编码的数值保存了类别间的大小或高低关系会选择使用序号编码,比如成绩高低等。
- 独热编码(One-hot Encoding):常用于处理类别间没有大小或顺序关系的特征,其输出为一个列表,将这一特征中类别的个数作为列表长度,列表中只有一个索引处取值为1(所表示的类别),其余为0。如针对红、黄、绿进行编码,红为(1, 0, 0)黄为(0, 1, 0)绿为(0, 0, 1)。注意:特征维度较高时需要配合特征选择进行降维处理。
- 二进制编码(Binary Encoding):先用序号编码赋予每一个类别数值id,然后将编码后的数值进行二进制处理。其本质是利用二进制对序号编码结果进行哈希映射,最后得到一个只有0和1的列表,且可有效的控制特征维数。