概述
标准化,Standardization,有时也将 标准化 称为 归一化
在已有样本足够多的情况下比较稳定,适合现代嘈杂大数据场景。
Z-score标准化(0均值归一化)
是最常见的标准化,又称:标准差标准化
结果:数据 均值为0、标准差为1 ,符合正态分布,公式如下:
解释:
- x是原始数据
- u是原始数据的 平均值
- σ原始数据的 标准差
原理
表示 原始值 与 均值 之间差多少个标准差,是一个相对值,所以也有 去除量纲 的功效。
- x-μ,计算结果的 平均值变为0
- (x-μ)/σ 除以标准差,计算结果的标准差为1
均值为0,标准差为1 好处
可以使数据以0为中心左右分布,而数据以0为中心左右分布会带来很多便利。
比如:机器学习中很多函数如Sigmoid、Tanh、Softmax等都以0为中心左右分布(不一定对称)
应用场景
神经网络需要标准化处理,一般变量的取值在-1到1之间,这样做是为了弱化某些变量的值较大而对模型产生影响。
在K近邻算法中,如果不对解释变量进行标准化,那么具有小数量级的解释变量的影响就会微乎其微。
实现
numpy实现标准化
import numpy as np
l=[
[7,180,300000,70],
[3,172,200000,110],
[5,168,250000,190],
[8,185,60000,0],
[4,178,36000,80],
[6,175,48000,120]
]
arr=np.array(l)
def z_score(x):
mn=np.mean(x,axis=0)
std=np.std(x,axis=0)
return (x-mn)/std
ret=z_score(arr)
print("标准化:\n",ret)
sklearn实现标准化
import numpy as np
l=[
[7,180,300000,70],
[3,172,200000,110],
[5,168,250000,190],
[8,185,60000,0],
[4,178,36000,80],
[6,175,48000,120]
]
arr=np.array(l)
from sklearn import preprocessing
ret = preprocessing.scale(arr)
print("标准化:\n",ret)
感谢:
https://blog.csdn.net/zenghaitao0128/article/details/78361038
