当前位置: 代码迷 >> 综合 >> 【Trick】机器学习特征工程处理(一)
  详细解决方案

【Trick】机器学习特征工程处理(一)

热度:94   发布时间:2023-12-16 22:47:09.0

前言

机器学习特征工程处理系列博客为博主学习相关视频教程以及结合平时接触到的特征工程处理方法,总结出的一些处理技巧,本篇博客介绍数据格式化、数据清洗、数据采样等,我在之前有总结过一篇博客介绍数据预处理的常用方法,对其中的部分操作有涉及,如有需要,可参考本篇博客。

数据格式化

存储格式

(一)时间戳/时间段/时间记录标准
对于同类属性,比如时间属性,表达形式不同,但要采取同样的记录格式,一般来讲,通过网络爬虫爬取的web数据,通常这类属性较为整齐,不需要做过多的处理,但生成或人工记录的数据,可能会出现不同差异,比如时间属性的记录,像R语言本身会以1970年1月1日00:00作为时间戳记录现在时间距离上述时间的秒数,而认为设置的时间记录标准可能为:年-月-日、月-日-年、按星期记录、12小时制(am、pm)、24小时制等等,当这类数据生成之后,处理时候就会非常麻烦,解决这类数据的最好方法就是扼杀在萌芽之中,即同一个项目,尽量采取相同的相似属性记录方式,这样,在以后的属性转换、预处理中都会极大的简化处理过程。
(二)行为记录/行为群记录
这个好理解,就是单个属性的多个行为记录,要么分条列出来,要么整体列出来,举个例子,我再之前进行数据爬取时,

数据清洗

这部分在之前的那个博客中介绍的非常详细,其中涉及很多清洗方法。

数据采样

在实际的建模过程中,经常会遇到需要进行数据采样的问题,很多情况下正负样本是不均衡的,比如电商中用户购买/未购买过的商品;电信用户中流失/保留的用户量等等,大多数模型对正负样本的量是敏感的,比如LR,如果不进行样本采样,就会严重影响模型效果。
数据不均匀问题很常见,也很容易被忽视掉,数据不均匀会导致模型精度下降,需要重视,假设有一个数据集,是一个二分类数据集,包含的正负样本的比例为10:1,可以采用如下中的一种进行处理:
(1)从正样本中随机抽取十分之一与负样本组成训练集。这种情况需要注意:一定要保证是在数据量足够大的情况下,如果数据本身就很少,这样做反而会更加麻烦。
(2)赋予负样本十倍于正样本权重。由于负样本比较少,这时增加负样本权重,会弥补由于负样本数量少带来的影响。
(3)将负样本数据额外复制9份,并添加极小噪声。
下面是一个实例介绍数据不均匀会带来的影响,可能有点极端,但用来解释这个问题很合适。数据集:正样本:9900个,负样本100个,合计10000个样本点,用来进行二分类研究,如果直接进行建模,可能出现的一种情况是:模型将所有输入都预测为正样本,最终依旧会得到很高(99%)的准确率,而对于负样本的召回率为0,如果只是对模型精度进行判断根本检查不出异常,但这样的模型又是万万不能在实际中应用的。
总结一下样本不平衡的处理方法:
(1)正样本>>负样本,并且样本量比较大的情况下,进行下采样。
(2)正样本>>负样本,并且样本量都不大的情况下:
         a)增加数据
         b)下采样,如深度学习中的图像旋转
         c)修改损失函数

参考资料

roguesir的博客:数据预处理的常用方法
七月在线机器学习第八期课程:机器学习中的特征工程处理
周志华《机器学习》
李航《统计学习方法》
Ian Goodfellow等《deep learning》