В настоящее время я реализую рекуррентную нейронную сеть (RNN) под названием Echo State Network (ESN) в python для классификации временных рядов (TSC).
Я хочу сгенерировать траектории с помощью параметрических уравнений, а затем обучить свою нейронную сеть классифицировать эти траектории, как в этой статье Микаэль Хюскен и Питер Стагге, Рекуррентные нейронные сети для классификации временных рядов. Наконец, я хочу сравнить производительность между моей ESN и их RNN.
Что ж, у меня проблемы с генерацией одной из этих траекторий.
Вот три класса согласно этой статье:
Должно получиться что-то вроде этого:
Я генерирую 50 траекторий каждого класса, альфа — это число с плавающей запятой, фиксированное на 0,7, бета и t0 выбираются случайным образом между 0 и 2*pi. Траектория содержит 30 точек, поэтому временной шаг равен (2*pi)/30.
Вот мой код, я знаю, что это не самый питонический способ, но он выполняет работу для первого и третьего класса. Однако второй класс все еще глючит :(
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), я получаю странный результат... например: