System Identification

System identification refers to the process of learning a predictive model for a given dynamic system i.e. a system whose dynamics evolve with time. The most important aspect of these models is their structure, specifically the following are the common dynamic system models for discretely sampled time dependent systems.

Nonlinear AutoRegresive (NAR)

Signal modeled as a function of its previous values

Nonlinear AutoRegressive with eXogenous inputs (NARX)

Signal modeled as a function of the previous values of itself and the exogenous inputs


DaISy is a database of (artificial and real world) dynamic systems maintained by the STADIUS research group at KU Leuven. We will work with the power plant data set listed on the DaISy home page in this post. Using DynaML, which comes preloaded with the power plant data, we will train LSSVM models to predict the various output indicators of the power plant in question.

Pont-sur-Sambre: Representative Image

Attributes

Instances: 200

Inputs:

  1. Gas flow
  2. Turbine valves opening
  3. Super heater spray flow
  4. Gas dampers
  5. Air flow

Outputs:

  1. Steam pressure
  2. Main stem temperature
  3. Reheat steam temperature

System Modelling

An LSSVM NARX of autoregressive order is chosen to model the plant output data. An LSSVM model builds a predictor of the following form.

Which is the result of solving the following linear system.

Here the matrix is constructed from the training data using a kernel function .

Choice of Kernel Function

For this problem we choose a polynomial kernel.

Steam Pressure

DynaML>DaisyPowerPlant(new PolynomialKernel(2, 0.5),
opt = Map("regularization" -> "2.5", "globalOpt" -> "GS",
"grid" -> "4", "step" -> "0.1"),
num_training = 100, deltaT = 2,
column = 6)
16/03/04 17:13:43 INFO RegressionMetrics: Regression Model Performance: steam pressure
16/03/04 17:13:43 INFO RegressionMetrics: ============================
16/03/04 17:13:43 INFO RegressionMetrics: MAE: 82.12740530161123
16/03/04 17:13:43 INFO RegressionMetrics: RMSE: 104.39251587470388
16/03/04 17:13:43 INFO RegressionMetrics: RMSLE: 0.9660077848586197
16/03/04 17:13:43 INFO RegressionMetrics: R^2: 0.8395534877128238
16/03/04 17:13:43 INFO RegressionMetrics: Corr. Coefficient: 0.9311734118932473
16/03/04 17:13:43 INFO RegressionMetrics: Model Yield: 0.6288000962818303
16/03/04 17:13:43 INFO RegressionMetrics: Std Dev of Residuals: 87.82754320038951

Steam Pressure

Steam Pressure

Reheat Steam Temperature

DaisyPowerPlant(new PolynomialKernel(2, 1.5),
opt = Map("regularization" -> "2.5", "globalOpt" -> "GS",
"grid" -> "4", "step" -> "0.1"), num_training = 150,
deltaT = 1, column = 8)
16/03/04 16:50:42 INFO RegressionMetrics: Regression Model Performance: reheat steam temperature
16/03/04 16:50:42 INFO RegressionMetrics: ============================
16/03/04 16:50:42 INFO RegressionMetrics: MAE: 124.60921194767073
16/03/04 16:50:42 INFO RegressionMetrics: RMSE: 137.33314302068544
16/03/04 16:50:42 INFO RegressionMetrics: RMSLE: 0.5275727128626408
16/03/04 16:50:42 INFO RegressionMetrics: R^2: 0.8247581957573777
16/03/04 16:50:42 INFO RegressionMetrics: Corr. Coefficient: 0.9744133881055823
16/03/04 16:50:42 INFO RegressionMetrics: Model Yield: 0.7871288689840381
16/03/04 16:50:42 INFO RegressionMetrics: Std Dev of Residuals: 111.86852905896446

Steam Temp

Steam Temp


Source Code

Below is the example program as a github gist, to view the original program in DynaML, click here.