Savgol平滑中无法解释的“滴”,具有针对趋势,股票,能源数据(基本上是各种时间序列!)的高多项式,]]

问题描述 投票:0回答:1

我一直在尝试使用Savgol(scikit)平滑曲线,并且在我的几次尝试中,提高多项式的度会导致“滴”,如下图所示。此示例来自Google趋势数据,但是库存数据和耗电量数据存在类似的问题。任何关于为什么它表现得如此或如何解决(以及能够提高多项式次数)的线索都将受到高度赞赏。下图:“样本输出”。

import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt
import numpy as np
%matplotlib inline

from pandas.plotting import register_matplotlib_converters
register_matplotlib_converters()

from pytrends.request import TrendReq
pytrends = TrendReq(hl='en-US', tz=360)
from scipy.signal import savgol_filter
kw_list = ["Carbon footprint"]
pytrends.build_payload(kw_list, timeframe='2004-12-14 2019-12-25', geo='', gprop='')


da1 = pytrends.interest_over_time()
#(drop last one for Savgol as need odd number, used to have 196 records)

Y3 = da1["Carbon footprint"]


fig = plt.figure(figsize=(18,9))

l = Y3.shape[0]
l = l if l%2 == 1 else l-1
# window = odd number closest to size of data

ax1 = plt.subplot(2,1,1)
ax1 = sns.lineplot(data=Y3, color="navy")
#Savgol with polynomial order = 7 is fine (but misses the initial plateau)
Y3_smooth = savgol_filter(Y3,l, 7) 
ax1 = sns.lineplot(x=da1.index.to_pydatetime(),y=Y3_smooth, color="red")
plt.title(f"red = with Savgol, polynomial order = 7, window = {l}", fontsize=18)


ax2 = plt.subplot(2,1,2)
ax2 = sns.lineplot(data=Y3, color="navy")
#Savgol with polynomial order = 9 or more has a weird drop
Y3_smooth = savgol_filter(Y3,l, 10) 
ax2 = sns.lineplot(x=da1.index.to_pydatetime(),y=Y3_smooth, color="red")
plt.title(f"red = with Savgol, polynomial order = 10, window = {l}", fontsize=18)

Sample output

我一直在尝试使用Savgol(scikit)平滑曲线,并且在我的几次尝试中,提高多项式的度会导致“滴”,如下图所示。此示例来自Google趋势...

smoothing
1个回答
0
投票

[如果有人感兴趣,我发现此解决方法使用了另一种平滑方法。它在开始和结束时都很好用,并且可以对平滑度进行微调。

© www.soinside.com 2019 - 2024. All rights reserved.