5

私は現在、時系列分類 (TSC) のために Python でエコー状態ネットワーク (ESN) と呼ばれるリカレント ニューラル ネットワーク (RNN) を実装しています。

Mickael Hüsken と Peter Stagge による Recurrent Neural Networks for Time Series Classification の記事のように、パラメトリック方程式を使用して軌跡を生成し、ニューラル ネットワークをトレーニングしてこれらの軌跡を分類したいと考えています。最後に、ESN と RNN のパフォーマンスを比較したいと思います。
さて、私はこれらの軌道の 1 つの生成に問題があります。

この記事によると、次の 3 つのクラスがあります。

ここに画像の説明を入力
次のようなものが生成されます。 ここに画像の説明を入力

各クラスの 50 の軌跡を生成します。アルファは 0.7 に固定された float で、ベータと t0 は 0 から 2*pi の間でランダムに選択されます。軌跡には 30 個のポイントが含まれているため、タイムステップは (2*pi)/30 です。

これが私のコードです。これが最もpythonicな方法ではないことはわかっていますが、最初と3番目のクラスで機能します。ただし、2番目のクラスにはまだバグがあります:(

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 を使用して) 2 番目のクラスの軌跡をプロットすると、奇妙な結果が得られます。たとえば、次のようになります。

ここに画像の説明を入力

4

1 に答える 1