做过机器学习的人应该都听过这句话:数据和特征决定了机器学习的上限,而模型和演算法只是逼近这个上限而已。

由此可见,数据和特征是机器学习最重要的两个部分。而能拿到的数据范围一般是确定,所以特征就成了最重要的决定因素。

网上讲特征工程的文章,参差零散。一直想买本专讲特征工程的书,但查过才发现,这种书基本没有。

最近看到有本叫《精通特征工程》,还是OReilly 的动物书,果断下单。收到后发现,好薄。读了下,还是有好多收获,做个笔记。

特征,即原始数据某个方面的数值表示。或者说,特征是模型输入中的X。

特征工程就是从原始数据中提取有用因子,并转换为适合机器学习模型的特征的过程。

原始数据有很多格式,其中最常见的就是数值格式。数值数据容易被模型所用,但是仍然需要进行特征工程。

首先要对数据进行基本的观察,看看量级、正负、最大最小值。根据观察情况,决定对数据进行哪些处理,常见的处理有以下几种。

一.二值化

有时候我们只关心『是不是『,但拿到的数据是数量值。书中的例子是据用户收听次数,推测对歌的喜欢程度。可能说听得多肯定更喜欢,但是实际情况并非如此。收听次数和用户收听习惯有关,并非标识用户喜好的强指标。而且,这个次数多数较小,也有少数用户达到了几千次。如果直接使用次数,模型会被这些异常值带偏。

处理方式很简单,把所有收听次数非0的设为1,这就是二值化。0代表用户没听过歌,认为不喜欢这首歌;1代表用户至少听过一次,认为喜欢这首歌。二值变数是一个简单又强壮的用户偏好衡量指标。

二.区间量化(分箱)

如果一个数据跨越多个数量级,那么较大数据的实际影响可能会远超过其实际应该产生的影响,这会造成相似度度量问题。对此,可以使用区间量化对数据进行处理。

区间量化,就是将数据跨度分为很多区间,给每个区间编号,然后使用区间编号代替原始数值。相当于将数据装到很多箱子中,所以也叫分箱。分箱可以将连续性数值映射为离散型数值。可以看出,分箱的主要过程在于划分区间。常见的有两种方法:固定宽度分箱和分位数分箱。

固定宽度分箱,每个区间的宽度是一定的。固定宽度并非宽度相同,常说的等距分箱,就是固定宽度分箱的一种。

宽度可以自动或人工划分,可以是线性也可以是指数级。比如,年龄数据,宽度可以设为10年;指数级增长的数据,宽度可以设为10的n次幂。

自适应分箱,是根据数据的分布特点,去划分区间。分位数分箱是常见的自适应分箱。这种方法将一些分位数设为区间端点,可以解决在固定宽度分箱中,有些箱子可能为空的问题。

三.对数变换

对数变换是将变数映射为其对数的变换。前面讲了指数级分箱,如果将分箱宽度设置为无限小,就成了对数变换。

对数变换的一个性质是能对大数值进行压缩,对小数值进行扩展。所以,重尾分布在经过对数变换后,会变得更均匀一些。这会给线性模型特征空间低端值争取『呼吸空间』,使模型不必在输入变化很小的情况下去拟合变化非常大的目标值。

一种重尾分布的图形

四.指数变换

指数变换是一个变化族,是方差稳定变换,对数变换是其中的一种。这些变换可以推广为Box-Cox变换:

。Box-Cox变换的作用是基于极大似然法的幂转换,其所用是让分布在不丢失信息的前提下,具有更好的性质(独立性、方差齐性、正态性等),以便得到更好的模型。λ无需计算,Scipy的boxcox函数,会找到最优λ,使变换后最近正态分布。

五.归一化(特征缩放)

有的特征取值有限,有的则没有。对于回归模型或包含矩阵的模型,输出是输入的平滑函数,对输入尺度敏感,基于数的模型,则不受影响。如果模型是输入尺度敏感的,则需要进行特征归一化。

min-max缩放将特征映射到[0,1];特征标准化(方差缩放)将特征映射为均值为0方差为1的分布;范数归一化将特征映射为范数为1的变数。特征缩放不改变分布的形状。

六.交互特征

将原始特征进行一定的运算就产生的特征为交互特征,如将两个特征做差、做积。这些特征捕获了特征间的交互作用。

交互特征可能是影响目标变数的关键因子,但是模型不一定能够捕获,所以我们要提前产生一些交互特征并输入模型。

交互特征构造简单,使用却需要付出很大的代价,因为增加了输入变数个数。因此交互特征不能乱用。

可以看出,数值变数的处理原则,一是分布均匀化,二是极端变数一般化。同时,也可以看出,对数据可视化也是处理数值数据的重要部分。

微信公众号:曲曲菜

知乎专栏:AI和金融模型

原创作品,未标明作者不得转载。


推荐阅读:
相关文章