python代码实现了一个基于储备库计算的时间序列预测系统

#!/usr/bin/env python
# coding: utf-8

import numpy as np
import scipy.sparse as sparse
from scipy.sparse import linalg
import pandas as pd

# global variables
# This will change the initial condition used. Currently it starts from the first# value
shift_k = 0

approx_res_size = 5000

model_params = {
   'tau': 0.25,
                'nstep': 1000,
                'N': 8,
                'd': 22}

res_params = {
   'radius': 0.1,
              'degree': 3,
              'sigma': 0.5,
              'train_length': 1000,
              'N': int(np.floor(approx_res_size / model_params['N']) * model_params['N']),
              'num_inputs': model_params['N'],
              'predict_length': 1000,
              'beta': 0.0001
              }


# The ESN functions for training
def generate_reservoir(size, radius, degree):
    sparsity = degree / float(size);
    A = sparse.rand(size, size, density=sparsity).todense()
    vals = np.linalg.eigvals(A)
    e = np.max(np.abs(vals))
    A = (A / e) * radius
    return A


def reservoir_layer(A, Win, input, res_params):
    states = np.zeros((res_params['N'], res_params['train_length']))
    for i in range(res_params['train_length'] - 1):
        states[:, i + 1] = np.tanh(np.dot(A, states[:, i]) + np.dot(Win, input[:, i]))
    return states


def train_reservoir(res_params, data):
    A = generate_reservoir(res_params['N'], res_params['radius'], res_params['degree'])
    q = int(res_params['N'] / res_params['num_inputs'])
    Win = np.zeros((res_params['N'], res_params['num_inputs']))
    for i in range(res_params['num_inputs']):
        np.random.seed(seed=i)
        Win[i * q: (i + 

你可能感兴趣的:(python,算法,深度学习,python,numpy,开发语言)