Spaces:
Sleeping
Sleeping
import matplotlib.pyplot as plt | |
# 双指数平滑 | |
def double_exponential_smoothing(series, alpha, beta): | |
""" | |
series - dataset with timeseries | |
alpha - float [0.0, 1.0], smoothing parameter for level | |
beta - float [0.0, 1.0], smoothing parameter for trend | |
""" | |
# first value is same as series | |
result = [series[0]] | |
for n in range(1, len(series) + 1): | |
if n == 1: | |
level, trend = series[0], series[1] - series[0] | |
if n >= len(series): # forecasting | |
value = result[-1] | |
else: | |
value = series[n] | |
last_level, level = level, alpha * value + (1 - alpha) * (level + trend) | |
trend = beta * (level - last_level) + (1 - beta) * trend | |
result.append(level + trend) | |
return result | |
def plotDoubleExponentialSmoothing(series, alphas, betas): | |
""" | |
Plots double exponential smoothing with different alphas and betas | |
series - dataset with timestamps | |
alphas - list of floats, smoothing parameters for level | |
betas - list of floats, smoothing parameters for trend | |
""" | |
with plt.style.context('seaborn-white'): | |
plt.figure(figsize=(13, 5)) | |
for alpha in alphas: | |
for beta in betas: | |
plt.plot(double_exponential_smoothing(series, alpha, beta), | |
label="Alpha {}, beta {}".format(alpha, beta)) | |
plt.plot(series.values, label="Actual") | |
plt.legend(loc="best") | |
plt.axis('tight') | |
plt.title("Double Exponential Smoothing") | |
plt.grid(True) | |
plotDoubleExponentialSmoothing(data['trend'], alphas=[0.5, 0.3], betas=[0.9, 0.3]) |