机器学习-特征预处理

爿臣戈王耑/ 八月 19, 2018/ 机器学习/ 0 comments

特征预处理

数据清洗

缺失值处理

删除缺失值

删除是最简单的处理方式,通常也是最有效的方式。这种做法的缺点是可能会导致信息丢失。当缺失值比例占很大比例时,可采用删除的方式
删除方式分为两种:

  • 删除有缺失数据的样本
  • 删除有过多缺失数据的特征

不处理缺失

直接忽略缺失值,直接在含有缺失值的数据集上进行数据挖掘和模型训练,例如XGB模型、人工神经网络等。

插补法填充

用一定的值来填充缺失值,通常有以下几种方法。

插补方法 描述
均值、中位数、众数 根据特征的类型(连续、离散),选择用均值、中位数、众数的方式填充
固定值 用特殊值今天填充,例如null用-9999、-1替代
最近临插法 在记录中找到与缺失值最相近的样本的属性进行插补
模型预测填充值 根据其他的属性建立模型,通常用随机森林的方式进行填补缺失值
插值法 用拉格朗日插值法、牛顿插值法、埃尔米特插值、样条插值、分段线性插值等方式

异常值处理

异常值是否应该去除,应该视具体情况而定,有些异常值可能蕴含有用的信息。在实际的操作中应该先分析异常值产生的原因,再判断用哪种方式处理。

处理方法 描述
删除 直接将含有异常值的记录删除
视为缺失值 将异常值当做缺失值处理
平均值修正 用数据相邻的前后属性值求平均值就行修正
不处理 直接在含有异常值上的数据进行建模和挖掘

数据集成

数据集成是讲多个数据源的数据合并到一个一致的数据仓库的过程。

数据实体识别

实体识别是指从不同的数据源识别出现实世界的实体,它的任务是统一不同的数据块的矛盾之处。主要用以下三种情况:

  • 同名异义:不同的数据源中相同的属性表示不同的含义。例如学生表中的id和教师表中的id意义不对等。
  • 异名同义:不同的数据源中不同的属性表示相同的含义。例如学生编中的id和成绩表中的sid是一个都表示学生id。
  • 单位不统一:不同数据源中的度量方式不统一。经常在不同的表中有的时间戳是秒单位,而有的则以毫秒以单位。

冗余属性识别

多个数据集经常造成数据冗余。

  • 同一个属性出现多次。例如在不同的数据集中都出现年龄属性。
  • 同一个属性命名不一致导致重复。
    有些冗余可以通过相关性检测。例如皮尔森相关系数,如果某两个属性高度相关,则可能出现了冗余。

数据变换

函数变换

通过某些函数变换,将原始数据进行转换。例如常用的求绝对值、平方、开方、取log、差分计算等。通过某些函数变换,可以将不具有正态分布的数据转换为正态分布的数据。在时间序列分析中,经常通过差分运算可以将非平稳序列转换为平稳序列。

规范化

不同的评价指标往往具有不用的量纲,数值间的差别可能很大,不进行处理可能影响数据分析的结果。机器学习中,规范化的数据也有利于学习率的调整和加快求解最优解。

最小-最大规范化

最小-最大规范化也称为离差标准化,是对原始数据的线性变换,将数值映射到0到1之间。
转换公式:

零均值规范化

零均值规范化(z-score 标准化)也称标准差标准化,经过处理后的数据均值为0,标准差为1。也是目前最常用的方法。转换公式:

其中:是原始数据的均值。是原始数据的标准差。

小数定标标准化

通过移动属性值的小数位数,将属性值映射到之间。转换公式如下:

其中k值取决于数值的绝对值的最大值,例如一个属性的最小值为-876,最大值为99,那么此时应该属性值除以1000,即k=3。

连续值离散化

在一些数据挖掘和机器学习模型中需要将连续值进行离散化。
常用的离散化方式主要用以下几种。

等宽法

将属性的值分成具有相同宽度的区间,区间的个数由数据本分决定。

等频法

将相同数量的记录放到各自的区间。

聚类法

通过kmeans算法将连续属性的值进行一维聚类。

等宽法、等频法都需要人为的划分区间个数,不同的区间个数对最终的数据分析会造成不同的影响。等宽法对离群点比较敏感,倾向不均匀的把属性值划分到各个区间。等频繁避免了区间数据量不均匀的问题,但是有可能造成将相同的数据值划分到不同的区间。kmeans在一定程度上缓解了上述问题

属性构造

在实际的数据过程中,现有的数据通常不能满足统计或者机器学习需要,这里就需要挖掘新的特征或属性了。例如查看一个人的收入和支出,挖掘出一个人每个月的剩余资金情况,总收入减去总支出;再例如判断事件发生的日期是否是节假日,通常某种情况下节假日的流量都突增突减。

发表 评论

电子邮件地址不会被公开。 必填项已用*标注

你可以使用 HTML 标签和属性: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>
*
*