neupy 时间序列信号处理
neupy 时间序列信号处理。在Python神经网络模块界,neupy 可能不算知名,但是它确实比较好用,设计简单直观,容易上手。
# -*- coding: utf-8 -*-
import numpy as np
from sklearn.model_selection import train_test_split
from neupy import algorithms, estimators, environment
# 只是自己定义的包,用来输入基金数据
import finance.fund
import pytseries
environment.reproducible()
# input data
# 读者要用这段代码,需要自己获得时间序列数据,然后把时间序列转换成训练样本。
fd = finance.fund.Fund.load('161226',500)
data = fd['累计净值'].values[::-1]
# data = np.sin(np.linspace(0,10,300)) # 另一个例子
# 移动均值pytseries.TimeSeries([np.mean(data[k:k+order]) for k in range(len(data)-order+1)])
ts = pytseries.TimeSeries(data)
step = 30
# generate samples for training from the sequence
datax, datat = ts.generate_Xy(step=step, style='row')
x_train, x_test, y_train, y_test = train_test_split(datax, datat, train_size=0.99)
# construct grnn
grnnet = algorithms.GRNN()
grnnet.train(x_train, y_train)
back = 0
data0 = ts[-step:][np.newaxis,:]
ys = grnnet.predict(data0)
y = ys.copy()
for _ in range(50):
data0 = np.hstack((data0[:,1:], y))
y = grnnet.predict(data0)
ys = np.vstack((ys, y))
import matplotlib.pyplot as plt
plt.plot(ts.values[step:], 'o', color='blue')
datay = grnnet.predict(datax)
# plt.plot(y, '*', color='blue')
plt.plot(np.vstack((datay, ys)), color='red')
error = estimators.rmsle(datat, datay)
plt.title("CODE: %s, GRNN RMSLE = %.4f"%(fd.code, error))
plt.show()