时间序列数据预处理:归一化和标准化等方法

归一化和标准化的定义

归一化

归一化是对原始范围内的数据进行重新缩放,以使所有值都在0和1的范围内。
当您的时间序列数据具有不同比例的输入值时,归一化可能是有用的,甚至在某些机器学习算法中也是必需的。对于算法,例如k-最近邻,它使用距离计算和线性回归和人工神经网络可能需要归一化。重量输入值。
标准化要求您知道或能够准确估计最小和最大可观察值。您可以从可用数据中估算这些值。如果您的时间序列趋势向上或向下,估计这些预期值可能会很困难,并且规范化可能不是用于解决问题的最佳方法。
值的规范化如下:
y = (x - min) / (max - min)
其中最小值和最大值与值x被归一化有关。

标准化

标准化数据集涉及重新调整值的分布,以便观察值的平均值为0,标准差为1。
这可以被认为是减去平均值或使数据居中。
与标准化一样,当您的时间序列数据具有不同比例的输入值时,标准化可能是有用的,甚至在某些机器学习算法中也是必需的。
标准化假定您的观察结果符合高斯分布(钟形曲线),具有良好的平均值和标准偏差。如果不满足此期望,您仍然可以标准化时间序列数据,但可能无法获得可靠的结果。
这包括支持向量机,线性和逻辑回归等算法,以及其他假设或使用高斯数据提高性能的算法。
标准化要求您知道或能够准确估计可观察值的均值和标准差。您可以从训练数据中估算这些值。
值标准化如下:
y = (x - mean) / standard_deviation
凡平均值的计算公式为:
mean = sum(x) / count(x)
而standard_deviation计算如下:
standard_deviation = sqrt( sum( (x - mean)^2 ) / count(x))

代码

from sklearn.preprocessing import MinMaxScaler
# 假设 X 是一个二维时间序列数组,形状为 (n_samples, n_timestamps)
scaler = MinMaxScaler()
X_normalized = scaler.fit_transform(X)

from tslearn.preprocessing import TimeSeriesScalerMinMax
# X 为时间序列数据,shape 为 (n_samples, n_timestamps, n_features)
scaler = TimeSeriesScalerMinMax()
X_scaled = scaler.fit_transform(X)

归一化和标准化的选择

在时间序列数据预处理时,假设数据较为稳定,不存在极端值。此时,归一化和标准化,哪个更合适?并讲明这两种方法的优缺点,以及它们之间的差别。
如果时间序列数据较为稳定,不存在极端值,那么归一化和标准化都可以使用,但是归一化更为常用。这是因为归一化可以将每个时间序列的值缩放到相同的范围内,而标准化则将每个时间序列的值转换为标准正态分布,这可能会导致数据的偏移和缩放

归一化和标准化的优缺点:

归一化的优点

  • 易于实现和计算
  • 可以消除不同时间序列之间的比例影响
  • 可以缩放数据以适合某些算法,例如神经网络
    归一化的缺点
  • 可能会将数据的分布信息丢失

标准化的优点

  • 可以消除不同时间序列之间的比例影响
  • 可以将数据转换为标准正态分布,方便使用基于正态分布的算法
    标准化的缺点
  • 可能会将数据的分布信息丢失

归一化和标准化的差异:

  • 归一化将数据缩放到0到1之间的范围内,而标准化将数据转换为均值为0,标准差为1的标准正态分布
  • 归一化适用于数据值的范围已知的情况,而标准化适用于数据的分布未知的情况
  • 归一化易于实现和计算,而标准化需要计算均值和标准差

★趋势型时序的数据预处理选择

问:如果时间序列不符合正态分布或高斯分布,而是趋势性上升的曲线,那么在Kmeans训练之前的数据预处理,应该选择哪种处理方法,归一化[0,1]或[-1,1],还是标准化
答:如果时间序列不符合正态分布或高斯分布,而是趋势性上升的曲线,我们可以考虑使用标准化来进行数据预处理。
标准化可以将数据转换为均值为0,标准差为1的分布,这样可以消除数据之间的量纲差异,使得不同特征的数据具有可比性。
相比之下,归一化只能将数据缩放到特定的范围,例如[0,1]或[-1,1]。
在这种情况下,由于数据之间的差异较大,使用归一化可能会导致聚类结果不准确。因此,我们建议在处理时间序列数据时使用标准化。
【小萌五分钟】机器学习 | 数据预处理之特征缩放
1、是什么为什么
2、归一化和标准化
3、两个细节

tslearn关于时间序列的预处理方法

在 tslearn 中,常见的时间序列预处理方法包括:

  1. 标准化(Standardization):对时间序列进行标准化处理,使其均值为 0,方差为 1,以消除不同时间序列之间的量纲差异。

  2. 缩放(Scaling):对时间序列进行缩放处理,使其范围在 [0, 1] 或 [-1, 1] 之间,以消除不同时间序列之间的幅度差异。

  3. 平滑化(Smoothing):对时间序列进行平滑化处理,以减小噪音和离群值的影响,常见的平滑化方法包括移动平均、指数平滑等。

  4. 差分(Differencing):对时间序列进行差分处理,以消除其趋势和季节性,常见的差分方法包括一阶差分和二阶差分。

  5. 特征提取(Feature extraction):从时间序列中提取有用的特征,以便于后续的分析和建模,常见的特征提取方法包括傅里叶变换、小波变换、时域特征提取等。

  6. 时间序列对齐(Time series alignment):将不同时间序列进行对齐,以便于进行比较和分析,常见的对齐方法包括动态时间规整(Dynamic Time Warping,DTW)等。

以上是一些常见的时间序列预处理方法,你可以根据具体的需求选择合适的方法来进行处理。

你可能感兴趣的:(机器学习,python)