归一化、标准化和正则化都是对数据进行处理的,那么这三种有什么区别呢?
归一化(normalization)
归一化有两个作用:
- 把数据映射到(0,1)之间方便处理
- 把有量纲表达式变换为无量纲表达式,成为纯量。经过归一化处理的数据,处于同一数量级,可以消除指标之间的量纲和量纲单位的影响,提高不同数据指标之间的可比性。
归一化的主要方法
1.线性转换,即min-max归一化:
2.对数函数转换:
3.反余切函数转换:
y=atan(x)*2/PI
可实现代码
'''MinMaxScaler方法'''
from sklearn import preprocessing
scaler = preprocessing.MinMaxScaler(feature_range=(0,1), copy=True)
scaler.fit_transform(data)
分别对每一列做做最小最大化归一化,特征范围默认为(0,1)之间,原理比较简单,不再累述,详见官方文档
标准化(Standardization)
数据的标准化是将数据按比例缩放让数据落入某一特定区间内,使均值为0。公式为:
与归一化相比,标准化更为常见,原因如下:
- 标准化更好的保持了样本间的距离,当样本中存在异常点时,归一化有可能将正常值挤到一起,而标准化则不会,例如[1, 2, 10000],假设10000是异常值,那么归一化之后就会变成[0, 0.0001, 1],正常值1和2就被挤到了一块。如果不幸的是,1和2不是同一标签,那么我们在用梯度下降做模型训练时,模型会花更长的时间收敛,但标准化的结果是[-0.70721286,0.7070007,1.41421356],不会将样本“挤到”一起去;
- 标准化更符合统计学假设。对于一个数值特征来说,很大可能它是服从正太分布的,而标准化是基于这个假设,将正态分布调整为标准正态分布。
主要方法:
标准化最常用的方法是Z-Score方法,
'''StandardScaler方法'''
from sklearn import preprocessing
scaler = preprocessing.StandardScaler(copy=True, with_mean=True,with_std=True)
scaler.fit_transform(data)
计算公式为:
u为每列训练样本均值,s为每列标准差,详见官方文档
正则化(Regularization)
'''normalize方法'''
from sklearn import preprocessing
scaler = preprocessing.normalize(data,norm='l2',axis=1,return_norm=False)
norm='l1','l2'或'max',默认为‘l2’
官方文档
参考博客:
数据归一化、标准化和正则化
归一化,标准化,正则化的概念和区别
sklearn.preprocessing官方文档