我目前正在python中实现一个称为回声状态网络(ESN)的回归神经网络(RNN),用于时间序列分类(TSC)。
我想使用参数方程生成轨迹,然后训练我的神经网络对这些轨迹进行分类,就像本文中Mickael Hüsken & Peter Stagge, Recurrent Neural Networks for Time Series Classification一样。最后,我想比较我的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)时,我得到一个奇怪的结果......例如:
答案 0 :(得分:3)
第二个等式对我来说似乎很奇怪,的确是does not seem to produce the picture shown。
观察第1类和第3类的等式,很容易猜出一个参数方程,它会产生一个带有三个“花瓣”的图形:
def class2(t, beta):
return alpha*np.sin(t+beta)*np.sin(3*t), alpha*np.cos(t+beta)*np.sin(3*t)
然后做:
for beta in [0, np.pi/3, np.pi/2]:
pylab.plot(*class2(np.linspace(0, np.pi, 100), beta),
label='$\\beta={:.3f}$'.format(beta))
pylab.legend()
给出: