内容来源于其他博客,这里做了个汇总,侵删。
标准化归一化数据
数据标准化是将数据按比例缩放,使之落入一个小的特定区间。去除数据的单位限制,将其转化为无量纲的纯数值,便于不同单位或量级的指标能够进行比较和加权。最典型的就是数据的归一化处理,即将数据统一映射到[0,1]区间上。
归一化的作用:
1. 提升模型的收敛速度
如下图,x1的取值为0-2000,而x2的取值为1-5,假如只有这两个特征,对其进行优化时,会得到一个窄长的椭圆形,导致在梯度下降时,梯度的方向为垂直等高线的方向而走之字形路线,这样会使迭代很慢,相比之下,右图的迭代就会很(步长走多走少方向总是对的,不会走偏)
2.提升模型的精度
在多指标评价体系中,由于各评价指标的性质不同,通常具有不同的量纲和数量级。当各指标间的水平相差很大时,如果直接用原始指标值进行分析,就会突出数值较高的指标在综合分析中的作用,相对削弱数值水平较低指标的作用。
归一化常用方法:
方法一:min-max标准化(Min-max normalization)/0-1标准化(0-1 normalization)
公式如下。
其中max为样本数据的最大值,min为样本数据的最小值。
或者
其中
该方法的缺陷是当有新数据加入时,可能导致max和min的变化,需要重新定义。
方法二:log函数转换
公式如下。
max为样本数据最大值,并且所有的数据都要大于等于1。
方法三:反正切函数
反正切函数图像如下
公式如下。
使用这个方法需要注意的是如果想映射的区间为[0,1],则数据都应该大于等于0,小于0的数据将被映射到[-1,0]区间上,而并非所有数据标准化的结果都映射到[0,1]区间上。
方法四:标准差标准化
这种方法给予原始数据的均值(mean)和标准差(standard deviation)进行数据的标准化。
经过处理的数据符合标准正态分布,即均值为0,标准差为1,其转化函数为:
公式如下。
其中
将特征转化为一个数值向量
下面分别对无序特征、有序特征举例说明
无序特征
可以使用One-hot(也叫One-of-k)的方法把每个无序特征转化为一个数值向量。比如一个无序特征color有三种取值:red
,green
,blue
。那么可以用一个长度为3的向量来表示它,向量中的各个值分别对应于red
,green
,blue
。如:
这就类似于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作为一个区间,不会因为一个用户年龄长了一岁就变成一个完全不同的人。当然处于区间相邻处的样本会刚好相反,所以怎么划分区间是门学问;
特征离散化以后,起到了简化了逻辑回归模型的作用,降低了模型过拟合的风险。
下面给出一个简单示例:
比如取离散点
离散化方法的关键是怎么确定分段中的离散点。下面是常用的选取离散点的方法:
- 等距离离散:顾名思义,就是离散点选取等距点。我们上面对
x 取离散点{0.5,1.5,2.5} 就是一种等距离散,见下图。图中垂直的灰线代表离散点。 - 等样本点离散:选取的离散点保证落在每段里的样本点数量大致相同
- 画图观察趋势:以
x 为横座标,y 为纵座标,画图,看曲线的趋势和拐点。通过观察下面的图我们发现可以利用3条直线(红色直线)来逐段近似原来的曲线。把离散点设为两条直线相交的各个点,我们就可以把xx离散化为长度为3的向量。