【特征工程】数值变数的处理技术
做过机器学习的人应该都听过这句话:数据和特征决定了机器学习的上限,而模型和演算法只是逼近这个上限而已。
由此可见,数据和特征是机器学习最重要的两个部分。而能拿到的数据范围一般是确定,所以特征就成了最重要的决定因素。
网上讲特征工程的文章,参差零散。一直想买本专讲特征工程的书,但查过才发现,这种书基本没有。
最近看到有本叫《精通特征工程》,还是OReilly 的动物书,果断下单。收到后发现,好薄。读了下,还是有好多收获,做个笔记。
特征,即原始数据某个方面的数值表示。或者说,特征是模型输入中的X。
特征工程就是从原始数据中提取有用因子,并转换为适合机器学习模型的特征的过程。
原始数据有很多格式,其中最常见的就是数值格式。数值数据容易被模型所用,但是仍然需要进行特征工程。
首先要对数据进行基本的观察,看看量级、正负、最大最小值。根据观察情况,决定对数据进行哪些处理,常见的处理有以下几种。
一.二值化
有时候我们只关心『是不是『,但拿到的数据是数量值。书中的例子是据用户收听次数,推测对歌的喜欢程度。可能说听得多肯定更喜欢,但是实际情况并非如此。收听次数和用户收听习惯有关,并非标识用户喜好的强指标。而且,这个次数多数较小,也有少数用户达到了几千次。如果直接使用次数,模型会被这些异常值带偏。
处理方式很简单,把所有收听次数非0的设为1,这就是二值化。0代表用户没听过歌,认为不喜欢这首歌;1代表用户至少听过一次,认为喜欢这首歌。二值变数是一个简单又强壮的用户偏好衡量指标。二.区间量化(分箱)
如果一个数据跨越多个数量级,那么较大数据的实际影响可能会远超过其实际应该产生的影响,这会造成相似度度量问题。对此,可以使用区间量化对数据进行处理。
区间量化,就是将数据跨度分为很多区间,给每个区间编号,然后使用区间编号代替原始数值。相当于将数据装到很多箱子中,所以也叫分箱。分箱可以将连续性数值映射为离散型数值。可以看出,分箱的主要过程在于划分区间。常见的有两种方法:固定宽度分箱和分位数分箱。固定宽度分箱,每个区间的宽度是一定的。固定宽度并非宽度相同,常说的等距分箱,就是固定宽度分箱的一种。
宽度可以自动或人工划分,可以是线性也可以是指数级。比如,年龄数据,宽度可以设为10年;指数级增长的数据,宽度可以设为10的n次幂。
自适应分箱,是根据数据的分布特点,去划分区间。分位数分箱是常见的自适应分箱。这种方法将一些分位数设为区间端点,可以解决在固定宽度分箱中,有些箱子可能为空的问题。
三.对数变换
对数变换是将变数映射为其对数的变换。前面讲了指数级分箱,如果将分箱宽度设置为无限小,就成了对数变换。
对数变换的一个性质是能对大数值进行压缩,对小数值进行扩展。所以,重尾分布在经过对数变换后,会变得更均匀一些。这会给线性模型特征空间低端值争取『呼吸空间』,使模型不必在输入变化很小的情况下去拟合变化非常大的目标值。