2019年第 17 篇文章,总第 41 篇文章 本文大约 5200 字,阅读大约需要 15 分钟,建议收藏好好阅读
机器学习入门系列(2)--如何构建一个完整的机器学习项目
第五篇
该系列的前四篇文章:
本篇文章会继续介绍特征工程的内容,这次会介绍特征缩放和特征编码,前者主要是归一化和正则化,用于消除量纲关系的影响,后者包括了序号编码、独热编码等,主要是处理类别型、文本型以及连续型特征。
由于微信公众号不支持外链,可点击文末“阅读原文”以访问外部链接。另外,排版时候,对于数学公式都是转换为图片形式,带有水印,为了排版更美观,所以简化了带有数学公式部分的描述,详细内容可以点击原文查看。
特征缩放主要分为两种方法,归一化和正则化。
图来自《百面机器学习》
3.常用的两种归一化方法:
[0,1]
的范围,实现对原始数据的等比缩放,公式如下:其中 X 是原始数据,
分别表示数据最大值和最小值。
4.如果数据集分为训练集、验证集、测试集,那么三个数据集都采用相同的归一化参数,数值都是通过训练集计算得到,即上述两种方法中分别需要的数据最大值、最小值,方差和均值都是通过训练集计算得到(这个做法类似于深度学习中批归一化,BN的实现做法)。
5.归一化不是万能的,实际应用中,通过梯度下降法求解的模型是需要归一化的,这包括线性回归、逻辑回归、支持向量机、神经网络等模型。但决策树模型不需要,以 C4.5 算法为例,决策树在分裂结点时候主要依据数据集 D 关于特征 x 的信息增益比,而信息增益比和特征是否经过归一化是无关的,归一化不会改变样本在特征 x 上的信息增益。
1.正则化是将样本或者特征的某个范数(如 L1、L2 范数)缩放到单位 1。
假设数据集为:
对样本首先计算 Lp 范数,得到:
正则化后的结果是:每个属性值除以其 Lp 范数
2.正则化的过程是针对单个样本的,对每个样本将它缩放到单位范数。
归一化是针对单个属性的,需要用到所有样本在该属性上的值。
3.通常如果使用二次型(如点积)或者其他核方法计算两个样本之间的相似性时,该方法会很有用。
定义:序号编码一般用于处理类别间具有大小关系的数据。
比如成绩,可以分为高、中、低三个档次,并且存在“高>中>低”的大小关系,那么序号编码可以对这三个档次进行如下编码:高表示为 3,中表示为 2,低表示为 1,这样转换后依然保留了大小关系。
定义:独热编码通常用于处理类别间不具有大小关系的特征。
独热编码是采用 N 位状态位来对 N 个可能的取值进行编码。比如血型,一共有 4 个取值(A、B、AB 以及 O 型),那么独热编码会将血型转换为一个 4 维稀疏向量,分别表示上述四种血型为:
独热编码的优点有以下几个:
当然,独热编码也存在一些缺点:
1.高维度特征会带来以下几个方面问题:
2.决策树模型不推荐对离散特征进行独热编码,有以下两个主要原因:
是否 A 型、是否 B 型、是否 AB 型、是否 O 型
,会有少量样本是 1 ,大量样本是 0。
这种划分的增益非常小,因为拆分之后:二进制编码主要分为两步:
继续以血型为例子,如下表所示:
血型 | 类别 ID | 二进制表示 | 独热编码 |
---|---|---|---|
A | 1 | 0 0 1 | 1 0 0 0 |
B | 2 | 0 1 0 | 0 1 0 0 |
AB | 3 | 0 1 1 | 0 0 1 0 |
O | 4 | 1 0 0 | 0 0 0 1 |
从上表可以知道,二进制编码本质上是利用二进制对类别 ID 进行哈希映射,最终得到 0/1 特征向量,并且特征维度小于独热编码,更加节省存储空间。
定义:特征二元化就是将数值型的属性转换为布尔型的属性。通常用于假设属性取值分布是伯努利分布的情形。
特征二元化的算法比较简单。对属性 j
指定一个阈值 m
。
j
上的值大于等于 m
, 则二元化后为 1;j
上的值小于 m
,则二元化为 0根据上述定义,m
是一个关键的超参数,它的取值需要结合模型和具体的任务来选择。
定义:顾名思义,离散化就是将连续的数值属性转换为离散的数值属性。
那么什么时候需要采用特征离散化呢?
这背后就是需要采用“海量离散特征+简单模型”,还是“少量连续特征+复杂模型”的做法了。
分桶
1.离散化的常用方法是分桶:
j
的取值从小到大排列。j
的取值 a,判断 a 在哪个分桶的取值范围内,将其划分到对应编号 k 的分桶内,并且属性取值变为 k。2.分桶的数量和边界通常需要人工指定。一般有两种方法:
3.选择分桶大小时,有一些经验指导:
特性
1.在工业界很少直接将连续值作为逻辑回归模型的特征输入,而是将连续特征离散化为一系列 0/1 的离散特征。
其优势有:
[30,100)
之间时,为1,否则为 0。如果未离散化,则一个异常值 10000 会给模型造成很大的干扰。由于其数值较大,它对权重的学习影响较大。j
,离散化为 N
个 0/1 特征;连续特征 k
,离散化为 M
个 0/1 特征,则分别进行离散化之后引入了 N+M
个特征。
假设离散化时,并不是独立进行离散化,而是特征 j,k
联合进行离散化,则可以得到 N*M
个组合特征。这会进一步引入非线性,提高模型表达能力。[30,100)
作为一个区间。当销售额在40左右浮动时,并不会影响它离散化后的特征的值。
但是处于区间连接处的值要小心处理,另外如何划分区间也是需要仔细处理。2.特征离散化简化了逻辑回归模型,同时降低模型过拟合的风险。
能够对抗过拟合的原因:经过特征离散化之后,模型不再拟合特征的具体值,而是拟合特征的某个概念。因此能够对抗数据的扰动,更具有鲁棒性。
另外它使得模型要拟合的值大幅度降低,也降低了模型的复杂度。
特征缩放是非常常用的方法,特别是归一化处理特征数据,对于利用梯度下降来训练学习模型参数的算法,有助于提高训练收敛的速度;而特征编码,特别是独热编码,也常用于对结构化数据的数据预处理。
参考: