Attualmente sto implementando una rete neurale ricorrente (RNN) chiamata Echo State Network (ESN) in python per la classificazione delle serie temporali (TSC).Equazione parametrica con numpy
Voglio generare traiettorie mediante equazioni parametriche, quindi formare la rete neurale per classificare queste traiettorie, come in questo articolo per Mickael Hüsken & Peter Stagge, Recurrent Neural Networks for Time Series Classification. Infine, voglio confrontare le prestazioni tra il mio ESN e il loro RNN.
Beh, sono nei guai con la generazione di una di queste traiettorie.
Ecco le tre classi secondo l'articolo:
che dovrebbe generare qualcosa di simile:
I generare 50 traiettorie di ogni classe, alfa è un galleggiante fisso a 0,7, beta e t0 sono scelti a caso tra 0 e 2 * pi. Una traiettoria contiene 30 punti, quindi il timestep è (2 * pi)/30.
Ecco il mio codice, so che non è il modo più poderoso, ma fa il lavoro per la prima e la terza classe. Tuttavia, la seconda classe è ancora ostacolato :(
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()
Quando ho traiettorie trama della seconda classe (utilizzando matplotlib), ho un risultato strano ... per esempio:
Grazie! Ho appena aggiustato la mia equazione in base al tuo post (aggiungo un fattore 1/2 a t per essere il più vicino possibile dell'esperimento originale) :) – NiziL