Параметрическое уравнение с numpy

В настоящее время я реализую рекуррентную нейронную сеть (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), я получаю странный результат... например:

введите здесь описание изображения


person NiziL    schedule 04.05.2014    source источник


Ответы (1)


Второе уравнение кажется мне странным, и действительно похоже, не выдает показанную картинку.

Глядя на уравнения для классов 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()

дает:

3-лепестковая фигура

person Lev Levitsky    schedule 04.05.2014
comment
Спасибо ! Я просто исправляю свое уравнение в соответствии с вашим сообщением (я добавляю коэффициент 1/2 к t, чтобы быть как можно ближе к исходному эксперименту) :) - person NiziL; 04.05.2014