{
  "cells": [
    {
      "cell_type": "code",
      "execution_count": null,
      "metadata": {
        "collapsed": false
      },
      "outputs": [],
      "source": [
        "%matplotlib inline"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {},
      "source": [
        "\n# Likelihood Evolution\n\nEvolution of the log_likelihood along fit for train and test trajectories\n"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": null,
      "metadata": {
        "collapsed": false
      },
      "outputs": [],
      "source": [
        "import numpy as np\nimport pandas as pd\nfrom GLE_analysisEM import GLE_Estimator, GLE_BasisTransform\n\nfrom matplotlib import pyplot as plt\n\n# Printing options\npd.set_option(\"display.max_rows\", None)\npd.set_option(\"display.max_columns\", None)\npd.set_option(\"display.width\", None)\npd.set_option(\"display.max_colwidth\", None)\n\ndim_x = 1\ndim_h = 1\nrandom_state = 42\nforce = -np.identity(dim_x)\nmax_iter = 10\nN_big_steps = 150\nntrajs = 25\n\npot_gen = GLE_BasisTransform(basis_type=\"linear\")\n\n# Trajectory generation\ngenerator = GLE_Estimator(verbose=2, dim_x=dim_x, dim_h=dim_h, force_init=force, init_params=\"random\", basis=pot_gen, random_state=random_state)\nX, idx, Xh = generator.sample(n_samples=5000, n_trajs=ntrajs, x0=0.0, v0=0.0)\nX_val, idx_val, Xh_val = generator.sample(n_samples=5000, n_trajs=10, x0=0.0, v0=0.0)\nprint(\"Real parameters\", generator.get_coefficients())\n\ninitial_ll = generator.score(X, idx_trajs=idx)\ninitial_ll_val = generator.score(X_val, idx_trajs=idx_val)\nprint(\"Initial ll\", initial_ll, initial_ll_val)\n\nbasis = GLE_BasisTransform(basis_type=\"linear\")\n# Trajectory estimation\nestimator = GLE_Estimator(init_params=\"random\", dim_x=dim_x, dim_h=dim_h, basis=basis, OptimizeDiffusion=True, no_stop=True, max_iter=max_iter, n_init=1, random_state=None, verbose=0, multiprocessing=8)\n# We set some initial conditions, check for stability\n# estimator.set_init_coeffs(generator.get_coefficients())\n\nlogL_train = np.empty((N_big_steps * max_iter,))\nlogL_val = np.empty((N_big_steps * max_iter,))\nfor i in range(N_big_steps):\n    print(\"Step {}\".format(i))\n    estimator.set_params(warm_start=True)\n    estimator.fit(X, idx_trajs=idx)\n    estimator.get_coefficients()\n    logL_train[i * max_iter : (i + 1) * max_iter] = estimator.logL[0, :]\n    logL_val[i * max_iter : (i + 1) * max_iter] = estimator.score(X_val, idx_trajs=idx_val)\n\nprint(estimator.get_coefficients())\n\n\nplt.plot(logL_train[1:], label=\"Log L train\")\nplt.plot(logL_val[1:], label=\"Log L validation\")\nplt.plot([initial_ll] * N_big_steps * max_iter, label=\"Initial ll train\")\nplt.plot([initial_ll_val] * N_big_steps * max_iter, label=\"Initial ll validation\")\nplt.legend(loc=\"upper right\")\nplt.show()"
      ]
    }
  ],
  "metadata": {
    "kernelspec": {
      "display_name": "Python 3",
      "language": "python",
      "name": "python3"
    },
    "language_info": {
      "codemirror_mode": {
        "name": "ipython",
        "version": 3
      },
      "file_extension": ".py",
      "mimetype": "text/x-python",
      "name": "python",
      "nbconvert_exporter": "python",
      "pygments_lexer": "ipython3",
      "version": "3.9.7"
    }
  },
  "nbformat": 4,
  "nbformat_minor": 0
}