标准化、归一化、正态化:联系与区别
标准化、归一化、正态化:联系与区别
标准化、归一化和正态化是数据预处理中的重要概念,它们在机器学习和数据科学领域有着广泛的应用。本文详细介绍了这三个概念的定义、特点、优缺点以及应用场景,并通过具体示例帮助读者理解它们之间的联系与区别。
一.标准化(Standardization)
定义
标准化是数据预处理中的一种常用技术,特别是在机器学习和统计分析中。它的目的是将数据调整到一个标准范围内,以便不同特征的尺度一致,从而提高算法的性能和收敛速度。标准化通常涉及以下步骤:
计算均值和标准差:
首先计算数据集的均值(μ)和标准差(σ)。均值是所有数据点的平均值,标准差是衡量数据点与均值之间差异的度量。转换数据:
然后,对每个数据点进行转换,使其均值为0,标准差为1。转换公式为:
$$z = \frac{x - \mu}{\sigma}$$
其中 x是原始数据点,μ 是数据集的均值,σ 是数据集的标准差,z 是转换后的数据点。处理结果:
经过标准化处理后,数据的均值变为0,标准差变为1。这意味着数据的分布更加集中,大多数数据点将位于均值附近,且数据的波动范围被限制在较小的区间内。
特点
标准化(Standardization):将数据按照比例进行缩放,不改变数据的原始分布,缩放后的数据均值为0,方差为1。
标准化的优点
- 提高算法性能:
- 许多机器学习算法,如支持向量机(SVM)、K-近邻(KNN)和线性回归等,对数据的尺度非常敏感。标准化可以提高这些算法的性能,因为它们通常假设所有特征具有相同的尺度。
- 加速收敛:
- 在优化算法中,如梯度下降,标准化可以加速收敛速度。这是因为标准化后的数据梯度变化更加平滑,有助于算法更快地找到最优解。
- 提高数值稳定性:
- 标准化可以提高数值计算的稳定性,特别是在涉及距离计算的算法中,如 K-近邻,支持向量机等。因为标准化可以防止某些特征由于数值范围大而在计算距离时占主导地位。
- 数据可比性:
- 当不同特征的尺度差异较大时,标准化可以使这些特征在数值上具有可比性,这对于特征选择和特征工程非常重要。
标准化的缺点
- 对异常值敏感:
- 标准化对异常值非常敏感,因为均值和标准差都可能受到异常值的影响。在这种情况下,可能需要先对数据进行清洗或使用其他预处理方法。
- 信息丢失:
- 在某些情况下,标准化可能会导致数据中某些信息的丢失,特别是当数据的分布非常不均匀时。
API
在 Python 中,可以使用 scikit-learn 库中的 StandardScaler 类来实现标准化:
from sklearn.preprocessing import StandardScaler
scaler = StandardScaler()
data_standardized = scaler.fit_transform(data)
这里,data 是原始数据,data_standardized 是标准化后的数据。fit_transform 方法首先计算数据的均值和标准差,然后应用转换。
总之,标准化是数据预处理中的一个重要步骤,它有助于提高机器学习算法的性能和稳定性。
拓展:标准化计算过程举例
让我们通过一个简单的例子来说明标准化(Standardization)的计算过程。假设我们有一个数据集,包含一个特征的四个数据点:[10, 20, 30, 40]。
步骤 1: 计算均值(Mean)
均值是所有数据点的总和除以数据点的数量。
步骤 2: 计算标准差(Standard Deviation)
标准差衡量数据点与均值之间的差异。首先计算方差(Variance),然后取方差的平方根得到标准差。
步骤 3: 标准化转换
使用均值和标准差对每个数据点进行标准化转换。
对于 x=10:
$$z = \frac{10 - 25}{12.91} = -1.34$$对于 x=20:
$$z = \frac{20 - 25}{12.91} = -0.45$$对于 x=30:
$$z = \frac{30 - 25}{12.91} = 0.45$$对于 x=40:
$$z = \frac{40 - 25}{12.91} = 1.34$$
结果
标准化后的数据集为:[-1.34, -0.45, 0.45, 1.34]。
验证
- 均值:μ′={−1.34+(−0.45)+0.45+1.34} /4=0
- 标准差:σ′=1
这个例子展示了如何将一个简单的数据集标准化,使其均值为0,标准差为1。这种转换有助于在许多机器学习算法中提高性能和稳定性。
二.归一化(Normalization)
定义
归一化(Normalization)是数据预处理中的一种技术,目的是将数据的数值范围调整到一个特定的区间,通常是 [0, 1] 或 [-1, 1],还可以是各种区间,比如在图像中可能会映射到[0, 255]。归一化处理后,所有特征的尺度一致,这有助于算法更有效地处理数据,尤其是在涉及距离计算的算法中。归一化通常包括以下步骤:
- 最小-最大归一化(Min-Max Normalization):
- 这是最常见的归一化方法,它将原始数据的每个值 x转换为一个新的值 x′,使得转换后的数据范围在 [0, 1] 之间。转换公式为:
$$x' = \frac{x - \min(x)}{\max(x) - \min(x)}$$
其中,min(x) 是数据集中的最小值,max(x)是数据集中的最大值。
均值归一化(Mean Normalization):
转换公式为:
$$x' = \frac{x - \mu}{\max(x) - \min(x)}$$
转换后的数据范围在[-1,1]之间.Z得分归一化(Z-Score Normalization):
- 这种方法也称为标准化或标准差归一化,它使用数据的均值和标准差进行转换。转换公式为:
$$z = \frac{x - \mu}{\sigma}$$
其中,μ 是数据集的均值,σ 是数据集的标准差。
特点
归一化(Normalization),不改变数据的原始分布,而是要把数据缩放到某个范围里.
归一化的优点
- 加快学习算法的收敛速度:
- 归一化可以加快基于梯度的优化算法的收敛速度,因为它确保了不同特征的梯度更新步长一致。
- 提高算法性能:
- 在涉及距离计算的算法中,如 K-近邻(KNN)和 K-均值聚类,归一化可以提高算法的性能,因为它确保了所有特征对距离的贡献是公平的。
- 防止数值问题:
- 归一化可以防止数值问题,如数值下溢或上溢,特别是在涉及大量数据的计算中。
- 数据可比性:
- 当不同特征的数值范围差异较大时,归一化可以使这些特征在数值上具有可比性。
归一化的缺点
- 对异常值敏感:
- 归一化对异常值非常敏感,因为最小-最大归一化方法特别容易受到异常值的影响。
- 数据分布改变:
- 归一化可能会改变数据的分布,特别是当数据不是均匀分布时。
API
在 Python 中,可以使用 scikit-learn 库中的 MinMaxScaler 类来实现最小-最大归一化:
from sklearn.preprocessing import MinMaxScaler
scaler = MinMaxScaler()
data_normalized = scaler.fit_transform(data)
这里,data 是原始数据,data_normalized 是归一化后的数据。fit_transform 方法首先计算数据的最小值和最大值,然后应用转换。
总之,归一化是数据预处理中的一个重要步骤,它有助于提高机器学习算法的性能和稳定性。选择合适的归一化方法取决于数据的特性和算法的需求。
三.正态化(Normalization) 和 正态分布(Normal Distribution)
正态化(Normalization)是改变数据的原始分布,使其服从正态分布, 是非线性变换。通常采用的方法有取对数,开平方根,取倒数,开平方,取指数等等,使得不对称分布的数据(偏态数据)呈现(或近似)正态分布。要这么做的原因在于:有些机器学习方法,比如线性回归模型就默认数据是正态分布。
正态分布(Normal Distribution),也称为高斯分布(Gaussian Distribution),是连续概率分布的一种。正态分布是以数据的均值为中心,以标准差为尺度自然分布的.
特点
- 对称性:
- 正态分布是关于其均值对称的,这意味着均值(μ)、中位数和众数都是相等的。
- 钟形曲线:
- 正态分布的概率密度函数图像是一个钟形曲线,通常称为正态曲线。
- 均值(Mean):
- 均值决定了分布的中心位置。
- 标准差(Standard Deviation):
- 标准差决定了分布的扩散程度。标准差越大,曲线越平坦,数据分布越分散;标准差越小,曲线越陡峭,数据分布越集中。
数学表达
正态分布的概率密度函数(PDF)由以下公式给出:
$$f(x) = \frac{1}{\sigma \sqrt{2\pi}} e^{-\frac{(x-\mu)^2}{2\sigma^2}}$$
其中:
- μ是均值。
- σ是标准差。
- $\sigma^2$是方差。
应用
- 机器学习和数据科学:
- 在机器学习中,正态分布用于初始化权重,也用于假设数据的分布进行概率图模型的构建。
标准正态分布
标准正态分布是正态分布的一个特例,其均值为0,标准差为1。在标准正态分布中,数据的分布更加标准化,便于进行比较和计算。
68-95-99.7规则(经验法则)
正态分布中有一个著名的经验法则,称为68-95-99.7规则,它说明了数据落在均值周围某个区间内的概率:
- 大约68%的数据落在均值的一个标准差范围内。
- 大约95%的数据落在均值的两个标准差范围内。
- 大约99.7%的数据落在均值的三个标准差范围内。
这个规则在实际应用中非常有用,可以帮助快速估计数据的分布情况。
四.三者的关系
1.标准化、归一化和正态化的英文表达
- 标准化(Standardization)
- 归一化(Normalization)
- 正态化(Normalization)
需要注意的是,在大多数情况下,这三个概念在英文中都可用"Normalization" 表达。
2.标准化和正态分布的关系
很多初学者认为,一旦我们进行了标准化,数据的分布就会呈正态分布.这种认知是错误的.
举个例子.以一个偏态分布为例:
当我们对这种分布 进行标准化处理后,变为如下形状:
可见,并没有变为正态分布的形状.
事实上,标准化操作(也称为Z分数标准化)只是线性变换(即缩放和平移),它的主要目的是将数据的均值调整为0,标准差调整为1,但它不会改变数据的原始分布形状。(如果我们想要改变数据的整体形态,那么我们需要采取一些非线性变换,比如取对数,平方根等.)如果原始数据是正态分布的,那么标准化后的数据也将是正态分布的,如果原始数据不是正态分布的,那么标准化后的数据也不会自动变成正态分布。
例如,如果原始数据是指数分布或均匀分布,标准化后的数据将保留这些分布的特征,只是均值和标准差被调整了。
因此,标准化是一种改变数据尺度的预处理方法,而不是一种改变数据分布形态的方法。
3.标准化和归一化的区别与联系
联系:
标准化和归一化其实本质上都是对数据的线性变换,(也就是说,变换前后,数据的形状是一样的,数据的分布形状没有改变)
区别:
- 归一化的数据,会严格限定变换后的范围区间; 而标准化的数据,在变换之后就没有固定的数据范围, 只是均值为0, 标准差为1。
- 归一化的数据缩放比例可能只和极值有关, 而标准化的数据的缩放比例会受到每个数据的影响。
4.torch.randn()指令
这里的 "randn" 是 "random normal" 的缩写,意味着随机正态分布。因此,当你调用 torch.randn(*sizes) 时,PyTorch 会创建一个或多个服从正态分布的随机数,并将它们填充到指定形状的张量中。
五.使用场景
- 如果对处理后的数据范围有严格要求,使用归一化。
- 如果数据不稳定,存在极端的最大最小值,建议使用标准化。
- 使用距离度量相似性或者使用PCA技术进行降维的时候,建议使用标准化。
- 一般来讲,只要模型涉及距离计算的,都需要使用标准化或者归一化,具体使用哪个方法,可以视模型的实际情况来确定。
- 在使用梯度下降算法求解最优化问题的时候,使用标准化或者归一化的方法可以加快梯度下降的求解速度, 提升模型的收敛速度。