归一化和标准化是否改变数据分布的问题

归一化和标准化关于是否改变原始数据分布的探讨


最近在做关于ECG的降噪实验,在数据处理过程中需要进行归一化的操作,因此对常见的标准化和归一化做一下总结。

归一化

归一化的目的

  1. 将数值变为(0,1)之间的小数
  2. 把有量纲的表达式变为无量纲的表达式

归一化的优点

  1. 提升模型的收敛速度
  2. 提升模型的精度
  3. 深度学习中数据归一化可以防止模型梯度爆炸

常见的数据归一化方法

  1. min-max归一化: x ′ = x − m i n ( x ) m a x ( x ) − m i n ( x ) x^{'}=\frac{x-min(x)}{max(x)-min(x)} x=max(x)min(x)xmin(x)

这种是对数据的数值范围进行特定缩放,但不改变其数据分布的一种线性特征变换

#min-max数据归一化
import numpy as np
import matplotlib.pyplot as plt
import numpy as np
import scipy.io as sio
import os
import seaborn as sns
#Seaborn是一种基于matplotlib的图形可视化python libraty。它提供了一种高度交互式界面,便于用户能够做出各种有吸引力的统计图表。
import matplotlib
font_set=
### 归一化数据分布的影响 归一化是一种常见的数据预处理技术,用于调整特征数值的尺度,使得不同量级的数据能够在相同的范围内比较。这有助于提高模型训练的速度稳定性。 #### 最值归一化方法 最值归一化(Min-Max Scaling),也称为线性缩放,通过将原始数据映射到指定区间内来改变其分布特性。具体来说,该方法会把每个特征的最大最小值分别设为10,并按比例缩小其他值: \[ X' = \frac{X - X_{\text{min}}}{X_{\text{max}} - X_{\text{min}}} \] 其中 \(X'\) 表示转换后的数据,\(X\) 是原始数据,而 \(X_{\text{min}}\) \(X_{\text{max}}\) 则分别是对应列中的最小最大值[^2]。 这种变换方式保持了原变量之间的相对距离不变,即如果两个样本在一个属性上的差异较大,在经过最值归一化之后仍然保持着较大的差距;反之亦然。因此,当数据集中存在极端异常点时,可能会导致大部分正常数据被压缩至较小的空间内,从而影响后续分析效果。 #### 均值方差归一化方法 均值方差归一化(Z-score Normalization 或 Standard Score),则是基于统计学理论的一种标准化手段。它先计算各维度下的平均数μ以及标准偏差σ,再利用下述公式完成转化: \[ Z = \frac{(X-\mu)}{\sigma} \] 这里得到的新序列具有零期望与单位方差的特点,可以有效消除因测量单位不一致带来的干扰因素。 值得注意的是,这两种不同的归一化策略会对最终形成的概率密度函数造成显著区别。对于正态分布而言,采用后者能够更好地保留原有形态;而对于偏斜度较高的非对称型,则可能更倾向于前者以减少极值所带来的负面影响。 为了直观展示上述两种常见归一化的实际作用,下面给出一段Python代码片段作为示范: ```python import numpy as np from sklearn.preprocessing import MinMaxScaler, StandardScaler import matplotlib.pyplot as plt # 创建模拟数据集 np.random.seed(42) data = np.random.lognormal(mean=3., sigma=.75, size=(1000)) plt.figure(figsize=[18, 6]) # 绘制未处理前直方图 plt.subplot(1, 3, 1) plt.hist(data, bins='auto') plt.title('Original Data') # 应用MinMaxScaler并绘制结果 scaler_min_max = MinMaxScaler() scaled_data_mm = scaler_min_max.fit_transform(data.reshape(-1, 1)) plt.subplot(1, 3, 2) plt.hist(scaled_data_mm, bins='auto') plt.title('After Min Max Scaler') # 使用StandardScaler进行标准化后再画图 scaler_std = StandardScaler() scaled_data_zscore = scaler_std.fit_transform(data.reshape(-1, 1)) plt.subplot(1, 3, 3) plt.hist(scaled_data_zscore, bins='auto') plt.title('After Standard Scaler') plt.show() ``` 这段程序首先生成了一组服从对数正态分布的随机数作为初始输入,接着依次应用`MinMaxScaler()``StandardScaler()`来进行相应的归一化操作,最后对比展示了三种情况下各自对应的频率分布情况图表。
评论 16
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值