声明:内容来源于https://blog.csdn.net/Dhuang159/article/details/83627146

http://blog.csdn.net/pipisorry/article/details/52247379

这里主要讲连续型特征归一化的常用方法。离散参考[数据预处理:独热编码(One-Hot Encoding)]。

基础知识参考:

[均值、方差与协方差矩阵 ]

[矩阵论:向量范数和矩阵范数 ]

数据的标准化(normalization)和归一化

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

目前数据标准化方法有多种,归结起来可以分为直线型方法(如极值法、标准差法)、折线型方法(如三折线法)、曲线型方法(如半正态性分布)。不同的标准化方法,对系统的评价结果会产生不同的影响,然而不幸的是,在数据标准化方法的选择上,还没有通用的法则可以遵循。

归一化的目标

1 把数变为(0,1)之间的小数
        主要是为了数据处理方便提出来的,把数据映射到0~1范围之内处理,更加便捷快速,应该归到数字信号处理范畴之内。
2 把有量纲表达式变为无量纲表达式
        归一化是一种简化计算的方式,即将有量纲的表达式,经过变换,化为无量纲的表达式,成为纯量。 比如,复数阻抗可以归一化书写:Z = R + jωL = R(1 + jωL/R) ,复数部分变成了纯数量了,没有量纲。 
另外,微波之中也就是电路分析、信号系统、电磁波传输等,有很多运算都可以如此处理,既保证了运算的便捷,又能凸现出物理量的本质含义。

归一化后有两个好处

1. 提升模型的收敛速度

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


2.提升模型的精度

归一化的另一好处是提高精度,这在涉及到一些距离计算的算法时效果显著,比如算法要计算欧氏距离,上图中x2的取值范围比较小,涉及到距离计算时其对结果的影响远比x1带来的小,所以这就会造成精度的损失。所以归一化很有必要,他可以让各个特征对结果做出的贡献相同。

在多指标评价体系中,由于各评价指标的性质不同,通常具有不同的量纲和数量级。当各指标间的水平相差很大时,如果直接用原始指标值进行分析,就会突出数值较高的指标在综合分析中的作用,相对削弱数值水平较低指标的作用。因此,为了保证结果的可靠性,需要对原始指标数据进行标准化处理。

在数据分析之前,我们通常需要先将数据标准化(normalization),利用标准化后的数据进行数据分析。数据标准化也就是统计数据的指数化。数据标准化处理主要包括数据同趋化处理和无量纲化处理两个方面。数据同趋化处理主要解决不同性质数据问题,对不同性质指标直接加总不能正确反映不同作用力的综合结果,须先考虑改变逆指标数据性质,使所有指标对测评方案的作用力同趋化,再加总才能得出正确结果。数据无量纲化处理主要解决数据的可比性。经过上述标准化处理,原始数据均转换为无量纲化指标测评值,即各指标值都处于同一个数量级别上,可以进行综合测评分析。

从经验上说,归一化是让不同维度之间的特征在数值上有一定比较性,可以大大提高分类器的准确性。

3. 深度学习中数据归一化可以防止模型梯度爆炸。

数据需要归一化的机器学习算法

需要归一化的模型:

有些模型在各个维度进行不均匀伸缩后,最优解与原来不等价,例如SVM(距离分界面远的也拉近了,支持向量变多?)。对于这样的模型,除非本来各维数据的分布范围就比较接近,否则必须进行标准化,以免模型参数被分布范围较大或较小的数据dominate。
        有些模型在各个维度进行不均匀伸缩后,最优解与原来等价,例如logistic regression(因为θ的大小本来就自学习出不同的feature的重要性吧?)。对于这样的模型,是否标准化理论上不会改变最优解。但是,由于实际求解往往使用迭代算法,如果目标函数的形状太“扁”,迭代算法可能收敛得很慢甚至不收敛。所以对于具有伸缩不变性的模型,最好也进行数据标准化。

不需要归一化的模型:

ICA好像不需要归一化(因为独立成分如果归一化了就不独立了?)。

基于平方损失的最小二乘法OLS不需要归一化。

[线性回归与特征归一化(feature scaling)]

皮皮blog

常见的数据归一化方法

最常用的是 min-max标准化 和 z-score 标准化。

min-max标准化(Min-max normalization)/0-1标准化(0-1 normalization)/线性函数归一化/离差标准化

是对原始数据的线性变换,使结果落到[0,1]区间,转换函数如下:

其中max为样本数据的最大值,min为样本数据的最小值。

def Normalization(x):
    return [(float(i)-min(x))/float(max(x)-min(x)) for i in x]

如果想要将数据映射到[-1,1],则将公式换成:

x* = x* * 2 -1

或者进行一个近似

x* = (x - x_mean)/(x_max - x_min), x_mean表示数据的均值。

def Normalization2(x):
    return [(float(i)-np.mean(x))/(max(x)-min(x)) for i in x]

这种方法有一个缺陷就是当有新数据加入时,可能导致max和min的变化,需要重新定义。

z-score 标准化(zero-mean normalization)

最常见的标准化方法就是Z标准化,也是SPSS中最为常用的标准化方法,spss默认的标准化方法就是z-score标准化。

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

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

x* = (x - μ ) / σ

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

z-score标准化方法适用于属性A的最大值和最小值未知的情况,或有超出取值范围的离群数据的情况。该种归一化方式要求原始数据的分布可以近似为高斯分布,否则归一化的效果会变得很糟糕。

标准化的公式很简单,步骤如下

  1.求出各变量(指标)的算术平均值(数学期望)xi和标准差si ;
  2.进行标准化处理:
  zij=(xij-xi)/si
  其中:zij为标准化后的变量值;xij为实际变量值。
  3.将逆指标前的正负号对调。
  标准化后的变量值围绕0上下波动,大于0说明高于平均水平,小于0说明低于平均水平。

def z_score(x, axis):x = np.array(x).astype(float)xr = np.rollaxis(x, axis=axis)xr -= np.mean(x, axis=axis)xr /= np.std(x, axis=axis)# print(x)return x

为什么z-score 标准化后的数据标准差为1?

x-μ只改变均值,标准差不变,所以均值变为0

(x-μ)/σ只会使标准差除以σ倍,所以标准差变为1

这两种最常用方法使用场景:

1、在分类、聚类算法中,需要使用距离来度量相似性的时候、或者使用PCA技术进行降维的时候,第二种方法(Z-score standardization)表现更好。

2、在不涉及距离度量、协方差计算、数据不符合正太分布的时候,可以使用第一种方法或其他归一化方法。比如图像处理中,将RGB图像转换为灰度图像后将其值限定在[0 255]的范围。
原因是使用第一种方法(线性变换后),其协方差产生了倍数值的缩放,因此这种方式无法消除量纲对方差、协方差的影响,对PCA分析影响巨大;同时,由于量纲的存在,使用不同的量纲、距离的计算结果会不同。而在第二种归一化方式中,新的数据由于对方差进行了归一化,这时候每个维度的量纲其实已经等价了,每个维度都服从均值为0、方差1的正态分布,在计算距离的时候,每个维度都是去量纲化的,避免了不同量纲的选取对距离计算产生的巨大影响。
[再谈机器学习中的归一化方法(Normalization Method) ]

皮皮blog

log函数转换

通过以10为底的log函数转换的方法同样可以实现归一下,具体方法如下:

看了下网上很多介绍都是x*=log10(x),其实是有问题的,这个结果并非一定落到[0,1]区间上,应该还要除以log10(max),max为样本数据最大值,并且所有的数据都要大于等于1。

atan函数转换

用反正切函数也可以实现数据的归一化。

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

Decimal scaling小数定标标准化

这种方法通过移动数据的小数点位置来进行标准化。小数点移动多少位取决于属性A的取值中的最大绝对值。

将属性A的原始值x使用decimal scaling标准化到x'的计算方法是:
x'=x/(10^j)
其中,j是满足条件的最小整数。
例如 假定A的值由-986到917,A的最大绝对值为986,为使用小数定标标准化,我们用每个值除以1000(即,j=3),这样,-986被规范化为-0.986。
注意,标准化会对原始数据做出改变,因此需要保存所使用的标准化方法的参数,以便对后续的数据进行统一的标准化。

Logistic/Softmax变换

[Sigmod/Softmax变换 ]

模糊量化模式

新数据=1/2+1/2sin[派3.1415/(极大值-极小值)*(X-(极大值-极小值)/2) ] X为原数据

皮皮blog

数据标准化/归一化的编程实现

python库实现和调用

[Scikit-learn:数据预处理Preprocessing data ]

from: http://blog.csdn.net/pipisorry/article/details/52247379

先前一直在纠结Standardization(标准化)和Normalization(归一化)的区别,参考了知乎(https://www.zhihu.com/question/20467170)的一篇文章才终于弄懂。

其实Standardization和Normalization在不同的领域是有不同的定义的,一直以来弄不清楚的原因也是因为混用了,现在从统计学、机器学习、sklearn的preprocessing模块3个方面来区分,参考资料为:

统计学:https://en.wikipedia.org/wiki/Normalization_(statistics)

机器学习:https://en.wikipedia.org/wiki/Feature_scaling

sklearn的preprocessing:

因为Normalization有几个意思,为方便,在本文,统一把Normalization翻译为归一化,Standardization翻译为标准化。

从统计学上:
在统计学上没有Standardization,只有Normalization,不管是把数据变为均值为0,方差为1的正态分布,还是把数据映射到[0,1],都叫Normalization,其包括如下几种公式:

从机器学习上:
在机器学习上,叫Feature Sacling,也叫Normalization,其主要为:

2个归一化:

Rescaling (min-max normalization):
Mean normalization:

1个标准化(把数据分布变为正态分布):

Standardization:
一个正则化(x除以L2范数):

Scaling to unit length:
所以,在机器学习里,把数据变为正态分布是标准化,把数据的范围缩放到[0,1]是归一化。

从sklearn的preprocessing上:
在preprocessing里,不管是把数据分布变为均值为0,方差为1的正态分布还是把数据缩放到[0,1]都叫Standardization,当然把数据缩放为[-1,1]也叫Standardization,preprocessing里的Normalization里只包括正则化,即把x除以L1-范数或L2范数。

标准化的方法远不止上述这些。缩放归一化,坐标中心化,旋转归一化,指数/对数归一化等

数据归一化和标准化的区别相关推荐

  1. python数据挖掘学习01:数据归一化与标准化

    数据归一化与标准化均是数据特征无量纲化处理方式,而无量纲化是指通过一个合适的变量替代,将一个涉及物理量的方程的部分或全部的单位移除,以求简化实验或者计算的目的,是科学研究中一种重要的处理思想. 无量纲 ...

  2. 数据归一化、标准化和去中心化

    数据预处理,一般有数据归一化.标准化和去中心化. 归一化 将数据映射到[0,1]或[-1,1]区间范围内,不同特征的量纲不同,值范围大小不同,存在奇异值,对训练有影响. 标准化 将数据映射到满足标准正 ...

  3. python 归一化_Python 数据归一化、标准化、正则化 (机器学习)

    数据归一化.标准化.正则化 1.归一化 是将数据放缩到0~1区间,利用公式(x-min)/(max-min) 2.标准化 将数据转化为标准的正态分布,均值为0,方差为1 3.正则化 正则化的主要作用是 ...

  4. 数据处理:归一化、标准化及其区别

    归一化: 把数据变成(0,1)之间的小数.主要是为了数据处理方便提出来的,把数据映射到0-1范围之内处理,更加便捷快速.把有量纲表达式变成无量纲表达式,便于不同单位或量级的指标能够进行比较和加权.归一 ...

  5. Matlab数据归一化和标准化函数

    在用Matlab建立bp神经网络时,需要对特征值进行缩放,进行归一化.遇到以后,查阅了一些文章,进行了一些汇总. 标准化 premnmx()函数 用于将网络的输入数据或输出数据进行归一化,归一化后的数 ...

  6. 数据预处理之标准化(Standardization)、归一化(Normalization)、中心化/零均值化(Zero-centered)

    一.数据标准化的意义: 1.数据的量纲不同:数量级差别很大 经过标准化处理后,原始数据转化为无量纲化指标测评值,各指标值处于同一数量级别,可进行综合测评分析. 如果直接用原始指标值进行分析,就会突出数 ...

  7. 数据的规范化,归一化,标准化,正则化

    原文地址:数据的规范化,归一化,标准化,正则化作者:打湿井盖 数据的规范化,归一化,标准化,正则化,这几个破词整得我头晕,首先这些词就没规范好,对数据做实验更晕,网上狂搜一阵后,发现数据归一化,标准化 ...

  8. 标准正态分布表_表达矩阵的归一化和标准化,去除极端值,异常值

    我们阅读量破万的综述:RNA-seq这十年(3万字长文综述)给粉丝朋友们带来了很多理解上的挑战,所以我们开辟专栏慢慢介绍其中的一些概念性的问题,上一期: RNA-seq的counts值,RPM, RP ...

  9. 数据归一化 normlization.m 及 Z-score(bsxfun)与mapminmax区分

    对归一化和标准化有疑惑,整理了Z-score和mapminmax的用法区分,参考链接放在文末. function data = normlization(data, choose) 数据归一化函数可以 ...

  10. 归一化、标准化、中心化

    一.概念 归一化:把数据变成 [0,1] 或 [-1,1] 之间的小数.主要是为了数据处理方便提出来的,把数据映射到0-1范围之内处理,更加便捷快速.是一种简化计算的方式,将有量纲的表达式,经过变换, ...

最新文章

  1. reactjs组件通信方式总结
  2. 问题之JVM_Bind
  3. HTTP Server Error 500 内部服务器错误
  4. 使用LinkedHashMap的Code4ReferenceList最近使用(LRU)实现
  5. vue 3.x 中使用ele-image时相对路径的图片加载失败
  6. 位运算在一类数组题中的用法 只出现一次的数字I
  7. 投资数据中心所考虑的重要因素
  8. Android View移动的六种方法
  9. 北广传媒RTMP流媒体服务器漏洞
  10. 编码格式与Datatable数据
  11. 用PHP做服务器接口客户端用http协议POST访问安全性一般怎么做
  12. Activiti6驳回上一节点
  13. WPS OFFICE
  14. 计算机质量监督检验报告,质量监督检验(检测)报告自动生成管理系统软件
  15. 大数据和云计算到底是何关系?
  16. Js 嵌套if选择结构
  17. sparc-linux-gcc math.h 调用,无法使用叮进行交叉编译为SPARC
  18. Wargames学习笔记--Natas
  19. 手机用计算机微信运动记步吗,微信运动怎么用?微信运动计步功能使用方法介绍...
  20. Android之绘制动态折线图

热门文章

  1. Neural Networks and Deep Learing笔记:一个简单的识别手写数字的神经网络
  2. 坑多路难走,学数据分析转行前要知道培训机构不会说的事情
  3. 究竟云计算就业前景好不 零基础如何学云计算
  4. 扁平化组织和层级化组织
  5. 12v工业计算机主机,ARM一体机 工业电脑,低功耗主机 AM3352
  6. 蓝桥杯 java 时间显示
  7. VCSA5.5升级6.5u1提示VUM出错和证书错误的解决办法
  8. 解析xml的四种方式
  9. Linux文件莫名被删除,【Linux】Linux文件被删除后的恢复方法
  10. matlab保存pdf图片太大,matlab中的图片保存方法精选.pdf