常见数据归一化的几种方法

常见的数据归一化方法

min-max标准化(Min-max normalization)/0-1标准化(0-1 normalization)

也叫离差标准化,是对原始数据的线性变换,使结果落到[0,1]区间,转换函数如下:

其中max为样本数据的最大值,min为样本数据的最小值。

def Normalization(x):
    return [(float(i)-min(x))/float(max(x)-min(x)) for i in x]

如果想要将数据映射到[-1,1],则将公式换成:

x∗=x−xmean/xmax−xmin

x_mean表示数据的均值。

def Normalization2(x):
    return [(float(i)-np.mean(x))/(max(x)-min(x)) for i in x]

这种方法有一个缺陷就是当有新数据加入时,可能导致max和min的变化,需要重新定义。

log函数转换

通过以10为底的log函数转换的方法同样可以实现归一下,具体方法如下:

看了下网上很多介绍都是x*=log10(x),其实是有问题的,这个结果并非一定落到[0,1]区间上,应该还要除以log10(max),max为样本数据最大值,并且所有的数据都要大于等于1。

### 数据归一化常见方法及其在机器学习或深度学习中的作用 #### 1. 常见归一化方法 数据归一化是将原始数据转换到特定范围或分布的过程,以确保模型能够更高效地训练。以下是几种常见归一化方法: - **最小最大归一化(Min-Max Scaling)** 最小最大归一化是一种线性变换方法,将数据缩放到指定的区间(通常是[0, 1]或[-1, 1])。其公式为: \[ x' = \frac{x - \text{min}(x)}{\text{max}(x) - \text{min}(x)} \] 其中 \(x\) 是原始数据,\(x'\) 是归一化后的数据[^4]。 - **Z-Score标准化(Standardization)** Z-Score标准化将数据转换为均值为0、标准差为1的标准正态分布。其公式为: \[ x' = \frac{x - \mu}{\sigma} \] 其中 \(\mu\) 是数据的均值,\(\sigma\) 是数据的标准差[^4]。 - **小数定标归一化(Decimal Scaling)** 小数定标归一化通过移动数据的小数点位置来实现归一化。具体而言,将数据除以 \(10^j\),直到所有数据的最大绝对值小于1。其公式为: \[ x' = \frac{x}{10^j} \] 其中 \(j\) 是使得 \(\text{max}(|x|) < 1\) 的最小整数[^4]。 - **Log归一化** Log归一化适用于处理具有长尾分布的数据。通过对数函数对数据进行变换,可以有效压缩数据范围。其公式为: \[ x' = \log(x) \] 或者结合最小最大归一化进一步缩放到[0, 1]区间。 --- #### 2. 归一化的作用 - **加速算法收敛** 许多基于梯度的优化算法(如梯度下降)在特征处于相似尺度时表现更好。归一化通过将所有特征缩放到相同的尺度(如[0, 1]或[-1, 1]),可以减少不同特征之间的尺度差异,从而加速算法的收敛速度。 - **提高模型稳定性** 在深度学习中,归一化技术(如批量归一化、层归一化等)已成为提升网络表现和稳定性的关键步骤。它们通过调整每一层的输入分布,缓解了梯度消失和梯度爆炸问题,并允许使用更大的学习率[^1]。 - **增强模型泛化能力** 数据归一化可以减少噪声对模型的影响,帮助模型更好地学习到数据中的潜在模式和规律。此外,归一化还与正则化技术(如权重衰减、丢弃法等)结合使用,进一步提升模型的泛化能力[^3]。 - **避免数值不稳定** 在某些情况下,数据的原始尺度可能非常大或非常小,导致数值计算不稳定。归一化可以有效避免这种情况,确保模型训练过程中的数值稳定性。 --- #### 3. 实现代码示例 以下是一个使用Python实现最小最大归一化和Z-Score标准化的代码示例: ```python import numpy as np # 最小最大归一化 def min_max_scaling(data): return (data - np.min(data)) / (np.max(data) - np.min(data)) # Z-Score标准化 def z_score_standardization(data): return (data - np.mean(data)) / np.std(data) # 示例数据 data = np.array([1, 2, 3, 4, 5]) # 应用归一化 normalized_data_min_max = min_max_scaling(data) normalized_data_z_score = z_score_standardization(data) print("Min-Max Normalized Data:", normalized_data_min_max) print("Z-Score Standardized Data:", normalized_data_z_score) ``` ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值