{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# V0.1.6 - Information Criteria - Examples\n", "\n", "Example created by Wilson Rocha Lacerda Junior" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Comparing different information criteria methods" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Here we import the NARMAX model, the metric for model evaluation and the methods to generate sample data for tests. Also, we import pandas for specific usage." ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "pip install sysidentpy" ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [], "source": [ "import numpy as np\n", "import pandas as pd\n", "import matplotlib.pyplot as plt\n", "from sysidentpy.polynomial_basis import PolynomialNarmax\n", "from sysidentpy.metrics import root_relative_squared_error\n", "from sysidentpy.utils.generate_data import get_miso_data, get_siso_data\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Generating sample data\n", " \n", "The data is generated by simulating the following model:\n", "$y_k = 0.2y_{k-1} + 0.1y_{k-1}x_{k-1} + 0.9x_{k-1} + e_{k}$\n", "\n", "If *colored_noise* is set to True:\n", "\n", "$e_{k} = 0.8\\nu_{k-1} + \\nu_{k}$\n", "\n", "where $x$ is a uniformly distributed random variable and $\\nu$ is a gaussian distributed variable with $\\mu=0$ and $\\sigma=0.1$\n", "\n", "In the next example we will generate a data with 3000 samples with white noise and selecting 90% of the data to train the model. " ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [], "source": [ "x_train, x_valid, y_train, y_valid = get_siso_data(n=1000,\n", " colored_noise=False,\n", " sigma=0.2,\n", " train_percentage=90)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The idea is to show the impact of the information criteria to select the number of terms to compose the final model. You will se why it is an auxiliary tool and let the algorithm select the number of terms based on the minimum value is not a good idea when dealing with data highly corrupted by noise (even white noise) " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Note: You may find different results when running the examples. This is due the fact we are not setting a fixed random generator for the sample data. However, the main analysis remain. " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## AIC" ] }, { "cell_type": "code", "execution_count": 3, "metadata": { "scrolled": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "0.38202463734760717\n", " Regressors Parameters ERR\n", "0 x1(k-2) 0.9210 0.84287328\n", "1 y(k-1) 0.1867 0.03532986\n", "2 x1(k-1)y(k-1) 0.1215 0.00403228\n", "3 y(k-1)^2 0.0478 0.00073353\n", "4 x1(k-1)^2 -0.0342 0.00052802\n" ] }, { "data": { "text/plain": [ "Text(0, 0.5, 'Information Criteria')" ] }, "execution_count": 3, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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", "image/svg+xml": "\n\n\n\n", "text/plain": [ "