归一化和反归一化python
时间: 2023-09-20 16:15:09 浏览: 73
归一化(Normalization)是将数据按照一定比例缩放到指定区间内,常用的归一化方法有 Min-Max 归一化和 Z-Score 归一化。
Min-Max 归一化将数据压缩到 [0, 1] 区间内,公式如下:
$$x_{norm} = \frac{x - x_{min}}{x_{max} - x_{min}}$$
其中,$x$ 是原始数据,$x_{min}$ 和 $x_{max}$ 分别是数据的最小值和最大值,$x_{norm}$ 是归一化后的数据。
反归一化是将归一化后的数据还原回原始数据,公式如下:
$$x = x_{norm} \cdot (x_{max} - x_{min}) + x_{min}$$
其中,$x_{norm}$ 是归一化后的数据,$x_{min}$ 和 $x_{max}$ 分别是数据的最小值和最大值,$x$ 是反归一化后的数据。
下面是 Python 代码实现:
```python
import numpy as np
# Min-Max 归一化
def min_max_normalize(data):
min_val = np.min(data)
max_val = np.max(data)
norm_data = (data - min_val) / (max_val - min_val)
return norm_data, min_val, max_val
# 反归一化
def min_max_denormalize(norm_data, min_val, max_val):
denorm_data = norm_data * (max_val - min_val) + min_val
return denorm_data
```
使用示例:
```python
data = np.array([1, 2, 3, 4, 5])
norm_data, min_val, max_val = min_max_normalize(data)
print(norm_data) # [0. 0.25 0.5 0.75 1. ]
denorm_data = min_max_denormalize(norm_data, min_val, max_val)
print(denorm_data) # [1. 2. 3. 4. 5.]
```
Z-Score 归一化将数据按照均值为 0,标准差为 1 进行归一化,公式如下:
$$x_{norm} = \frac{x - \mu}{\sigma}$$
其中,$x$ 是原始数据,$\mu$ 和 $\sigma$ 分别是数据的均值和标准差,$x_{norm}$ 是归一化后的数据。
反归一化的公式为:
$$x = x_{norm} \cdot \sigma + \mu$$
其中,$x_{norm}$ 是归一化后的数据,$\mu$ 和 $\sigma$ 分别是数据的均值和标准差,$x$ 是反归一化后的数据。
下面是 Python 代码实现:
```python
# Z-Score 归一化
def z_score_normalize(data):
mean_val = np.mean(data)
std_val = np.std(data)
norm_data = (data - mean_val) / std_val
return norm_data, mean_val, std_val
# 反归一化
def z_score_denormalize(norm_data, mean_val, std_val):
denorm_data = norm_data * std_val + mean_val
return denorm_data
```
使用示例:
```python
data = np.array([1, 2, 3, 4, 5])
norm_data, mean_val, std_val = z_score_normalize(data)
print(norm_data) # [-1.26491106 -0.63245553 0. 0.63245553 1.26491106]
denorm_data = z_score_denormalize(norm_data, mean_val, std_val)
print(denorm_data) # [1. 2. 3. 4. 5.]
```