1、 概念
?归一化: 1)把数据变成(0,1)或者(1,1)之间的小数。主要是为了数据处理方便提出来的,把数据映射到0~1范围之内处理,更加便捷快速。2)把有量纲表达式变成无量纲表达式,便于不同单位或量级的指标能够进行比较和加权。归一化是一种简化计算的方式,即将有量纲的表达式,经过变换,化为无量纲的表达式,成为纯量。
?? ? ? 公式如下(Min-max Normalization):
?
? ? ? ? ? ?
def normalization(datas): #归一化"""X = (x - X_min) / (X_max - X_min)"""_range = np.max(datas) - np.min(datas)return (datas - np.min(datas)) / _rangedef normalization(datas):""" 如果归一化后的范围是[-1, 1]的情况"""_range = np.max(abs(datas))return datas / _range
?标准化:在机器学习中,我们可能要处理不同种类的资料,例如,音讯和图片上的像素值,这些资料可能是高维度的,资料标准化后会使每个特征中的数值平均变为0(将每个特征的值都减掉原始资料中该特征的平均)、标准差变为1,这个方法被广泛的使用在许多机器学习算法中(例如:支持向量机、逻辑回归和类神经网络)。
? ? ? ?公式如下如所示(Z-score规范化):
? ? ? ? ? ? ? ? ?
def standardization(datas):#标准化""" X = (x - μ)/σ"""mu = np.mean(datas, axis=0)sigma = np.std(datas, axis=0)return (datas - mu) / sigma
中心化:平均值为0,对标准差无要求。
???? ? ? 公式如下(中心化):
?? ? ? ? ? ? ? ??
def standardization(datas):#中心化""" X = (x - μ)"""mu = np.mean(datas, axis=0)return (datas - mu)
2、 三者的区别
?归一化 和标准化 的区别:归一化是将样本的特征值转换到同一量纲下把数据映射到[0,1]或者[-1, 1]区间内,仅由变量的极值决定,因区间放缩法是归一化的一种。标准化是依照特征矩阵的列处理数据,其通过求z-score的方法,转换为标准正态分布,和整体样本分布相关,每个样本点都能对标准化产生影响。它们的相同点在于都能取消由于量纲不同引起的误差;都是一种线性变换,都是对向量X按照比例压缩再进行平移。
? ?标准化 和中心化 的区别:标准化是原始分数减去平均数然后除以标准差,中心化是原始分数减去平均数。 所以一般流程为先中心化再标准化。
? ?无量纲:是通过某种方法能去掉实际过程中的单位,从而简化计算。
3、为什么要归一化/标准化?
?归一化/标准化实质是一种线性变换,线性变换有很多良好的性质,这些性质决定了对数据改变后不会造成“失效”,反而能提高数据的表现,这些性质是归一化/标准化的前提。比如有一个很重要的性质:线性变换不会改变原始数据的数值排序。
简单来说有以下好处:
- 由于原始数据值的范围差异很大,因此在某些机器学习算法中,如果没有归一化,目标函数将无法正常工作。例如,许多分类器通过欧几里得距离来计算两点之间的距离。如果其中一个要素的取值范围较广,则该距离将受此特定要素支配。因此,所有特征的范围应归一化,以使每个特征对最终距离的贡献大致成比例。
- 可以使得梯度下降收敛更快
- 如果将正则化用作损失函数的一部分,则数据归一化也很重要(以便适当地对系数进行惩罚)
- 使用距离,协方差计算时,提高模型的精度(使不同量纲和数量级的数据可以进行比较和加权)
数据归一化后,最优解的寻优过程明显会变得平缓,更容易正确的收敛到最优解。