Python 实现傅里叶特征提取函数 - 使用 NumPy 和 Pandas
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 ]
函数说明
-
参数说明:
index: 时序数据的索引,可以是 Pandas DatetimeIndex 或 NumPy array。freq: 频率,表示数据中的周期长度。例如,对于每天的数据,如果周期为一年,则freq为 365.25。order: 阶数,表示提取傅里叶特征的最高阶数。阶数越高,提取的特征越多,但也可能导致过拟合。
-
函数逻辑:
- 计算每个时间点的相位角
k,用于计算傅里叶特征。 - 循环遍历从 1 到
order的阶数,计算每个阶数的正弦和余弦特征。 - 将所有特征存储在一个字典
features中,并转换为 Pandas DataFrame。
- 计算每个时间点的相位角
-
使用场景:
- 提取时序数据中的周期性特征,例如季节性、趋势性等。
- 将时序数据转换为机器学习模型可以接受的特征,提高模型的预测性能。
总结
fourier_features 函数是一个简单而强大的工具,可以帮助你从时序数据中提取周期性特征,并将其用于机器学习等应用中。
原文地址: http://www.cveoy.top/t/topic/nUYs 著作权归作者所有。请勿转载和采集!