numpy

2014-05-04 10 views
5

के साथ पैरामेट्रिक समीकरण मैं वर्तमान में समय श्रृंखला वर्गीकरण (टीएससी) के लिए पायथन में इको स्टेट नेटवर्क (ईएसएन) नामक एक आवर्ती तंत्रिका नेटवर्क (आरएनएन) लागू कर रहा हूं।numpy

मैं पैरामीट्रिक समीकरणों का उपयोग करके ट्रैजेक्टोरिज उत्पन्न करना चाहता हूं, फिर इन प्रक्षेपणों को वर्गीकृत करने के लिए अपने तंत्रिका नेटवर्क को प्रशिक्षित करना चाहता हूं, जैसे इस आलेख में Mickael Hüsken & Peter Stagge, Recurrent Neural Networks for Time Series Classification। अंत में, मैं अपने ईएसएन और उनके आरएनएन के बीच प्रदर्शन की तुलना करना चाहता हूं।
ठीक है, मैं इन ट्रैजेक्टोरियों में से किसी एक की पीढ़ी के साथ परेशानी में हूं।

यहाँ इस लेख के अनुसार तीन वर्गों हैं:

enter image description here
कौन सा कुछ इस तरह उत्पन्न करनी चाहिए: enter image description here

मैं प्रत्येक वर्ग के 50 प्रक्षेप पथ उत्पन्न, अल्फा एक नाव 0.7 करने के लिए तय हो गई है, बीटा और टी 0 को 0 और 2 * पीआई के बीच यादृच्छिक रूप से चुना जाता है। एक प्रक्षेपण में 30 अंक होते हैं, इसलिए टाइमस्टेप (2 * पीआई)/30 होता है।

यहां मेरा कोड है, मुझे पता है कि यह सबसे पायदानपूर्ण तरीका नहीं है, लेकिन यह पहली और तीसरी कक्षा के लिए नौकरी करता है। हालांकि, द्वितीय श्रेणी अभी भी bugged है :(

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 का प्रयोग करके) की साजिश प्रक्षेप पथ, मैं एक अजीब परिणाम प्राप्त ... उदाहरण के लिए:

enter image description here

उत्तर

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() 

देता है:

3-petals figure

+0

धन्यवाद! मैं बस अपनी पोस्ट के अनुसार अपने समीकरण को ठीक करता हूं (मैं मूल प्रयोग के जितना संभव हो उतना करीब 1/2 कारक जोड़ता हूं) :) – NiziL