Conjuntos de datos

El módulo datasets proporciona una familia de generadores basados en ecuaciones para diversos conjuntos de datos de uso habitual en la investigación en aprendizaje automático. Todos los generadores derivan de Dataset y exponen un método generate() común:

from qilisdk.ml.datasets import NARMA

dataset = NARMA(order=10, seed=0)
sample = dataset.generate(1000)
inputs, targets = sample

El DatasetSample devuelto es un par (inputs, targets).

También puede visualizar los conjuntos de datos generados con el método .draw() de cada generador:

from qilisdk.ml.datasets import NARMA

dataset = NARMA(order=10, seed=0)
sample = dataset.generate(1000)
dataset.draw(sample, style="1d")

Generadores disponibles

  • NARMA — Identificación de sistemas con media móvil autorregresiva no lineal.

  • MackeyGlass — Ecuación diferencial con retardo caótica de Mackey–Glass.

  • Lorenz — Atractor de Lorenz.

  • SantaFeLaser — Intensidad del láser de Santa Fe (ecuaciones de Lorenz–Haken).

  • HenonMap — Mapa de Hénon.

  • LogisticMap — Mapa logístico.

NARMA

El punto de referencia de media móvil autorregresiva no lineal (NARMA) es una tarea de identificación de sistemas. Un flujo de entrada aleatorio \(u(t) \sim \mathcal{U}(0, 0.5)\) excita una recurrencia no lineal de orden \(n\) cuya salida \(y(t)\) debe predecirse a partir de \(u\):

\[y(t+1) = \alpha\, y(t) + \beta\, y(t) \sum_{i=0}^{n-1} y(t-i) + \gamma\, u(t-n+1)\, u(t) + \delta.\]

Los coeficientes por defecto \((\alpha, \beta, \gamma, \delta) = (0.3, 0.05, 1.5, 0.1)\) corresponden a la omnipresente tarea NARMA10 (order=10). A diferencia de los demás generadores, inputs es la excitación aleatoria \(u\) y targets es la respuesta del sistema \(y\); ambos tienen forma (npoints, 1). Como la excitación es aleatoria, se puede especificar una seed para garantizar la reproducibilidad.

from qilisdk.ml.datasets import NARMA

inputs, targets = NARMA(order=10, input_range=(0.0, 0.5), seed=42).generate(2000)
print(inputs.shape, targets.shape)

MackeyGlass

El sistema MackeyGlass es una ecuación diferencial con retardo no lineal que produce un atractor caótico:

\[\frac{dx}{dt} = \beta\, \frac{x(t - \tau)}{1 + x(t - \tau)^{n}} - \gamma\, x(t).\]

Con los parámetros estándar \(\beta = 0.2\), \(\gamma = 0.1\), \(n = 10\), el comportamiento lo fija el retardo \(\tau\): la serie es periódica para \(\tau\) pequeños, ligeramente caótica en \(\tau = 17\) y cada vez más caótica más allá. La ecuación se integra con un esquema RK4 de paso fijo con resolución dt y se submuestrea cada sample_every pasos.

from qilisdk.ml.datasets import MackeyGlass

inputs, targets = MackeyGlass(tau=17.0).generate(2000)
print(inputs.shape, targets.shape)

Lorenz

El atractor Lorenz es un sistema dinámico caótico tridimensional:

\[\dot{x} = \sigma (y - x), \quad \dot{y} = x (\rho - z) - y, \quad \dot{z} = x y - \beta z.\]

La trayectoria se integra con RK4 y se submuestrea, lo que da lugar a una tarea de predicción de horizon pasos por delante sobre el estado tridimensional, por lo que inputs y targets tienen ambos forma (npoints, 3).

from qilisdk.ml.datasets import Lorenz

inputs, targets = Lorenz(sigma=10.0, rho=28.0).generate(2000)
print(inputs.shape, targets.shape)

SantaFeLaser

El conjunto de datos A original de la Santa Fe Time Series Competition es una grabación de las pulsaciones caóticas de intensidad de un láser de \(\mathrm{NH_3}\) de infrarrojo lejano. En lugar de distribuir la grabación, SantaFeLaser reproduce la misma dinámica cualitativa desde primeros principios mediante las ecuaciones de láser Lorenz–Haken de un solo modo:

\[\dot{E} = \sigma (P - E), \quad \dot{P} = E (\rho - N) - P, \quad \dot{N} = E P - \beta N,\]

donde \(E\) es la amplitud del campo, \(P\) la polarización y \(N\) la inversión de población. La magnitud medida es la intensidad del láser \(I \propto E^2\), que es no negativa y reproduce el comportamiento de la grabación de Santa Fe. Tanto inputs como targets tienen forma (npoints, 1).

from qilisdk.ml.datasets import SantaFeLaser

inputs, targets = SantaFeLaser().generate(2000)
print(inputs.min() >= 0.0)

HenonMap

El HenonMap es un sistema caótico discreto bidimensional:

\[x_{n+1} = 1 - a\, x_n^2 + y_n, \qquad y_{n+1} = b\, x_n,\]

que es caótico para los parámetros \(a = 1.4\), \(b = 0.3\). generate() devuelve una tarea de predicción de horizon pasos por delante sobre el estado bidimensional, por lo que inputs y targets tienen ambos forma (npoints, 2).

from qilisdk.ml.datasets import HenonMap

inputs, targets = HenonMap(a=1.4, b=0.3).generate(2000)
print(inputs.shape, targets.shape)

LogisticMap

El LogisticMap es un sistema caótico unidimensional sencillo:

\[x_{n+1} = r\, x_n (1 - x_n),\]

que se vuelve caótico a medida que la tasa de crecimiento \(r\) se acerca a 4 (el valor por defecto \(r = 3.9\) se sitúa bien dentro del régimen caótico). generate() devuelve una tarea de predicción de horizon pasos por delante, por lo que inputs y targets tienen forma (npoints, 1).

from qilisdk.ml.datasets import LogisticMap

inputs, targets = LogisticMap(r=3.9, horizon=1).generate(2000)
print(inputs.shape, targets.shape)