Python 实现傅里叶特征提取函数

本文介绍使用 Python NumPy 和 Pandas 库实现的傅里叶特征提取函数 fourier_features。该函数可以根据给定的频率和阶数提取时序数据中的周期性特征,并返回一个包含这些特征的 Pandas DataFrame。

代码实现

import numpy as np
import pandas as pd

def fourier_features(index, freq, order):
    time = np.arange(len(index), dtype=np.float32)
    k = 2 * np.pi * (1 / freq) * time
    features = {}
    for i in range(1, order + 1):
        features.update({
            f'sin_{freq}_{i}': np.sin(i * k),
            f'cos_{freq}_{i}': np.cos(i * k),
        })
    return pd.DataFrame(features, index=index)

# Compute Fourier features to the 4th order (8 new features) for a
# series y with daily observations and annual seasonality:
#
# fourier_features(y, freq=365.25, order=4)

输入输出样例

输入样例:

index = pd.date_range(start='2021-01-01', end='2021-01-10')
y = np.array([1, 2, 3, 4, 5, 4, 3, 2, 1, 0])

输出样例:

time:

[0. 1. 2. 3. 4. 5. 6. 7. 8. 9.]

k:

[ 0.          0.01720141  0.03440283  0.05160424  0.06880565  0.08600706
  0.10320847  0.12040988  0.13761129  0.1548127 ]

函数说明

  1. 参数说明:

    • index: 时序数据的索引,可以是 Pandas DatetimeIndex 或 NumPy array。
    • freq: 频率,表示数据中的周期长度。例如,对于每天的数据,如果周期为一年,则 freq 为 365.25。
    • order: 阶数,表示提取傅里叶特征的最高阶数。阶数越高,提取的特征越多,但也可能导致过拟合。
  2. 函数逻辑:

    • 计算每个时间点的相位角 k,用于计算傅里叶特征。
    • 循环遍历从 1 到 order 的阶数,计算每个阶数的正弦和余弦特征。
    • 将所有特征存储在一个字典 features 中,并转换为 Pandas DataFrame。
  3. 使用场景:

    • 提取时序数据中的周期性特征,例如季节性、趋势性等。
    • 将时序数据转换为机器学习模型可以接受的特征,提高模型的预测性能。

总结

fourier_features 函数是一个简单而强大的工具,可以帮助你从时序数据中提取周期性特征,并将其用于机器学习等应用中。

Python 实现傅里叶特征提取函数 - 使用 NumPy 和 Pandas

原文地址: http://www.cveoy.top/t/topic/nUYs 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录