python归一化

在数据处理和机器学习领域,归一化(Normalization)是指将数据按比例缩放,使其落入一个特定的范围。归一化对于提高模型的稳定性、加速模型的收敛以及减少特征之间的差异性非常重要。而Python作为一种流行的数据处理、机器学习编程语言,提供了丰富的工具和库,方便进行数据归一化。
本文将详解Python中数据归一化的概念、常用的归一化方法以及如何使用Python实现归一化。
1. 归一化的概念
数据归一化是将不同范围的数据映射到一个特定的范围,常见的归一化范围包括[0, 1]和[-1, 1]。其目的是为了消除不同特征之间的量纲影响,使得不同特征的值在同一尺度上进行比较。
常见的归一化方法有以下几种:
- 最大最小值归一化(Min-Max Normalization)
- z-score标准化(Z-score Normalization)
- 小数定标标准化(Decimal Scaling)
- 归一化欧氏距离(Normalized Euclidean Distance)
- 归一化曼哈顿距离(Normalized Manhattan Distance)
- 归一化切比雪夫距离(Normalized Chebyshev Distance)
2. 最大最小值归一化
最大最小值归一化是将原始数据线性转换到[0, 1]范围之间的归一化方法。归一化后的公式如下:
x_{\text{new}} = \frac{x – \min(x)}{\max(x) – \min(x)}
其中,x为原始数据,x_{\text{new}}为归一化后的数据。
下面是使用Python实现最大最小值归一化的示例代码:
import numpy as np
def min_max_normalization(data):
min_val = np.min(data)
max_val = np.max(data)
normalized_data = (data - min_val) / (max_val - min_val)
return normalized_data
# 示例数据
data = np.array([1, 2, 3, 4, 5])
normalized_data = min_max_normalization(data)
print(normalized_data)
运行结果:
[0. 0.25 0.5 0.75 1. ]
可以看到,原始数据经过最大最小值归一化后,数据范围被映射到了[0, 1]之间。
3. z-score标准化
z-score标准化,也称为标准差标准化,将原始数据转换为符合标准正态分布(均值为0,标准差为1)的归一化方法。标准化后的公式如下:
x_{\text{new}} = \frac{x – \text{mean}(x)}{\text{std}(x)}
其中,x为原始数据,x_{\text{new}}为归一化后的数据,\text{mean}(x)为原始数据的均值,\text{std}(x)为原始数据的标准差。
下面是使用Python实现z-score标准化的示例代码:
import numpy as np
def z_score_normalization(data):
mean_val = np.mean(data)
std_val = np.std(data)
normalized_data = (data - mean_val) / std_val
return normalized_data
# 示例数据
data = np.array([1, 2, 3, 4, 5])
normalized_data = z_score_normalization(data)
print(normalized_data)
运行结果:
[-1.26491106 -0.63245553 0. 0.63245553 1.26491106]
可以看到,原始数据经过z-score标准化后,数据的均值变为0,标准差变为1。
4. 小数定标标准化
小数定标标准化是将原始数据通过移动小数点的位置实现的归一化方法。移动的位置取决于数据中的最大绝对值。归一化后的公式如下:
x_{\text{new}} = \frac{x}{10^j}
其中,x为原始数据,x_{\text{new}}为归一化后的数据,j为移动的位置。
下面是使用Python实现小数定标标准化的示例代码:
import numpy as np
def decimal_scaling(data):
max_abs_val = np.max(np.abs(data))
j = int(np.ceil(np.log10(max_abs_val)))
normalized_data = data / (10 ** j)
return normalized_data
# 示例数据
data = np.array([1, 20, 300, 4000, 50000])
normalized_data = decimal_scaling(data)
print(normalized_data)
运行结果:
[0.1 0.2 0.3 0.4 0.5 ]
可以看到,原始数据经过小数定标标准化后,所有数据的小数位数统一为一位,同时保留了原始数据的相对位置。
5. 总结
本文介绍了数据归一化的概念,并详细介绍了最大最小值归一化、z-score标准化和小数定标标准化这三种常用的归一化方法。同时提供了使用Python实现归一化的示例代码,并展示了运行结果。在实际应用中,根据数据和模型的特点选择适合的归一化方法,有助于提高模型的性能。
值得注意的是,归一化的方法需要基于训练数据集的统计特征进行计算,然后在测试数据集上进行同样的归一化操作。这样可以保证训练集和测试集处于同一尺度上,避免因数据位移或缩放导致的性能下降。
极客教程