二、特征编码
2.1. 特征二元化
特征二元化的过程是将数值型的属性转换为布尔值的属性。通常用于假设属性取值为取值分布为伯努利分布的情形。
特征二元化的算法比较简单。 对属性 指定一个阈值 。
- 如果样本在属性 上的值大于等于 ,则二元化之后为 1 。
- 如果样本在属性 上的值小于 ,则二元化之后为 0 。
- 阈值 是一个超参数,其选取需要结合模型和具体的任务来选择。
2.2. one-hot
对于非数值属性,如
性别:[男,女]、国籍:[中国,美国,英国]
等等,可以构建一个到整数的映射。如性别:[男,女]
属性中,将男
映射为整数 1、女
映射为整数 0。该方法的优点是简单。但是问题是,在这种处理方式中无序的属性被看成有序的。
男
和女
无法比较大小,但是1
和0
有大小。解决的办法是采用独热码编码
One-Hot Encoding
。One-Hot Encoding
采用N
位状态位来对N
个可能的取值进行编码,每个取值都由独立的状态位来表示,并且在任意时刻只有其中的一位有效。假设属性 的取值为非数值的离散集合 ,独热码将其扩展成 个属性,每个新属性代表属性 的一个状态位:若样本在属性 上的取值为 ,则样本在新的属性 上的取值为 1,在新的属性 上的取值为 0 。
这种做法中,如果在 上取值全为 0,则表示发生了缺失。
缺失值也可以用第 个状态位来表示。
也可以扩展成 个属性, 如果在 上取值全为 0,则表示样本在属性 上的取值为 。
One-Hot Encoding
的优点:- 能够处理非数值属性。
- 在一定程度上也扩充了特征。如
性别
是一个属性,经过独热码编码之后变成了是否男
和是否女
两个属性。 - 编码后的属性是稀疏的,存在大量的零元分量。
在决策树模型中,并不推荐对离散特征进行
one-hot
。 主要有两个原因:产生样本切分不平衡的问题,此时且分增益会非常小。
如:
国籍
这个离散特征经过独热码编码之后,会产生是否中国、是否美国、是否英国、...
等一系列特征。在这一系列特征上,只有少量样本为1
,大量样本为0
。这种划分的增益非常小,因为拆分之后:
- 较小的那个拆分样本集,它占总样本的比例太小。无论增益多大,乘以该比例之后几乎可以忽略。
- 较大的那个拆分样本集,它几乎就是原始的样本集,增益几乎为零。
影响决策树的学习。
决策树依赖的是数据的统计信息。而独热码编码会把数据切分到零散的小空间上。在这些零散的小空间上,统计信息是不准确的,学习效果变差。
本质是因为独热码编码之后的特征的表达能力较差的。该特征的预测能力被人为的拆分成多份,每一份与其他特征竞争最优划分点都失败。最终该特征得到的重要性会比实际值低。
2.3 离散化
离散化用于将连续的数值属性转化为离散的数值属性。
是否使用特征离散化,这背后是:使用“海量离散特征+简单模型”,还是“少量连续特征+复杂模型”。
对于线性模型,通常使用“海量离散特征+简单模型”。
- 优点:模型简单。
- 缺点:特征工程比较困难。但是一旦有成功的经验就可以推广,并且可以很多人并行研究。
对于非线性模型(如深度学习),通常使用“少量连续特征+复杂模型”。
- 优点是:不需要进行复杂的特征工程。
- 缺点是:模型复杂。
2.3.1 分桶
离散化的常用方法是分桶。
将所有样本在连续的数值属性 的取值从小到大排列 。
然后从小到大依次选择分桶边界 。其中:
- 为分桶的数量,它是一个超参数,需要人工指定。
- 每个桶的大小 也是一个超参数,需要人工指定。
给定属性 的取值 ,对其进行分桶:
- 如果 ,则分桶编号为 0。分桶后的属性的取值为 0 。
- 如果 ,则分桶编号为 。分桶后的属性的取值为 。
- 如果 ,则分桶编号为 。分桶后的属性的取值为 。
分桶的数量和边界通常需要人工指定。一般有两种方法:
根据业务领域的经验来指定。如:对年收入进行分桶时,根据2017年全国居民人均可支配收入约为 2.6 万元,可以选择桶的数量为5。其中:
- 年收入小于 1.3 万元(人均的0.5倍),则为分桶 0 。
- 年收入在 1.3万元 ~5.2 万元(人均的0.5~2倍),则为分桶 1 。
- 年收入在 5.3万元~26万元(人均的2倍~10倍),则为分桶 2 。
- 年收入在 26万元~260万元(人均的10倍~100倍),则为分桶 3 。
- 年收入超过 260万,则为分桶 4 。
- 根据模型指定。根据具体任务来训练分桶之后的数据集,通过超参数搜索来确定最优的分桶数量和分桶边界。
选择分桶大小时,有一些经验指导:
分桶大小必须足够小,使得桶内的属性取值变化对样本标记的影响基本在一个不大的范围。
即不能出现这样的情况:单个分桶的内部,样本标记输出变化很大。
分桶大小必须足够大,使每个桶内都有足够的样本。
如果桶内样本太少,则随机性太大,不具有统计意义上的说服力。
每个桶内的样本尽量分布均匀。
2.3.2 特性
在工业界很少直接将连续值作为逻辑回归模型的特征输入,而是将连续特征离散化为一系列 0/1 的离散特征。
其优势有:
离散化之后得到的稀疏向量,内积乘法运算速度更快,计算结果方便存储。
离散化之后的特征对于异常数据具有很强的鲁棒性。
如:销售额作为特征,当销售额在
[30,100)
之间时,为1,否则为 0。如果未离散化,则一个异常值 10000 会给模型造成很大的干扰。由于其数值较大,它对权重的学习影响较大。逻辑回归属于广义线性模型,表达能力受限,只能描述线性关系。特征离散化之后,相当于引入了非线性,提升模型的表达能力,增强拟合能力。
假设某个连续特征 ,它离散化为 个 0/1 特征 。则:
。其中 是离散化之后的新的特征,它们的取值空间都是 。
上式右侧是一个分段线性映射,其表达能力更强。
离散化之后可以进行特征交叉。假设有连续特征 ,离散化为 个 0/1 特征;连续特征 ,离散化为 特 0/1 特征,则分别进行离散化之后引入了 个特征。
假设离散化时,并不是独立进行离散化,而是特征 联合进行离散化,则可以得到 个组合特征。这会进一步引入非线性,提高模型表达能力。
离散化之后,模型会更稳定。
如对销售额进行离散化,
[30,100)
作为一个区间。当销售额在40左右浮动时,并不会影响它离散化后的特征的值。但是处于区间连接处的值要小心处理,另外如何划分区间也是需要仔细处理。
特征离散化简化了逻辑回归模型,同时降低模型过拟合的风险。
能够对抗过拟合的原因:经过特征离散化之后,模型不再拟合特征的具体值,而是拟合特征的某个概念。因此能够对抗数据的扰动,更具有鲁棒性。
另外它使得模型要拟合的值大幅度降低,也降低了模型的复杂度。