Build dynamic models with SysIdentPy

SysIdentPy is a simple and easy to learn System Identification library in Python!

Getting Started pip install sysidentpy
Background chart

Introduction to SysIdentPy

                
    from sysidentpy.model_structure_selection import FROLS
    from sysidentpy.basis_function import Polynomial
    from sysidentpy.utils.generate_data import get_siso_data
    
    x_train, x_valid, y_train, y_valid = get_siso_data(
        n=1000, colored_noise=False, sigma=0.0001, train_percentage=90
    )
    
    basis_function = Polynomial(degree=2)
    model = FROLS(ylag=2, xlag=2, basis_function=basis_function)
    
    model.fit(X=x_train, y=y_train)
    yhat = model.predict(X=x_valid, y=y_valid)
                
              
                
    from sysidentpy.model_structure_selection import FROLS
    from sysidentpy.basis_function import Legendre
    from sysidentpy.utils.generate_data import get_siso_data
    
    x_train, x_valid, y_train, y_valid = get_siso_data(
        n=1000, colored_noise=False, sigma=0.0001, train_percentage=90
    )
    
    basis_function = Legendre(degree=2)
    model = FROLS(ylag=2, xlag=2, basis_function=basis_function)
    
    model.fit(X=x_train, y=y_train)
    yhat = model.predict(X=x_valid, y=y_valid)
                
              
                
    from sysidentpy.model_structure_selection import FROLS
    from sysidentpy.basis_function import Fourier
    from sysidentpy.utils.generate_data import get_siso_data
    
    x_train, x_valid, y_train, y_valid = get_siso_data(
        n=1000, colored_noise=False, sigma=0.0001, train_percentage=90
    )
    
    basis_function = Fourier(degree=2)
    model = FROLS(ylag=2, xlag=2, basis_function=basis_function)
    
    model.fit(X=x_train, y=y_train)
    yhat = model.predict(X=x_valid, y=y_valid)
                
              
                
    from torch import nn
    from sysidentpy.neural_network import NARXNN
    
    from sysidentpy.basis_function import Polynomial
    from sysidentpy.utils.generate_data import get_siso_data
    
    x_train, x_valid, y_train, y_valid = get_siso_data(
        n=1000, colored_noise=False, sigma=0.01, train_percentage=80
    )
    
    class NARX(nn.Module):
        def __init__(self):
            super().__init__()
            self.lin = nn.Linear(4, 30)
            self.lin2 = nn.Linear(30, 1)
            self.tanh = nn.Tanh()
    
        def forward(self, xb):
            z = self.lin(xb)
            z = self.tanh(z)
            z = self.lin2(z)
            return z
    
    
    narx_net2 = NARXNN(
        net=NARX(),
        ylag=2,
        xlag=2,
        basis_function=Polynomial(degree=1),
        optimizer="Adam",
        optim_params={
            "betas": (0.9, 0.999),
            "eps": 1e-05,
        },
    )
    
    narx_net2.fit(X=x_train, y=y_train)
    yhat = narx_net2.predict(X=x_valid, y=y_valid)
                
              
                
    from sysidentpy.utils.generate_data import get_siso_data
    from sysidentpy.general_estimators import NARX
    from sklearn.linear_model import BayesianRidge
    from sysidentpy.basis_function import Polynomial
    
    x_train, x_valid, y_train, y_valid = get_siso_data(
        n=1000, colored_noise=False, sigma=0.0001, train_percentage=90
    )
    
    BayesianRidge_narx = NARX(
        base_estimator=BayesianRidge(),
        xlag=2,
        ylag=2,
        basis_function=Polynomial(degree=2),
        model_type="NARMAX",
    )
    
    BayesianRidge_narx.fit(X=x_train, y=y_train)
    yhat = BayesianRidge_narx.predict(X=x_valid, y=y_valid)
                
              
                
    from catboost import CatBoostRegressor
    from sysidentpy.utils.generate_data import get_siso_data
    from sysidentpy.general_estimators import NARX
    from sysidentpy.basis_function import Polynomial
    
    x_train, x_valid, y_train, y_valid = get_siso_data(
        n=1000, colored_noise=False, sigma=0.0001, train_percentage=90
    )
    
    catboost_narx = NARX(
        base_estimator=CatBoostRegressor(
            iterations=300,
            learning_rate=0.1
        ),
        xlag=2,
        ylag=2,
        basis_function=Polynomial(degree=2),
        model_type="NARMAX",
        fit_params={"verbose": False},
    )
    
    catboost_narx.fit(X=x_train, y=y_train)
    yhat = catboost_narx.predict(X=x_valid, y=y_valid, steps_ahead=None)
                
              

Companies using

A3Data Gcom Technium A3Data

Nonlinear System Identification and Forecasting

Welcome to our companion book on System Identification! This book is a comprehensive approach to learning about dynamic models and forecasting.

The main aim of this book is to describe a comprehensive set of algorithms for the identification, forecasting and analysis of nonlinear systems.

Ebook Icon Download the E-book

Main Developer

Wilson Rocha
Wilson Rocha

Head of Data Science at RD. Master in Electrical Engineering. Professor. Member of Control and Modelling Group (GCOM)

Our Contributors

Our numbers

  • +80% Coverage
  • 56K Downloads
  • 1.5k Downloads/month

Users sharing their experience

Our Recent Blog Posts

Wilson Rocha

Open Source Packages (in portuguese)

Learn More

Wilson Rocha

Nubank Meetup Presentation (in portuguese)

Learn More

Wilson Rocha

GCoM Meetup (in portuguese)

Learn More