数据预处理在建模中的重要性与常见方法(二):数据变化篇

1. 数据标准化

数据标准化是将数据转换到同一量纲,以消除不同量纲之间的影响,使数据具有可比性。常见的标准化方法包括Min-Max标准化和Z-score标准化。

1Min-Max标准化

应用场景:适用于对特征范围有要求的模型,如神经网络和支持向量机。

优点:保持了所有特征之间的关系,并且不会改变数据的分布。

缺点:对异常值敏感,容易受极端值影响。

2)Z-score标准化

应用场景:适用于假设数据符合正态分布的模型,如线性回归和逻辑回归。

优点:将数据转换为均值为0、标准差为1的标准正态分布,适合大多数机器学习算法。

缺点:对数据分布要求较高,不能很好地处理非正态分布的数据。

2. 数据归一化

数据归一化是将数据缩放到特定范围内,如[0, 1]或[-1, 1],以消除量级差异。

1)[0, 1]归一化

应用场景:适用于需要将数据压缩到特定范围内的场景,如图像处理和某些机器学习算法。

优点:避免了量纲不同导致的影响,适合处理特征值范围相差较大的数据。

缺点:对异常值敏感,容易受极端值影响。

2)[-1, 1]归一化

应用场景:适用于数据既包含正值又包含负值的场景,如音频信号处理。

优点:使数据均匀分布在[-1, 1]区间,有利于某些算法的收敛。

缺点:同样对异常值敏感,容易受极端值影响。

3. 数据平滑

数据平滑是通过消除噪声或波动,使数据更加平稳,以便更好地发现数据中的趋势和模式。常见的平滑方法包括移动平均法和指数平滑法。

1)移动平均法

应用场景:适用于时间序列数据的噪声消除,如股票价格和气温数据。

优点:简单易行,能够有效消除短期波动。

缺点:会滞后数据,导致平滑后的数据偏离真实值。

2)指数平滑法

应用场景:适用于时间序列数据的平滑和预测,如销量预测和趋势分析。

优点:能够较好地捕捉数据中的长期趋势,参数调整灵活。

缺点:需要设定平滑系数a,且对噪声较大的数据效果不佳。

各方法的对应代码实现:

以下是实现数据标准化、归一化和平滑的代码示例,并包括相关的可视化图片。

import numpy as np

import pandas as pd

import matplotlib.pyplot as plt

plt.rcParams['font.sans-serif']=['SimHei']

plt.rcParams['axes.unicode_minus']=False

# 生成示例数据

np.random.seed(0)

data = pd.DataFrame({

    'value': np.random.randn(100) * 10 + 50

})

# Min-Max标准化

data['min_max'] = (data['value'] - data['value'].min()) / (data['value'].max() - data['value'].min())

# Z-score标准化

data['z_score'] = (data['value'] - data['value'].mean()) / data['value'].std()

# [0, 1]归一化

data['normalization'] = (data['value'] - data['value'].min()) / (data['value'].max() - data['value'].min())

# [-1, 1]归一化

data['normalization_2'] = 2 * data['normalization'] - 1

# 移动平均法

data['moving_avg'] = data['value'].rolling(window=5).mean()

# 指数平滑法

alpha = 0.3

data['exp_smooth'] = data['value'].ewm(alpha=alpha).mean()

# 可视化

fig, axs = plt.subplots(3, 2, figsize=(12, 18))

# Min-Max标准化

axs[0, 0].plot(data['value'], label='Original', marker='o')

axs[0, 0].plot(data['min_max'], label='Min-Max Normalization', marker='x')

axs[0, 0].legend()

axs[0, 0].set_title('Min-Max Normalization')

# Z-score标准化

axs[0, 1].plot(data['value'], label='Original', marker='o')

axs[0, 1].plot(data['z_score'], label='Z-score Normalization', marker='x')

axs[0, 1].legend()

axs[0, 1].set_title('Z-score Normalization')

# [0, 1]归一化

axs[1, 0].plot(data['value'], label='Original', marker='o')

axs[1, 0].plot(data['normalization'], label='[0, 1] Normalization', marker='x')

axs[1, 0].legend()

axs[1, 0].set_title('[0, 1] Normalization')

# [-1, 1]归一化

axs[1, 1].plot(data['value'], label='Original', marker='o')

axs[1, 1].plot(data['normalization_2'], label='[-1, 1] Normalization', marker='x')

axs[1, 1].legend()

axs[1, 1].set_title('[-1, 1] Normalization')

# 移动平均法

axs[2, 0].plot(data['value'], label='Original', marker='o')

axs[2, 0].plot(data['moving_avg'], label='Moving Average', marker='x')

axs[2, 0].legend()

axs[2, 0].set_title('Moving Average')

# 指数平滑法

axs[2, 1].plot(data['value'], label='Original', marker='o')

axs[2, 1].plot(data['exp_smooth'], label='Exponential Smoothing', marker='x')

axs[2, 1].legend()

axs[2, 1].set_title('Exponential Smoothing')

plt.tight_layout()

plt.show()

可视化结果

标准化:

归一化:

数据平滑:

更多精彩干货:

  • 4
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值