我目前正在 python 中为时间序列分类 (TSC) 实现一个称为回声状态网络 (ESN) 的循环神经网络 (RNN)。
我想使用参数方程生成轨迹,然后训练我的神经网络对这些轨迹进行分类,例如Mickael Hüsken 和 Peter Stagge 的这篇文章,用于时间序列分类的循环神经网络。最后,我想比较一下我的 ESN 和他们的 RNN 之间的性能。
好吧,我在生成这些轨迹之一时遇到了麻烦。
根据本文,这是三个类:
这应该产生这样的东西:
我为每个类生成 50 条轨迹,alpha 是一个固定为 0.7 的浮点数,beta 和 t0 在 0 和 2*pi 之间随机选择。一条轨迹包含 30 个点,因此时间步长为 (2*pi)/30。
这是我的代码,我知道这不是最 Pythonic 的方式,但它可以为第一类和第三类工作。但是,第二课仍然有问题:(
import numpy as np
import sys, getopt, random
timestep = 2.0*np.pi / 30.0
alpha = 0.7
def class1(t, beta):
return alpha*np.sin(t+beta)*np.abs(np.sin(t)), alpha*np.cos(t+beta)*np.abs(np.sin(t))
def class2(t, beta):
return alpha*np.sin(t/2.0+beta)*np.sin(3.0/2.0*t), alpha*np.cos(t+beta)*np.sin(2.0*t)
def class3(t, beta):
return alpha*np.sin(t+beta)*np.sin(2.0*t), alpha*np.cos(t+beta)*np.sin(2.0*t)
def generate():
clazz = {
'1' : class1,
'2' : class2,
'3' : class3
}
for classID in clazz :
for i in xrange(50):
fd = open("dataset/%s_%s"%(classID, i+1), 'w')
beta = 2*np.pi*np.random.random()
t = 2*np.pi*np.random.random()
for _ in xrange(30):
fd.write("%s %s\n"%clazz[classID](t, beta))
t += timestep
fd.close()
当我绘制第二类的轨迹时(使用 matplotlib),我得到了一个奇怪的结果......例如: