Изменить начальную точку для БПФ NumPy - PullRequest
0 голосов
/ 06 мая 2020

У меня проблемы с БПФ NumPy. Я не хочу, чтобы кривая в конце увеличивалась, как показано на изображении. Это похоже на то, как если бы он был привязан к средней цене для цены акции.

close_fft = np.fft.fft(np.asarray(data_FT['Adj Close'].tolist()))
fft_df = pd.DataFrame({'fft':close_fft})
fft_df['absolute'] = fft_df['fft'].apply(lambda x: np.abs(x))
fft_df['angle'] = fft_df['fft'].apply(lambda x: np.angle(x))

plt.figure(figsize=(14, 7), dpi=100)
fft_list = np.asarray(fft_df['fft'].tolist())
for num_ in [3, 6, 9, 100]:
    fft_list_m10= np.copy(fft_list); fft_list_m10[num_:-num_]=0
    plt.plot(np.fft.ifft(fft_list_m10), label='Fourier transform with {} components'.format(num_))
plt.plot(data_FT['GS'],  label='Real')
plt.xlabel('Days')
plt.ylabel('USD')
plt.title('Figure 3: Goldman Sachs (close) stock prices & Fourier transforms')
plt.legend()
plt.show()

Это дает следующий график:

enter image description here

Как видите, кривые прыгают прямо туда, где они начинались, независимо от исходной цены. Исходное руководство, которому я следую, находится здесь: https://pythonawesome.com/using-the-latest-advancements-in-ai-to-predict-stock-market-movements/

1 Ответ

2 голосов
/ 06 мая 2020

Все базисные векторы БПФ являются круговыми, поэтому уменьшенное их количество не может легко представить резкий разрыв между концом массива и началом. Вы можете попытаться избавиться от некоторых скачков, отразив данные на каждом конце и / или проанализировав тенденции данных перед БПФ, чтобы уменьшить некоторую неравномерность.

Добавлено:

Метод DCT состоит в том, чтобы просто дублировать данные с их зеркальным отображением (например, в обратном порядке) и использовать БПФ двойной длины. Выбросьте лишние образцы после обработки.

Метод де-тренда может быть реализован с использованием линейного тренда или, возможно, с помощью линейной регрессии полинома очень низкого порядка. Вычтите подобранный тренд, затем выполните БПФ и выполните обработку. Затем, после обработки, при необходимости добавьте подобранную линию тренда.

...