【ML】数据归一化处理

数据归一化是一种常用的预处理技术,它的目的是将不同范围的数据转换为相同范围的数据,这样可以使不同的数据具有相似的分布和取值范围。

常见的数据归一化方法有以下几种:

最值归一化(Min-Max Normalization)
最值归一化是将数据映射到[0,1]范围内,公式如下:

X_normalized = (X - Xmin) / (Xmax - Xmin)

其中,Xmin和Xmax分别是数据集中的最小值和最大值。

均值方差归一化(Standardization)
均值方差归一化是将数据转换为均值为0,方差为1的数据,公式如下:

X_normalized = (X - Xmean) / Xstd

其中,Xmean和Xstd分别是数据集的均值和标准差。

小数定标归一化
小数定标归一化是将数据的小数点移动到某一位置,使得数据范围在一定程度上缩小。例如,将数据的小数点向左移动2位,可以将数据的范围缩小100倍。

对数归一化
对数归一化是将数据取对数后进行归一化处理。这种方法通常用于处理数据的取值范围差异很大的情况。

数据归一化的目的是使得数据的分布更加规律
归一化处理可以使不同的数据具有相似的分布和取值范围,这在许多机器学习算法中是很有用的。例如,在使用梯度下降算法进行模型训练时,如果数据的范围差异很大,模型可能会在局部最小值附近来回震荡,导致收敛速度减慢。归一化处理可以使梯度下降算法更快地收敛,并且可以使模型的泛化能力更强。

但是,也要注意,如果数据已经具有相似的分布和取值范围,则不需要进行归一化处理。另外,在使用归一化处理后的数据进行模型训练后,在使用模型进行预测时,还需要将输入数据进行相应的反归一化处理,才能得到正确的预测结果。

使用pytorch进行归一化操作

normalize = transforms.Normalize((mean,), (std,))

其中 mean 为均值,std为方差,想进行归一化操作需要先计算出数据的均值和方差。

例如对MNIST数据集的处理:

# 定义图像处理方法
tranform = transforms.Compose([
    transforms.ToTensor(),  # 将图片转换成Tensor
    transforms.Normalize((0.1307,), (0.3081,))  # 进行数据归一化处理
])

其中 0.1307 和 0.3081 分别是MNIST的均值和方差,可以自己计算,也可以网上查
等同于 X_normalized = (X - 0.1307) / 0.3081,转化为均值为0,方差为1的数据。