Conjunts de dades

El mòdul datasets proporciona una família de generadors basats en equacions per a diversos conjunts de dades que s’utilitzen habitualment en la recerca en aprenentatge automàtic. Tots els generadors deriven de Dataset i exposen un mètode generate() comú:

from qilisdk.ml.datasets import NARMA

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

El DatasetSample retornat és un parell (inputs, targets).

També podeu visualitzar els conjunts de dades generats amb el mètode .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")

Generadors disponibles

  • NARMA — Identificació de sistemes amb mitjana mòbil autoregressiva no lineal.

  • MackeyGlass — Equació diferencial amb retard caòtica de Mackey–Glass.

  • Lorenz — Atractor de Lorenz.

  • SantaFeLaser — Intensitat del làser de Santa Fe (equacions de Lorenz–Haken).

  • HenonMap — Mapa de Hénon.

  • LogisticMap — Mapa logístic.

NARMA

El punt de referència de mitjana mòbil autoregressiva no lineal (NARMA) és una tasca d’identificació de sistemes. Un flux d’entrada aleatori \(u(t) \sim \mathcal{U}(0, 0.5)\) acciona una recurrència no lineal d’ordre \(n\) la sortida de la qual, \(y(t)\), s’ha de predir 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.\]

Els coeficients per defecte \((\alpha, \beta, \gamma, \delta) = (0.3, 0.05, 1.5, 0.1)\) corresponen a la ubiqua tasca NARMA10 (order=10). A diferència dels altres generadors, inputs és l’accionament aleatori \(u\) i targets és la resposta del sistema \(y\); tots dos tenen forma (npoints, 1). Com que l’accionament és aleatori, es pot especificar una seed per garantir la reproductibilitat.

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 és una equació diferencial amb retard no lineal que produeix un atractor caòtic:

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

Amb els paràmetres estàndard \(\beta = 0.2\), \(\gamma = 0.1\), \(n = 10\), el comportament queda determinat pel retard \(\tau\): la sèrie és periòdica per a \(\tau\) petits, lleugerament caòtica a \(\tau = 17\) i cada vegada més caòtica més enllà. L’equació s’integra amb un esquema RK4 de pas fix amb resolució dt i es submostreja cada sample_every passos.

from qilisdk.ml.datasets import MackeyGlass

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

Lorenz

L’atractor Lorenz és un sistema dinàmic caòtic tridimensional:

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

La trajectòria s’integra amb RK4 i es submostreja, donant lloc a una tasca de predicció de horizon passos endavant sobre l’estat tridimensional, de manera que inputs i targets tenen tots dos 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 conjunt de dades A original de la Santa Fe Time Series Competition és un enregistrament de les pulsacions caòtiques d’intensitat d’un làser de \(\mathrm{NH_3}\) d’infraroig llunyà. En lloc de distribuir l’enregistrament, SantaFeLaser reprodueix la mateixa dinàmica qualitativa des de primers principis mitjançant les equacions de làser Lorenz–Haken d’un sol mode:

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

on \(E\) és l’amplitud del camp, \(P\) la polarització i \(N\) la inversió de població. La magnitud mesurada és la intensitat del làser \(I \propto E^2\), que és no negativa i reprodueix el comportament de l’enregistrament de Santa Fe. Tant inputs com targets tenen forma (npoints, 1).

from qilisdk.ml.datasets import SantaFeLaser

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

HenonMap

El HenonMap és un sistema caòtic discret bidimensional:

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

que és caòtic per als paràmetres \(a = 1.4\), \(b = 0.3\). generate() retorna una tasca de predicció de horizon passos endavant sobre l’estat bidimensional, de manera que inputs i targets tenen tots dos 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 és un sistema caòtic unidimensional senzill:

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

que esdevé caòtic a mesura que la taxa de creixement \(r\) s’aproxima a 4 (el valor per defecte \(r = 3.9\) se situa ben endins del règim caòtic). generate() retorna una tasca de predicció de horizon passos endavant, de manera que inputs i targets tenen forma (npoints, 1).

from qilisdk.ml.datasets import LogisticMap

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