DDEPM预测序列代码实例
下面使用DDEPM来预测几个时间序列函数。
import numpy as np
import matplotlib.pyplot as plt
%matplotlib inline
%reload_ext autoreload
%autoreload 2
class DDEPM():
def init(self, sequence):
if len(sequence) < 3:
raise "the length of sequence is less than 3"
self.x0 = sequence
# AGO
xi = 0
self.x1 = []
for i in self.x0:
xi += i
self.x1.append(xi)
# DDE(2, 1)
X = []
Y = []
for i in range(len(self.x1)-2):
X_row = [-self.x1[i+1], -self.x1[i]]
X.append(X_row)
Y.append(self.x1[i+2])
X = np.array(X)
Y = np.array(Y).reshape(-1, 1)
phi = np.linalg.pinv(X.T.dot(X)).dot(X.T).dot(Y)
self.a = phi[0, 0]
self.b = phi[1, 0]
delta = self.a ** 2 - 4 * self.b
if delta > 0:
self.type = 0
self.r1 = (-self.a + np.sqrt(delta)) / 2
self.r2 = (-self.a - np.sqrt(delta)) / 2
self.C1 = (self.r1 * self.x0[0] - self.x0[0] - self.x0[1]) / (self.r1 * self.r2 - self.r2 * self.r2)
self.C2 = (self.r2 * self.x0[0] - self.x0[0] - self.x0[1]) / (self.r1 * self.r2 - self.r1 * self.r1)
elif delta == 0:
self.type = 1
self.r1 = -self.a / 2
self.r2 = self.r1
self.C1 = (self.x0