机器学习_特征处理

内容来源于其他博客,这里做了个汇总,侵删。

标准化归一化数据

数据标准化是将数据按比例缩放,使之落入一个小的特定区间。去除数据的单位限制,将其转化为无量纲的纯数值,便于不同单位或量级的指标能够进行比较和加权。最典型的就是数据的归一化处理,即将数据统一映射到[0,1]区间上。

归一化的作用:
1. 提升模型的收敛速度
  如下图,x1的取值为0-2000,而x2的取值为1-5,假如只有这两个特征,对其进行优化时,会得到一个窄长的椭圆形,导致在梯度下降时,梯度的方向为垂直等高线的方向而走之字形路线,这样会使迭代很慢,相比之下,右图的迭代就会很(步长走多走少方向总是对的,不会走偏)

2.提升模型的精度
  在多指标评价体系中,由于各评价指标的性质不同,通常具有不同的量纲和数量级。当各指标间的水平相差很大时,如果直接用原始指标值进行分析,就会突出数值较高的指标在综合分析中的作用,相对削弱数值水平较低指标的作用。

归一化常用方法:

方法一:min-max标准化(Min-max normalization)/0-1标准化(0-1 normalization)

公式如下。

x=xminmaxmin

其中max为样本数据的最大值,min为样本数据的最小值。
或者
x=xxmeanmaxmin

其中xmean 为样本数据的平局值。
该方法的缺陷是当有新数据加入时,可能导致max和min的变化,需要重新定义。

方法二:log函数转换

公式如下。

x=log10(x)log10(max)

max为样本数据最大值,并且所有的数据都要大于等于1。

方法三:反正切函数

反正切函数图像如下

公式如下。

x=arctan(x)2π

使用这个方法需要注意的是如果想映射的区间为[0,1],则数据都应该大于等于0,小于0的数据将被映射到[-1,0]区间上,而并非所有数据标准化的结果都映射到[0,1]区间上。

方法四:标准差标准化

这种方法给予原始数据的均值(mean)和标准差(standard deviation)进行数据的标准化。

经过处理的数据符合标准正态分布,即均值为0,标准差为1,其转化函数为:

公式如下。

x=xμσ

其中μ 为所有样本数据的均值,σ 为所有样本数据的标准差。

将特征转化为一个数值向量

下面分别对无序特征有序特征举例说明

无序特征

可以使用One-hot(也叫One-of-k)的方法把每个无序特征转化为一个数值向量。比如一个无序特征color有三种取值:redgreenblue。那么可以用一个长度为3的向量来表示它,向量中的各个值分别对应于redgreenblue。如:
这里写图片描述

这就类似于NLP中的词向量模型

上面说的表达方式里有一个维度是可以省略的。既然我们知道color一定是取3个值中的一个,那么我们知道向量的前两个元素值,就能推断第3个值是多少。所以,其实用下面的方式就可以表达到底是哪种颜色:

这里写图片描述
这样表达的好处是少用了一个维度,降低了转化后特征之间的相关性。但在实际问题中特征基本都或多或少会有些缺失。使用第一种表达方式就可以用全0的向量来表示值缺失,而第二种表达方式是没法表达缺失的。

有序特征

有些特征虽然也像无序特征那样只取限定的几个值,但是这些值之间有顺序的含义。例如一个人的状态status有三种取值:bad, normal, good,显然bad < normal < good。对于这些状态的表达式可以如下图所示:

这里写图片描述

上面这种表达方式很巧妙地利用递进表达了值之间的顺序关系。

离散化

通常我们会将连续性特征离散化,是把原来的值分段,转化成一个取值为0或1的向量。原始值落在某个段里,向量中此段对应的元素就为1,否则为0。

这样做的优势是:

  • 离散特征的增加和减少都很容易,易于模型的快速迭代;
  • 稀疏向量内积乘法运算速度快,计算结果方便存储,容易扩展;
  • 离散化后的特征对异常数据有很强的鲁棒性:比如一个特征是年龄>30是1,否则0。如果特征没有离散化,一个异常数- - - 据“年龄300岁”会给模型造成很大的干扰;
  • 逻辑回归属于广义线性模型,表达能力受限;单变量离散化为N个后,每个变量有单独的权重,相当于为模型引入了非线- - 性,能够提升模型表达能力,加大拟合;
  • 离散化后可以进行特征交叉,由M+N个变量变为M*N个变量,进一步引入非线性,提升表达能力;
  • 特征离散化后,模型会更稳定,比如如果对用户年龄离散化,20-30作为一个区间,不会因为一个用户年龄长了一岁就变成一个完全不同的人。当然处于区间相邻处的样本会刚好相反,所以怎么划分区间是门学问;
    特征离散化以后,起到了简化了逻辑回归模型的作用,降低了模型过拟合的风险。

下面给出一个简单示例:
  比如取离散点{0.5,1.5,2.5} ,通过判断x 属于(,0.5)[0.5,1.5)[1.5,2.5)[2.5,+) 中哪段来把它离散化为4维的向量。下面是一些例子的离散结果:

离散化方法的关键是怎么确定分段中的离散点。下面是常用的选取离散点的方法:

  • 等距离离散:顾名思义,就是离散点选取等距点。我们上面对x 取离散点{0.5,1.5,2.5} 就是一种等距离散,见下图。图中垂直的灰线代表离散点。
  • 等样本点离散:选取的离散点保证落在每段里的样本点数量大致相同
  • 画图观察趋势:x 为横座标,y 为纵座标,画图,看曲线的趋势和拐点。通过观察下面的图我们发现可以利用3条直线(红色直线)来逐段近似原来的曲线。把离散点设为两条直线相交的各个点,我们就可以把xx离散化为长度为3的向量。
    这里写图片描述

参考

数据标准化/归一化normalization
机器学习模型为什么要将特征离散化
特征处理

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章