数据标准化和归一化的异同

简单来说,标准化是依照特征矩阵的列处理数据,其通过求Z-score的方法,将样本的特征值转换到同一量纲下。

归一化是依照特征矩阵的行处理数据,其目的在于样本向量在点成运算或其他和函数计算相似性时,拥有同一的标准。也就是说都转化为“单位向量”

--------------------------

对比一下代码的输出,即可明白StandardScaler()对列进行标准化

from sklearn import preprocessing
X = np.array([[ 1., -1.,  2.],
             [ 2.,  0.,  0.],
              [ 0.,  1., -1.]])
scaler = preprocessing.StandardScaler().fit(X)
print(X)
print(scaler)
print(scaler.mean_)
print(scaler.scale_)
x1=scaler.transform(X)
print(x1)

输出如下:

[[ 1. -1.  2.]
 [ 2.  0.  0.]
 [ 0.  1. -1.]]
StandardScaler(copy=True, with_mean=True, with_std=True)
[ 1.          0.          0.33333333]
[ 0.81649658  0.81649658  1.24721913]
[[ 0.         -1.22474487  1.33630621]
 [ 1.22474487  0.         -0.26726124]
 [-1.22474487  1.22474487 -1.06904497]]

--------------------------

from sklearn import preprocessing
import numpy as np
X = np.array([[ 1., -1.,  2.],
             [ 2.,  0.,  0.],
              [ 0.,  1., -1.]])
X_scaled = preprocessing.scale(X)
print(X_scaled)
print(X_scaled.mean(axis=0))
print(X_scaled.std(axis=0))
print(X_scaled.mean(axis=1))
print(X_scaled.std(axis=1))

输出:

[[ 0.         -1.22474487  1.33630621]
 [ 1.22474487  0.         -0.26726124]
 [-1.22474487  1.22474487 -1.06904497]]
[ 0.  0.  0.]
[ 1.  1.  1.]
[ 0.03718711  0.31916121 -0.35634832]
[ 1.04587533  0.64957343  1.11980724]

--------------------

把数变为(0,1)之间的小数

例1:{2.5 3.5 0.5 1.5}归一化后变成了{0.3125 0.4375 0.0625 0.1875}

解:2.5+3.5+0.5+1.5=8,

2.5/8=0.3125,

3.5/8=0.4375,

0.5/8=0.0625,

1.5/8=0.1875.

这个归一化就是将括号里面的总和变成1.然后写出每个数的比例

--------------------------

参考:R + python︱数据规范化、归一化、Z-Score :https://blog.csdn.net/sinat_26917383/article/details/51228217

----------------------------

在机器学习和数据挖掘中,经常会听到两个名词:归一化(Normalization)与标准化(Standardization)。它们具体是什么?带来什么益处?具体怎么用?本文来具体讨论这些问题。

一、是什么

1. 归一化

常用的方法是通过对原始数据进行线性变换把数据映射到[0,1]之间,变换函数为:

    其中max为样本数据的最大值,min为样本数据的最小值。这种方法有个缺陷就是当有新数据加入时,可能导致max和min的变化,需要重新定义。另外,最大值与最小值非常容易受异常点影响,所以这种方法鲁棒性较差,只适合传统精确小数据场景。

2. 标准化

常用的方法是z-score标准化,经过处理后的数据均值为0,标准差为1,处理方法是:

其中,其中μ是样本的均值, σ是样本的标准差,。该种归一化方式要求原始数据的分布可以近似为高斯分布,否标准化的效果会变得很糟糕。它们可以通过现有样本进行估计。在已有样本足够多的情况下比较稳定,适合现代嘈杂大数据场景。

二、带来什么

归一化的依据非常简单,不同变量往往量纲不同,归一化可以消除量纲对最终结果的影响,使不同变量具有可比性。比如两个人体重差10KG,身高差0.02M,在衡量两个人的差别时体重的差距会把身高的差距完全掩盖,归一化之后就不会有这样的问题。

标准化的原理比较复杂,它表示的是原始值与均值之间差多少个标准差,是一个相对值,所以也有去除量纲的功效。同时,它还带来两个附加的好处:均值为0,标准差为1。

均值为0有什么好处呢?它可以使数据以0为中心左右分布(这不是废话嘛),而数据以0为中心左右分布会带来很多便利。比如在去中心化的数据上做SVD分解等价于在原始数据上做PCA;机器学习中很多函数如SigmoidTanhSoftmax等都以0为中心左右分布(不一定对称)。

以上为两种比较普通但是常用的归一化技术,那这两种归一化的应用场景是怎么样的呢?什么时候第一种方法比较好、什么时候第二种方法比较好呢?下面做一个简要的分析概括:

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

2、在不涉及距离度量、协方差计算、数据不符合正太分布的时候,可以使用第一种方法或其他归一化方法。比如图像处理中,将RGB图像转换为灰度图像后将其值限定在[0 255]的范围。

猜你喜欢

转载自blog.csdn.net/m0_37870649/article/details/81562527