├── README.md └── State_of_health_ANN.ipynb /README.md: -------------------------------------------------------------------------------- 1 | # Prediction-of-lithium-ion-batteries-SOH 2 | Artificial Neural Network (ANN) has been used to estimate state-of-health (SOH) of lithium-ion pouch cells. The batteries were stored at different storage temperature (35°C and 60°C) and conditions (fully-discharged and fully-charged) and their capacity was recorded for the duration of 10 months at one-month intervals. 3 | -------------------------------------------------------------------------------- /State_of_health_ANN.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "markdown", 5 | "metadata": {}, 6 | "source": [ 7 | "# State-Of-Health Estimation of Lithium-ion Pouch Cells Using Artificial Neural Network\n", 8 | "Artificial Neural Network (ANN) has been used to estimate state-of-health (SOH) of lithium-ion pouch cells. The batteries were stored at different storage temperature (35°C and 60°C) and conditions (fully-discharged and fully-charged) and their capacity was recorded for the duration of 10 months at one-month intervals. \n", 9 | "\n", 10 | "## Library Imports" 11 | ] 12 | }, 13 | { 14 | "cell_type": "code", 15 | "execution_count": 184, 16 | "metadata": {}, 17 | "outputs": [], 18 | "source": [ 19 | "# Numpy and Pandas \n", 20 | "import numpy as np\n", 21 | "import pandas as pd\n", 22 | "\n", 23 | "# Vizualization\n", 24 | "from matplotlib import pyplot as plt\n", 25 | "%matplotlib inline\n", 26 | "import seaborn as sns\n", 27 | "sns.set_style('darkgrid')\n", 28 | "\n", 29 | "# Machine learning algorithms\n", 30 | "from sklearn.neural_network import MLPRegressor\n", 31 | "\n", 32 | "# Machine learning pipeline \n", 33 | "from sklearn.model_selection import train_test_split\n", 34 | "from sklearn.pipeline import make_pipeline\n", 35 | "from sklearn.preprocessing import StandardScaler\n", 36 | "from sklearn.model_selection import GridSearchCV\n", 37 | "\n", 38 | "# Regression Metrics\n", 39 | "from sklearn.metrics import mean_absolute_error\n", 40 | "from sklearn.metrics import r2_score\n", 41 | "\n", 42 | "# Ignore ConvergenceWarning messages\n", 43 | "import warnings\n", 44 | "from sklearn.exceptions import ConvergenceWarning\n", 45 | "warnings.simplefilter(action='ignore', category=ConvergenceWarning)\n", 46 | "\n", 47 | "# Check the fitted_model\n", 48 | "from sklearn.exceptions import NotFittedError\n", 49 | "\n", 50 | "# Save python obect to disk\n", 51 | "import pickle" 52 | ] 53 | }, 54 | { 55 | "cell_type": "markdown", 56 | "metadata": {}, 57 | "source": [ 58 | "## Exploratory Analysis" 59 | ] 60 | }, 61 | { 62 | "cell_type": "code", 63 | "execution_count": 185, 64 | "metadata": {}, 65 | "outputs": [ 66 | { 67 | "data": { 68 | "text/html": [ 69 | "
\n", 70 | "\n", 83 | "\n", 84 | " \n", 85 | " \n", 86 | " \n", 87 | " \n", 88 | " \n", 89 | " \n", 90 | " \n", 91 | " \n", 92 | " \n", 93 | " \n", 94 | " \n", 95 | " \n", 96 | " \n", 97 | " \n", 98 | " \n", 99 | " \n", 100 | " \n", 101 | " \n", 102 | " \n", 103 | " \n", 104 | " \n", 105 | " \n", 106 | " \n", 107 | " \n", 108 | " \n", 109 | " \n", 110 | " \n", 111 | " \n", 112 | " \n", 113 | " \n", 114 | " \n", 115 | " \n", 116 | " \n", 117 | " \n", 118 | " \n", 119 | " \n", 120 | " \n", 121 | " \n", 122 | " \n", 123 | " \n", 124 | " \n", 125 | " \n", 126 | " \n", 127 | " \n", 128 | " \n", 129 | " \n", 130 | "
SOHmonthTempCharged
00.975434000
10.984243100
20.992927200
30.993066300
40.992711400
\n", 131 | "
" 132 | ], 133 | "text/plain": [ 134 | " SOH month Temp Charged\n", 135 | "0 0.975434 0 0 0\n", 136 | "1 0.984243 1 0 0\n", 137 | "2 0.992927 2 0 0\n", 138 | "3 0.993066 3 0 0\n", 139 | "4 0.992711 4 0 0" 140 | ] 141 | }, 142 | "execution_count": 185, 143 | "metadata": {}, 144 | "output_type": "execute_result" 145 | } 146 | ], 147 | "source": [ 148 | "df = pd.read_csv('soh.csv')\n", 149 | "df.head()" 150 | ] 151 | }, 152 | { 153 | "cell_type": "code", 154 | "execution_count": 186, 155 | "metadata": {}, 156 | "outputs": [ 157 | { 158 | "data": { 159 | "image/png": "iVBORw0KGgoAAAANSUhEUgAAAzEAAAMsCAYAAABk3izFAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDMuMC4yLCBodHRwOi8vbWF0cGxvdGxpYi5vcmcvOIA7rQAAIABJREFUeJzs3Xuc1PV97/H37ILAcsmWgJdKTFFRoom2KUKSKj5sVUwTY5KjovigaaL2xFwMMRoQEWy9INFoDOfEC6epFTTi7RjT9PSYEhNOgodjTGIqFe+hQipREbkKy+6cPxJWQAQEdme/zPP5j+zMzv4+35+7M/va+c1vKtVqtRoAAIBCNNR6AAAAgLdDxAAAAEURMQAAQFFEDAAAUBQRAwAAFEXEAAAARelW6wFgZ7S2tua2227L9773vbS2tqalpSXHHXdcvvSlL2Xy5MkZMmRIzj777JrOuGzZsnzwgx/Mk08+WdM5ANgz/fKXv8zXv/71LF++PNVqNfvuu2/Gjx+fIUOGJEm+853v5Dvf+U42bNiQSqWSww47LF/+8pfzh3/4h0mSCRMmbPXx8tBDD83DDz+c/v37d/qaYEeJGIp02WWX5bXXXss//uM/pm/fvlmzZk0uvPDCXHLJJWlsbKz1eADQodavX5//+l//a7797W/n8MMPT5J897vfzbnnnps5c+bk2muvzcKFC3PzzTdnv/32S1tbWx544IGMHj06d999d/bdd98arwB2jYihOIsXL873vve9/OQnP0mfPn2SJE1NTfnbv/3b/PznP89DDz2UX/ziFznjjDPy8ssvZ8iQIfn617+epqam3HPPPZk9e3ZaWlry2muv5dxzz82YMWNy33335Z577snatWvTp0+f3Hrrrfna176WH/7wh+nbt2+OOOKIPPvss5k5c2ZWrlyZK6+8Mk899VRaWlrywQ9+MF/96lfTrVu3PPjgg7n++uvTq1evvPe9763xngJgT7V27dqsXLkya9asab/sYx/7WPr06ZOlS5fmzjvvzI9+9KO84x3vSJI0NDTk4x//eB5//PHcfPPNmTJlSq1Gh91CxFCcBQsW5OCDD24PmI0GDhyYUaNG5aGHHsrSpUtz2223Za+99sppp52WBx98MCeccELuvvvu3HLLLfmDP/iD/PKXv8ynP/3pjBkzJknyzDPP5Ic//GH69OmTO++8MwsWLMg//dM/pVKp5LzzzmvfzlVXXZXDDz88V199dVpbWzNhwoT8wz/8Qz7xiU9k4sSJufPOO3PwwQfn5ptv7tT9AkD9eMc73pGLLroo55xzTgYMGJD3v//9GTFiRD7ykY9k7ty5OfDAA9sDZlMf+tCH8o1vfKP941tvvTUPPPBAZ44Ou4WIoTgNDQ1pa2vb5uccf/zx6dWrV5JkyJAhWbZsWXr37p2bbropP/7xj/PrX/86Cxcu3OwvWIceemh7GP34xz/OKaeckh49eiRJRo8enZkzZyZJfvSjH+Xf/u3fcs899yRJXn/99STJo48+mkMOOSQHH3xw+22uu+663bhyAHjDpz/96Zx22ml55JFH8sgjj2TGjBmZMWNGPvvZz2bDhg1bvc369etTqVTaP/7rv/7rrb4mBro6EUNxjjjiiDz33HNZtWrVZs/GLF26NJdeemmamprSrdsb39qVSiXVajUvvvhiRo8endNPPz1/+qd/mpNOOikPPfRQ++c1NTW1/3vT2ye/C6eN2tracsMNN+Sggw5KkqxYsSKVSiXz5s1LtVp9y68BALvLo48+ml/84hc555xzctxxx+W4447LBRdckI9+9KNJkkWLFuWll17KwIEDN7vd/Pnz8yd/8ie1GBl2K6dYpjj77LNPTj755EycODGrVq1KkqxatSqXXXZZmpub07Nnz63e7vHHH0///v3zuc99LkcffXR7wLS2tr7pc4899tg88MADWb9+fTZs2JD/+T//Z/t1Rx99dG699dZUq9WsX78+5513XmbNmpWjjjoqzzzzTBYuXJgkue+++3b30gEgSdK/f//ceOON+dnPftZ+2UsvvZRVq1blyCOPzNixY3PBBRdk6dKl7dffe++9efDBB3PuuefWYmTYrfypmCJNmTIl3/rWt3LGGWeksbEx69evz/HHH58vfvGLmTx58lZv82d/9me55557ctJJJ6VSqWT48OHp379/Fi1a9KbP/eQnP5nnn38+H//4x9PU1JRBgwa1H552ySWX5Morr8zJJ5+clpaWfOhDH8o555yT7t2759prr82FF16Y7t2756ijjurQfQBA/Ro8eHD++3//77n++uvz4osvpkePHunbt2+uuuqqHHjggfnKV76Su+++O+edd17Wr1+f9evX533ve1/uvPPO7L///rUeH3ZZpbrp8S9AkuQnP/lJXnnllZxyyilJkiuuuCI9evTIRRddVOPJAAAQMbAVS5cuzYQJE/Lyyy+nra0tQ4cOzWWXXZa+ffvWejQAgLonYgAAgKJ4YT8AAFAUEQMAABRFxAAAAEXplFMst7W1pbV1519609hY2aXbl6oe112Pa06su97syrq7d2/czdOwO+zq41xXVK8/n2/F/tic/fEG+2Jzu7o/dvRxrlMiprW1muXL1+z07Zubm3bp9qWqx3XX45oT6643u7LugQOdIa8r2tXHua6oXn8+34r9sTn74w32xeZ2dX/s6OOcw8kAAICiiBgAAKAoIgYAACiKiAEAAIrSKS/sB4Cu6uMf/3j69v3dC0kHDRqU0aNH58orr0xjY2OOPvrofOELX6jxhABsScQAULfWrVuXJJk5c2b7ZaecckqmT5+ed73rXfmbv/mbLFiwIIcffnitRgRgKxxOBkDdWrhwYdauXZvPfOYz+au/+qs88sgjWb9+fQ444IBUKpUcffTRefjhh2s9JgBb8EwMAHWrZ8+eOfvss3Paaafl17/+dc4999z069ev/frevXvnhRde2O7XaWyspLm5qSNH7XSNjQ173Jp2hf2xOfvjDfbF5jprf4gYAOrW4MGD8+53vzuVSiWDBw9O3759s3z58vbrV69evVnUvBVvdrnnsz82Z3+8wb7YnDe7BIAOds899+Tqq69OkixdujRr165NU1NT/uM//iPVajU/+clPMmzYsBpPCcCWPBMDQN069dRTc/HFF+fMM89MpVLJVVddlYaGhlx44YVpbW3N0UcfnSOPPLLWYwKwBREDQN3aa6+98vWvf/1Nl9911101mAaAHeVwMgAAoChFPBPTmh1/kc/utnbdhqxasbYm2wYAgLerT79e6dWjNr/mv97S2inbKSJienZvzB9N+H5Ntv3rqz+SVTXZMgAAvH29enSr6e/OKzthOw4nAwAAiiJiAACAoogYAACgKCIGAAAoiogBAACKImIAAICiFHGKZYDdrR7OoQ8AeyoRA9SlejiHPgDsqRxOBgAAFEXEAAAARRExAABAUUQMAABQFBEDAAAURcQAAABFETEAAEBRRAwAAFAUEQMAABRFxAAAAEURMQAAQFFEDAAAUBQRAwAAFEXEAAAARRExAABAUUQMAABQlB2KmFdeeSXHHntsnn322SxatChnnnlm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7nAyAOrW/fffn5tvvjlJ0qtXr1Qqlbz3ve/N/PnzkyRz587NsGHDajkiAFvhmRgA6taJJ56Yiy++OGeddVY2bNiQiRMn5qCDDsqll16a6667LgceeGBGjRpV6zEB2IKIAaBuNTU15YYbbnjT5bNmzarBNADsKIeTAQAARRExAABAUUQMAABQFBEDAAAURcQAAABFETEAAEBRRAwAAFAUEQMAABRFxAAAAEURMQAAQFFEDAAAUBQRAwAAFEXEAAAARRExAABAUUQMAABQFBEDAAAURcQAAABFETEAAEBRRAwAAFAUEQMAABRFxAAAAEURMQAAQFFEDAAAUBQRAwAAFEXEAAAARRExAABAUUQMAABQFBEDAAAURcQAAABFETEAAEBRRAwAAFAUEQMAABRFxAAAAEURMQAAQFFEDAAAUBQRAwAAFEXEAAAARRExAABAUUQMAABQFBEDAAAURcQAAABF6batK1taWjJx4sQsWbIk69evz3nnnZeDDz44EyZMSKVSyZAhQzJlypQ0NGghAACgc2wzYh544IE0NzfnmmuuyauvvppPfOITGTp0aMaNG5cRI0Zk8uTJmTNnTk444YTOmhcAAKhz23wK5aSTTsqXvvSl9o8bGxuzYMGCDB8+PEkycuTIzJs3r2MnBAAA2MQ2n4np3bt3kmTVqlU5//zzM27cuEybNi2VSqX9+pUrV253I42NlTQ3N+2GcWujVrM3NjYUvd92Rj2uObHuelSv6waA3WGbEZMk//mf/5nPf/7zGTNmTE4++eRcc8017detXr06/fr12+5GWlurWb58zU4POXBg352+7e6wK7Pviubmppptu1bqcc2JdddCqfcrtZ4bALqCbR5O9vLLL+czn/lMLrroopx66qlJksMOOyzz589PksydOzfDhg3r+CkBAAB+b5sRc9NNN2XFihX51re+lbFjx2bs2LEZN25cpk+fntGjR6elpSWjRo3qrFkBAAC2fTjZpEmTMmnSpDddPmvWrA4bCAAAYFu8wQsAAFAUEQMAABRFxAAAAEURMQAAQFFEDAAAUBQRAwAAFEXEAAAARdnm+8QAwJ6spaUlEydOzJIlS7J+/fqcd955OfjggzNhwoRUKpUMGTIkU6ZMSUODv/kBdCUiBoC69cADD6S5uTnXXHNNXn311XziE5/I0KFDM27cuIwYMSKTJ0/OnDlzcsIJJ9R6VAA24U9LANStk046KV/60pfaP25sbMyCBQsyfPjwJMnIkSMzb968Wo0HwFvwTAwAdat3795JklWrVuX888/PuHHjMm3atFQqlfbrV65cud2v09hYSXNzU4fO2tkaGxv2uDXtCvtjc/bHG+yLN+uM/SFiAKhr//mf/5nPf/7zGTNmTE4++eRcc8017detXr06/fr12+7XaG2tZvnyNR05Zqdrbm7a49a0K+yPzdkfb+iK+2LgwL413f6u7I8dnd3hZADUrZdffjmf+cxnctFFF+XUU09Nkhx22GGZP39+kmTu3LkZNmxYLUcEYCtEDAB166abbsqKFSvyrW99K2PHjs3YsWMzbty4TJ8+PaNHj05LS0tGjRpV6zEB2ILDyQCoW5MmTcqkSZPedPmsWbNqMA0AO8ozMQAAQFFEDAAAUBQRAwAAFEXEAAAARRExAABAUUQMAABQFBEDAAAURcQAAABFETEAAEBRRAwAAFAUEQMAABRFxAAAAEURMQAAQFFEDAAAUBQRAwAAFEXEAAAARRExAABAUUQMAABQFBEDAAAURcQAAABFETEAAEBRRAwAAFAUEQMAABRFxAAAAEURMQAAQFFEDAAAUBQRAwAAFEXEAAAARRExAABAUUQMAABQFBEDAAAURcQAAABFETEAAEBRRAwAAFAUEQMAABRFxAAAAEURMQAAQFFEDAAAUBQRAwAAFEXEAAAARRExAABAUUQMAABQFBEDAAAURcQAAABFETEAAEBRRAwAAFAUEQMAABRFxAAAAEURMQAAQFF2KGIee+yxjB07NkmyaNGinHnmmRkzZkymTJmStra2Dh0QAABgU9uNmBkzZmTSpElZt25dkmTq1KkZN25c7rjjjlSr1cyZM6fDhwQAANhouxFzwAEHZPr06e0fL1iwIMOHD0+SjBw5MvPmzeu46QAAALbQbXufMGrUqCxevLj942q1mkqlkiTp3bt3Vq5cud2NNDZW0tzctAtj1latZm9sbCh6v+2MelxzYt31qF7XDQC7w3YjZksNDW88ebN69er069dvu7dpba1m+fI1b3dT7QYO7LvTt90ddmX2XdHc3FSzbddKPa45se5aKPV+pdZzA0BX8LbPTnbYYYdl/vz5SZK5c+dm2LBhu30oAACAt/K2I2b8+PGZPn16Ro8enZaWlowaNaoj5gIAANiqHTqcbNCgQbnrrruSJIMHD86sWbM6dCgA6EyPPfZYrr322sycOTOLFi3KhAkTUqlUMmTIkEyZMmWzQ6kBqD33ygDUNW8lAFAeEQNAXfNWAgDledtnJwOAPYm3Eti6ej4F+tbYH5uzP97wVvuiNUnP7o2dP1AX0BnfGyIGADZRi7cS6Irq9dTvb8X+2Jz98Ya32hcDB/bNH034fg0mSn599Udqst2NOuOtVRxOBgCb8FYCAF2fiAGATXgrAYCuz+FkANQ9byUAUBbPxAAAAEURMQAAQFEcTgYAwB6pT79e6dWj43/d3dEzarH7iBgAAPZIvXp0q9vTHO/pHE4GAAAURcQAAABFETEAAEBRRAwAAFAUEQMAABRFxAAAAEURMQAAQFFEDAAAUBQRAwAAFEXEAAAARRExAABAUUQMAABQFBEDAAAURcQAAABFETEAAEBRRAwAAFAUEQMAABRFxAAAAEURMQAAQFFEDAAAUBQRAwAAFEXEAAAARRExAABAUUQMAABQFBEDAAAURcQAAABFETEAAEBRRAwAAFAUEQMAABRFxAAAAEXpVusBAKCe9enXK7161ObheO26DVm1Ym1Ntl1LO7vPBw7su8vbrtd9DrubiAGAGurVo1v+aML3a7LtX1/9kayqyZZryz6H8jmcDAAAKIqIAQAAiiJiAACAoogYAACgKF7YDwB0ulqelQ0on3sPAKDT1foMYUDZHE4GAAAURcQAAABFETEAAEBRRAwAAFAUEQMAABTF2ckAoE693tKagQP7vuX127qOnbO9fd7R2+7ZvXG3fb23s47dvW0QMQBQp3p2b3Sa405W631eb9uu1++zeuBwMgAAoCgiBgAAKIqIAQAAiiJiAACAoogYAACgKCIGAAAoiogBAACKImIAAICi7NSbXba1teWyyy7Lk08+mb322itXXHFF3v3ud+/u2QCgJjzOAXRtO/VMzL/+679m/fr1mT17dr7yla/k6quv3t1zAUDNeJwD6Noq1Wq1+nZvNHXq1BxxxBH5yEc+kiQ55phj8n/+z//Z7cMBQC14nAPo2nbqmZhVq1alT58+7R83NjZmw4YNu20oAKglj3MAXdtORUyfPn2yevXq9o/b2trSrdtOvbwGALocj3MAXdtORcz73//+zJ07N0nyy1/+MocccshuHQoAasnjHEDXtlOvidl41pannnoq1Wo1V111VQ466KCOmA8AOp3HOYCubaciBgAAoFa82SUAAFAUEQMAABRFxAAAAEXp0hHz6quv5mc/+1lmz56dennpTj2uObHuelp3Pa55o6VLl+b//t//u9mpe6Grqeef0a2xP95gX2zO/nizznyc67Iv7H/mmWcye/bsrF27NtVqNa+88kpuvPHGVCqVWo/WYepxzYl119O663HNG61duzb/+q//mjvuuCPLli3LmDFj8qlPfarWY8Fm6vlndGvsjzfYF5uzP96ssx/nuuQ7dz3//PP5h3/4hxx77LE58sgjs88+++Tiiy/OU089lUMPPbTW43WIelxzYt31tO56XPOmevXqlZNOOik/+tGPctRRRwkYupx6/xndkv3xBvtic/bH1nX241yXi5gNGzbkn/7pnzJ8+PAMGzYs/fv3z7p167Js2bI9tm7rcc2JddfTuutxzVtatmxZrrzyyvTo0SMXXHBBkmT9+vXZa6+9ajwZ+Bndkv3xBvtic/bHW+vsx7ku95qYFStW5Kmnnmr/xli/fn0+9alP5Q//8A/32HdMfqs177///nvsmpO3XvegQYPqct2+x/dcy5YtyzXXXJOmpqZcddVVSX73Zoob79jXrFlTy/GgLu+XtmVHHp/Wrl1b4yk7R73ff2/Jz8rW1eJxrss9E5Mkr7/+eh577LF069Yt559/fg499NBMmTKl/fonn3wyK1asyLBhw/aY6t1yze95z3syefLkJEm1Ws2jjz6a119/PX/2Z3+2x6w5efO6hw4dmksvvTTJ7/7a0a1bl/wW3WXb+x5ftGhR2tra8kd/9Ed7zP/vbX2PJ8njjz+eV155JSNHjtxj1pz87k78+uuvT0tLS6ZOndp+eaVSySuvvJJrr702ra2tWbduXa6//vo0NHS5vy1RJ+rxfmlbtnaftfHxqVqt5t///d8ze/bsXH311Xv8z2293n+/la3tj40/K6tWrcozzzyTZcuW5bjjjquL/VGrx7ku+cL+p556KldffXUOPfTQNDU15Ytf/GKS5IknnsgjjzySu+++O+973/vywgsv5LbbbtsjvkE2XXPv3r3zhS98IcnvvjGWL1+eCy64IPvtt19++9vfZsaMGXvMHeZb/b9Ofncn0a1bt6xatSovvvhiDj300D3i/3Xy1ut+9tln89hjj+Xb3/52PvjBD+bpp5/Ot7/97T3i//ema+7Vq1fOP//89ut++tOf5uKLL86IESPy4osv7jE/1xu9/PLLGTBgQFauXJm+ffsmSZ5++uncddddWbVqVa666qp84xvfSKVSybhx42o8LfWqHu+XtuWtHpc3/QPbtddemxUrVuRv//Zv96j7rC3V8/331rzVz8rSpUvzve99L//rf/2vDB48OC+99FJuvfXWPX5/JLV5nOuSEZMkLS0tefLJJ9OjR48MGTIkzz33XObMmZMVK1bkIx/5SIYOHZorrrgiJ554YoYPH17rcXeLlpaWLFy4MD179syQIUM2O45wxYoV6devX6644ooMHjw4Z51qXq1FAAAgAElEQVR1Vo2n3X22/H/9wx/+MAsXLszrr7+exsbG/OpXv8rixYtz7rnn5tRTT631uLvNlutesmRJbr311vziF7/IYYcdlr/7u7/LLbfcktWrV+fLX/5yrcfdLTauuWfPnjn44IOzePHi/Pa3v83MmTNz5plnZvjw4ZkyZUpOOumkfPCDH6z1uLvV2rVrc8cdd+Skk07K/vvvn8svvzy9evXKBRdckIaGhnz/+9/Pz3/+80ycODGNjY21Hpc6VY/3S9uy5f7Y+Ljc1taWhoaGvPbaa/m7v/u7/OY3v8kdd9yxR/+yWs/331uz5fdGkvz4xz/OzJkzM378+AwZMiTTpk3Lcccdt8f8nro9nf0412X/jNK9e/fss88+eeqpp5Ikjz76aF588cWccsopGTp0aFatWpVf/epXaW1trfGku0/37t2z77775rnnnsvatWuzatWqtLW1ZdWqVenZs2daW1vzwgsvpHfv3rUedbfa+P/66aefTmtra975zndmzpw5OeKIIzJq1KgcfvjhOeWUU/Inf/IntR51t9rye/zhhx/OCy+8kC984Qv5wAc+kPPPPz9/8Ad/kPe85z01nnT36d69e/bee+88+eSTWb58ee6///7ccMMNWbJkSe69994sXbo0P/3pT9PW1lbrUXe7Xr165dRTT83AgQNz++235/nnn89XvvKVNDQ05Fe/+lV++tOf5vjjjxcw1FQ93i9ty6aPT6tWrWr/w+Ldd9+d66+/Pp/97GfTr1+/DB48OC+88EKNp+1Y9Xz/vTUbvzeefPLJrF+/Ps8991xeeumlfOhDH8qQIUOyevXqPP7443vU76nb09mPc132mZiNWltb09rams997nP54he/mCOPPDIrVqzI9OnT09TUtEf+JWjNmjWZNWtWbrzxxnzyk5/MM888k3e84x1ZsWJFDjnkkHz2s59N//79az3mbtfS0pLu3bsnSX7+85/na1/7WgYNGpRhw4blj//4jzN06NAaT9gxNmzYkIaGhpx77rk5++yz86EPfShr167NxRdfnIsuuij77LPPHvfaoGq1mtWrV+eSSy7JRRddlEGDBmX06NF517velf3333+P/Lne1He+851UKpWcccYZ+dnPfpa5c+emubk5H/3oR7P33nvXejyoy/ulbWltbU1jY2OWLFmSqVOnpl+/fhk5cmT++I//OPvuu2+tx+tU9X7/vaVqtZqXX345N998c/7iL/4iM2bMyFlnnZU777wzRxxxxGaHydeTznic6/L3QI2NjVm/fn2ampqyfPnyrFmzJtOmTcuAAQPysY99rNbjdYimpqb8xV/8Rf7lX/4lhxxySL761a9m+fLlee211/boM19sDJgkGThwYPbff//Mnz8/H/vYx/bYgEmSbt26Zf369enXr19ef/31JMnf//3fp3///tl///1rPF3HqFQq2bBhQ9asWZPnnnsugwYNyoABA/JXf/VXOeKII5Kk/XCNPdHw4cPzhS98Ic8991wef/zxnHzyyRk+fLiAocuox/ulbWlsbMzrr7+em2++Ofvuu28mTZrUft2efBKaran3++8tVSqVVKvVPPnkk/kv/+W/5HOf+1y+/e1vZ+DAgTn55JNrPV7NdMbjXJd/JmajhQsXZurUqenRo0cOOeSQjB07Nvvss0+tx+pQ//Ef/5FLLrkkZ555Zv7yL/8y1Wp1jz7edqN169ZlxowZaWpqygEHHJB3v/vdGTJkyB6//oULF+aKK67IXnvtlQMPPDAf/vCH86d/+qe1HqtDPfXUU7niiivyzne+Mz179syXv/zl7L333nv8/+skWbJkSZ544okMHjw4Bx544B6/XspUj/dL27J8+fI0Nzcnqa9f1Lemnu+/t2bhwoW57rrr0r9//xx00EH52Mc+tsf/nro9Hf04V0zEJMnq1auzbt26PfJQqrfy7LPP5sEHH8zYsWPTp0+fWo/TaZYtW5ZXX301Bx10UK1H6VTLli3L8uXLc+CBB9Z6lE7z29/+Nr/97W+z33775Z3vfGetx6mJen3Qpwz1eL+0PfUeMBu5/97cxmcte/bsWeNJup6OeJwrKmLqVb2/q7df8AAA2JSIAQAAiuK5UAAAoCgiBgAAKIqIAQAAiiJiAACAoogYAACgKCIGAAAoiogBAACKImIAAICiiBgAAKAoIgYAACiKiAEAAIoiYgAAgKKIGAAAoCgiBgAAKIqIAQAAiiJiAACAoogYAACgKCIGAAAoiogBAACKImIAAICiiBgAAKAoIgYAACiKiAEAAIoiYgAAgKKIGAAAoCgiBgAAKIqIAQAAiiJiAACAoogYAACgKCIGAAAoiogBAACKImIAAICiiBgAAKAoIgYAACiKiAEAAIoiYgAAgKKIGAAAoCgiBgAAKIqIAQAAiiJiAACAoogYAACgKCIGAAAoiogBAACKImIAAICiiBgAAKAoIgYAACiKiAEAAIoiYgAAgKKIGAAAoCgiBgAAKIqIAQAAiiJiAACAoogYAACgKCIGAAAoiogBAACKImIAAICiiBgAAKAoIgYAACiKiAEAAIoiYgAAgKKIGAAAoCgiBgAAKEq3Wg8Au9MVV1yRRx55JEny7LPPZv/990/Pnj2TJLNnz27/NwDwhv/23/5bhg4dmuOPPz4TJkzIkCFDcvbZZ9d6LHhLIoY9yqRJk9r//ed//ue59tpr8773va+GEwFA1zd//vwcfPDBtR4DdpiIoW48/fTTufLKK7NixYq0trbmr//6r/OJT3wi8+bNy/Tp0zNw4MAsWrQoTU1NOeecczJz5sz8+te/zoc//OGMHz8+8+bNyze/+c3svffeef7559PU1JSpU6fmwAMPrPXSAKgD8+fPz3XXXZf99tsvzz//fHr16pW/+Zu/ycyZM/P888/nxBNPzMSJEzN79uzMnDkzDQ0NGTBgQC699NIMHjw4EyZMSJ8+ffLkk0/mxRdfzKGHHppp06bl/vvvz+OPP56vfe1raWxsTJL84he/yBlnnJGXX345Q4YMyde//vU0NTXVeA/AG0QMdaGlpSVf+tKXct1112Xo0KFZsWJFTj/99Pa/Ov3qV7/Kvffem6FDh+bTn/50/v7v/z7/+I//mBUrVuSYY47JOeeckyR57LHHcvvtt+f9739/Zs2alQkTJuSuu+6q5dIAqCP/9m//lilTpuSwww7LOeeck1tuuSW33XZbVq1alZEjR+Z973tf/sf/+B+ZPXt2+vfvn/vuuy+f//zn8/3vfz9J8vjjj+e2225LpVLJ6aefnn/5l3/JWWed1f7fE044IXPmzMnSpUtz2223Za+99sppp52WBx98MB//+MdrvHp4g4ihLjz77LN54YUXMn78+PbL1q9fnyeeeCKDBg3KAQcckKFDhyZJ3vWud2XAgAHp3r173vnOd6apqSnLly9Pkhx++OF5//vfnyQ57bTTcsUVV2TlypXp27dv5y8KgLozaNCgHHbYYUmSAw44IH379s1ee+2V/v37p3fv3vnf//t/5y//8i/Tv3//JMknP/nJXHnllVm8eHGS5Jhjjslee+2VJDnkkEPy2muvbXU7xx9/fHr16pUkGTJkSJYtW9bRS4O3RcRQF9ra2tLc3Jzvfve77Ze99NJL6devXx599NH2O/SNunXb+o/Gppe3tbUlSRoanOQPgM6xvcerSqXypttUq9Vs2LAhSTY7wU2lUkm1Wt3qdjb9utv6PKgVv31RFw4++OA0NDS0P52+ZMmSfPSjH83ChQvf1td5/PHH8/TTTyf53dnOjjrqqPTu3Xu3zwsAO2P48OH553/+5/ZnTu699940Nzfn3e9+9zZv19jY2B46UALPxFAX9tprr9x444256qqrctNNN2XDhg35yle+kiOPPDLz5s3b4a+z995759prr82SJUsycODATJs2rQOnBoC3Z8SIEWloaMinPvWptLW1pX///rn55pu3e9TAn//5n+e6665LS0tLJ00Ku6ZS9fwg7JB58+Zl2rRpmx2SBgBA53M4GQAAUBTPxAAAAEXxTAwAAFAUEQMAABRFxAAAAEXplFMst7W1pbV1519609hY2aXbl6oe112Pa06su97syrq7d2/czdOwO+zK45yfg/pi3fWjHtec7Pq6d/RxrlMiprW1muXL1+z07Zubm3bp9qWqx3XX45oT6643u7LugQP77uZp2B125XHOz0F9se76UY9rTnZ93Tv6OOdwMgAAoCgiBgAAKIqIAQAAiiJiAACAoogYAACgKCIGAAAoiogBAACKImIAAICiiBgAAKAoIgYAACiKiAEAAIoiYgAAgKKIGAAAoCjdaj3AjmhNMnBg35pse+26DVm1Ym1Ntg0AAG9Xn3690qtHbX7Nf72ltVO2U0TE9OzemD+a8P2abPvXV38kq2qyZQAAePt69ehW09+dV3bCdhxOBgAAFEXEAAAARRExAABAUUQMAABQFBEDAAAURcQAAABFKeIUywC7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\n", 160 | "text/plain": [ 161 | "
" 162 | ] 163 | }, 164 | "metadata": {}, 165 | "output_type": "display_data" 166 | } 167 | ], 168 | "source": [ 169 | "df.hist(figsize=(14,14), xrot=-45)\n", 170 | "plt.show()" 171 | ] 172 | }, 173 | { 174 | "cell_type": "code", 175 | "execution_count": 187, 176 | "metadata": {}, 177 | "outputs": [ 178 | { 179 | "data": { 180 | "text/html": [ 181 | "
\n", 182 | "\n", 195 | "\n", 196 | " \n", 197 | " \n", 198 | " \n", 199 | " \n", 200 | " \n", 201 | " \n", 202 | " \n", 203 | " \n", 204 | " \n", 205 | " \n", 206 | " \n", 207 | " \n", 208 | " \n", 209 | " \n", 210 | " \n", 211 | " \n", 212 | " \n", 213 | " \n", 214 | " \n", 215 | " \n", 216 | " \n", 217 | " \n", 218 | " \n", 219 | " \n", 220 | " \n", 221 | " \n", 222 | " \n", 223 | " \n", 224 | " \n", 225 | " \n", 226 | " \n", 227 | " \n", 228 | " \n", 229 | " \n", 230 | " \n", 231 | " \n", 232 | " \n", 233 | " \n", 234 | " \n", 235 | " \n", 236 | " \n", 237 | " \n", 238 | " \n", 239 | " \n", 240 | " \n", 241 | " \n", 242 | " \n", 243 | " \n", 244 | " \n", 245 | " \n", 246 | " \n", 247 | " \n", 248 | " \n", 249 | " \n", 250 | " \n", 251 | " \n", 252 | " \n", 253 | " \n", 254 | " \n", 255 | " \n", 256 | " \n", 257 | " \n", 258 | " \n", 259 | " \n", 260 | " \n", 261 | " \n", 262 | " \n", 263 | "
SOHmonthTempCharged
count87.00000087.00000087.00000087.000000
mean0.8986604.9425290.4942530.494253
std0.1241043.1525420.5028650.502865
min0.5440340.0000000.0000000.000000
25%0.8788442.0000000.0000000.000000
50%0.9636195.0000000.0000000.000000
75%0.9794178.0000001.0000001.000000
max1.00000010.0000001.0000001.000000
\n", 264 | "
" 265 | ], 266 | "text/plain": [ 267 | " SOH month Temp Charged\n", 268 | "count 87.000000 87.000000 87.000000 87.000000\n", 269 | "mean 0.898660 4.942529 0.494253 0.494253\n", 270 | "std 0.124104 3.152542 0.502865 0.502865\n", 271 | "min 0.544034 0.000000 0.000000 0.000000\n", 272 | "25% 0.878844 2.000000 0.000000 0.000000\n", 273 | "50% 0.963619 5.000000 0.000000 0.000000\n", 274 | "75% 0.979417 8.000000 1.000000 1.000000\n", 275 | "max 1.000000 10.000000 1.000000 1.000000" 276 | ] 277 | }, 278 | "execution_count": 187, 279 | "metadata": {}, 280 | "output_type": "execute_result" 281 | } 282 | ], 283 | "source": [ 284 | "df.describe()" 285 | ] 286 | }, 287 | { 288 | "cell_type": "code", 289 | "execution_count": 188, 290 | "metadata": {}, 291 | "outputs": [ 292 | { 293 | "data": { 294 | "image/png": "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wnlsFyp79+5VTEyMHn/8cUnSP/7xD915553q2rWrvvnmm2p/sezZs0dnnXWW//lLL730s5mK3Z133nmSTt03Jzk5WYZh6IwzztDx48fVqVMn/w3Zevfurffff18XXnihunbtKkk666yzVFlZ+Yv77d69uyQpISFB5eXljXAkwffFF1+osLBQOTk5kqSqqir/Hy3dunWTJMXFxSk5OVmSdMYZZ6iiokKSdMkllygkJERt2rRRVFSUjh07pvj4+CAchTnOPvtsff7559Ve279/vz766CN17txZERERkqSwsFO/gtq2bavHHntMUVFROnTwwh1BAAACgElEQVTokFJTT904rF27dv7vPXz4sDp37ixJ6tWrl1avXq0vvvhCBw8e1K233ipJOnbsmPbt26cvv/zS/wdOamoqodKIbPfpr927d2v69On+/1k7duyo2NhYZWdna/bs2SotLZV06i/02bNnKzs7O5jlBp1xmrslGoahoqIilZWVSZK2bdumjh07nvbfGIYhr9db637tLCkpSX379tWSJUu0aNEiDR48WO3atZNU+8+jsLBQ0qlfnOXl5bXestXqBgwYoPfee0/79u2TJJ04cUJ5eXlq2bLlL/4spk6dqpkzZyovL09t2rTRD5ck/GHlQJLOPPNMffXVV5KkTz75RNKpn3mnTp308ssva8mSJRo2bJhSUlKUlJSkHTt2SPrfzxaNw3adyqBBg1RUVKQRI0YoKipKPp9PkydP1lVXXaWysjKNGjXK/wvwhhtucMSyTH2EhoZqzJgxuvnmmxUSEqLExERNnDhRq1at+sXv7969u2bPnu3/K9yJBg4cqG3btunGG29UWVmZrr76akVFRdXp3x4+fFi33HKLSkpK9Mgjj1T7ZdoUxcTEKC8vT1OnTpXP55PH49GAAQOUnJzsX/L7seuvv14jR45UXFycEhISdPjw4Z99z8MPP6wHH3xQUVFRCg8PV9u2bdW1a1f17dtXWVlZqqysVI8ePdS2bVs9/PDDGjdunF588UXFx8fb+pOIVsNVioEgKygo0IEDBzRu3Lhgl2Jpy5Yt0zXXXKP4+HjNnTtX4eHhys3NDXZZ+AnbdSoA7KlVq1a6/fbbFRUVpdjYWM47sSg6FQCAaZr2wi0AwFIIFQCAaQgVAIBpCBUAgGkIFQCAaQgVAIBp/h+sl0DskHqHzAAAAABJRU5ErkJggg==\n", 295 | "text/plain": [ 296 | "
" 297 | ] 298 | }, 299 | "metadata": {}, 300 | "output_type": "display_data" 301 | } 302 | ], 303 | "source": [ 304 | "correlations = df.corr()\n", 305 | "plt.figure(figsize=(7,6))\n", 306 | "sns.heatmap(correlations, cmap='RdBu_r')\n", 307 | "plt.show()" 308 | ] 309 | }, 310 | { 311 | "cell_type": "markdown", 312 | "metadata": {}, 313 | "source": [ 314 | "## Algorithm Selection" 315 | ] 316 | }, 317 | { 318 | "cell_type": "code", 319 | "execution_count": 189, 320 | "metadata": {}, 321 | "outputs": [], 322 | "source": [ 323 | "df['month'] = df['month'].astype(float)\n", 324 | "df['Temp'] = df['Temp'].astype(float)\n", 325 | "df['Charged'] = df['Charged'].astype(float)\n", 326 | "y = df.SOH\n", 327 | "X = df.drop('SOH', axis=1)" 328 | ] 329 | }, 330 | { 331 | "cell_type": "code", 332 | "execution_count": 190, 333 | "metadata": {}, 334 | "outputs": [], 335 | "source": [ 336 | "X_train, X_test, y_train, y_test = train_test_split(X, y, test_size = 0.2, random_state=1234)\n", 337 | "pipelines = {\n", 338 | " 'mlp' : make_pipeline(StandardScaler(), MLPRegressor(random_state=123))\n", 339 | "}" 340 | ] 341 | }, 342 | { 343 | "cell_type": "code", 344 | "execution_count": 191, 345 | "metadata": {}, 346 | "outputs": [], 347 | "source": [ 348 | "# MLP hyperparameters\n", 349 | "mlp_hyperparameters = {\n", 350 | " 'mlpregressor__alpha': [0.0001, 0.01, 1],\n", 351 | " 'mlpregressor__hidden_layer_sizes': [(3,), (5,), (7,), (10,), (40,)],\n", 352 | " 'mlpregressor__activation': ['logistic', 'relu']\n", 353 | "}\n", 354 | "\n", 355 | "# Create hyperparameters dictionary\n", 356 | "hyperparameters = {\n", 357 | " 'mlp': mlp_hyperparameters\n", 358 | "}" 359 | ] 360 | }, 361 | { 362 | "cell_type": "code", 363 | "execution_count": 192, 364 | "metadata": {}, 365 | "outputs": [ 366 | { 367 | "name": "stdout", 368 | "output_type": "stream", 369 | "text": [ 370 | "mlp has been fitted.\n" 371 | ] 372 | }, 373 | { 374 | "name": "stderr", 375 | "output_type": "stream", 376 | "text": [ 377 | "C:\\Users\\a2ghorba\\Anaconda3\\lib\\site-packages\\sklearn\\model_selection\\_search.py:841: DeprecationWarning: The default of the `iid` parameter will change from True to False in version 0.22 and will be removed in 0.24. This will change numeric results when test-set sizes are unequal.\n", 378 | " DeprecationWarning)\n" 379 | ] 380 | } 381 | ], 382 | "source": [ 383 | "# Create empty dictionary called fitted_models\n", 384 | "fitted_models = {}\n", 385 | "\n", 386 | "# Loop through model pipelines, tuning each one and saving it to fitted_models\n", 387 | "for name, pipeline in pipelines.items():\n", 388 | " model = GridSearchCV(pipeline, hyperparameters[name], cv=10, n_jobs=-1)\n", 389 | " \n", 390 | " # Fit model on X_train, y_train\n", 391 | " model.fit(X_train, y_train)\n", 392 | " \n", 393 | " # Store model in fitted_models[name] \n", 394 | " fitted_models[name] = model\n", 395 | " \n", 396 | " # Print '{name} has been fitted'\n", 397 | " print(name, 'has been fitted.')" 398 | ] 399 | }, 400 | { 401 | "cell_type": "code", 402 | "execution_count": 193, 403 | "metadata": {}, 404 | "outputs": [ 405 | { 406 | "name": "stdout", 407 | "output_type": "stream", 408 | "text": [ 409 | "mlp has been fitted.\n" 410 | ] 411 | } 412 | ], 413 | "source": [ 414 | "for name, model in fitted_models.items():\n", 415 | " try:\n", 416 | " pred = model.predict(X_test)\n", 417 | " print (name, 'has been fitted.')\n", 418 | " except NotFittedError as e:\n", 419 | " print(repr(e))" 420 | ] 421 | }, 422 | { 423 | "cell_type": "markdown", 424 | "metadata": {}, 425 | "source": [ 426 | "## ANN performance" 427 | ] 428 | }, 429 | { 430 | "cell_type": "code", 431 | "execution_count": 194, 432 | "metadata": {}, 433 | "outputs": [ 434 | { 435 | "name": "stdout", 436 | "output_type": "stream", 437 | "text": [ 438 | "mlp\n", 439 | "R2: 0.7637384160064201\n", 440 | "MAE: 0.026107481432609065\n" 441 | ] 442 | } 443 | ], 444 | "source": [ 445 | "for name,model in fitted_models.items():\n", 446 | " pred = fitted_models[name].predict(X_test)\n", 447 | " print(name)\n", 448 | " print('R2:', r2_score(y_test, pred))\n", 449 | " print('MAE:', mean_absolute_error(y_test, pred))" 450 | ] 451 | }, 452 | { 453 | "cell_type": "markdown", 454 | "metadata": {}, 455 | "source": [ 456 | "## Insight & Analysis" 457 | ] 458 | }, 459 | { 460 | "cell_type": "code", 461 | "execution_count": 195, 462 | "metadata": {}, 463 | "outputs": [ 464 | { 465 | "data": { 466 | "image/png": "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2bBhA5MnTyY3N9eK0kRExEeWBMTevXtJTU0FYOTIkZSXl3vnRUdH069fP+rr66mvr8dms130nrS0NPbs2WNFaSIi4iNLDjG5XC4cDof3td1up7m5mfDwc6vr27cvd911F2fPnmXBggXe9zidTgBiYmKora295HpsNoiL625BB53Lbg8LiT5AvQSiUOkDQqeXYOnDkoBwOBy43W7va4/H4w2HkpISjh07xvbt2wGYO3cuKSkpLd7jdrvp0aPHJddjGFBTU2dBB50rLq57SPQB6iUQhUofEDq9+LOP+Hinz8tacogpJSWFkpISAMrKykhOTvbOi42NJSoqioiICCIjI3E6nZw+fZqUlBR27NgBnAuRUaNGWVGaiIj4yJI9iPT0dHbt2sX06dMxDIPs7Gzy8/NJSEhgzJgx7N69m6lTpxIWFkZKSgq33HILo0aNYtmyZcyYMYNu3bqRk5NjRWkiIuIjm2EYhr+LaC+Px+DkSZe/y7hiobLbDOolEIVKHxA6vXTpQ0wiIhL8FBAiImJKASEiIqYUECIiYsqSs5gk+G3bX0XuzsNU1TbSxxnJotQkJgzu4++yRKQTKSDkItv2V5H93mc0NHsA+Ka2kez3PgNQSIh0ITrEJBfJ3XnYGw7nNTR7yN152D8FiYhfKCDkIlW1jZc1XURCkwJCLtLHGXlZ00UkNCkg5CKLUpOICm/5XyMqPIxFqUn+KUhE/EKD1HKR8wPROotJpGtTQIipCYP7KBBEujgdYhIREVMKCBERMaWAEBERUwoIERExpYAQERFTCggRETGlgBAREVMKCBERMaWAEBERUwoIERExpYAQERFTCggRETFlyc36PB4PK1eupLKykoiICLKyskhMTARg//79ZGdne5ctKyvjhRdeYPjw4YwbN47k5GQAxo4dy5w5c6woT0REfGBJQBQXF9PU1ERRURFlZWWsXr2adevWATB48GAKCgoA2LZtG7179yYtLY3du3czceJEHn/8cStKEhGRy2TJIaa9e/eSmpoKwMiRIykvL79ombq6OtauXUtmZiYA5eXlVFRUcO+997J48WKOHTtmRWkiIuIjSwLC5XLhcDi8r+12O83NzS2WefPNNxk/fjy9evUCoH///ixevJjXXnuNsWPHkpWVZUVpIiLiI0sOMTkcDtxut/e1x+MhPLzlqjZv3syaNWu8r0ePHk10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\n", 467 | "text/plain": [ 468 | "
" 469 | ] 470 | }, 471 | "metadata": {}, 472 | "output_type": "display_data" 473 | } 474 | ], 475 | "source": [ 476 | "mlp_pred = fitted_models['mlp'].predict(X_test)\n", 477 | "plt.scatter(mlp_pred, y_test)\n", 478 | "plt.xlabel('predicted') \n", 479 | "plt.ylabel('actual')\n", 480 | "plt.show()" 481 | ] 482 | }, 483 | { 484 | "cell_type": "code", 485 | "execution_count": 196, 486 | "metadata": {}, 487 | "outputs": [ 488 | { 489 | "data": { 490 | "text/plain": [ 491 | "Pipeline(memory=None,\n", 492 | " steps=[('standardscaler', StandardScaler(copy=True, with_mean=True, with_std=True)), ('mlpregressor', MLPRegressor(activation='relu', alpha=1, batch_size='auto', beta_1=0.9,\n", 493 | " beta_2=0.999, early_stopping=False, epsilon=1e-08,\n", 494 | " hidden_layer_sizes=(40,), learning_rate='constant',\n", 495 | " le...=True, solver='adam', tol=0.0001,\n", 496 | " validation_fraction=0.1, verbose=False, warm_start=False))])" 497 | ] 498 | }, 499 | "execution_count": 196, 500 | "metadata": {}, 501 | "output_type": "execute_result" 502 | } 503 | ], 504 | "source": [ 505 | "fitted_models['mlp'].best_estimator_" 506 | ] 507 | }, 508 | { 509 | "cell_type": "code", 510 | "execution_count": 197, 511 | "metadata": {}, 512 | "outputs": [], 513 | "source": [ 514 | "with open('MLP_SOH_model.pkl', 'wb') as f:\n", 515 | " pickle.dump(fitted_models['mlp'].best_estimator_, f)" 516 | ] 517 | } 518 | ], 519 | "metadata": { 520 | "kernelspec": { 521 | "display_name": "Python 3", 522 | "language": "python", 523 | "name": "python3" 524 | }, 525 | "language_info": { 526 | "codemirror_mode": { 527 | "name": "ipython", 528 | "version": 3 529 | }, 530 | "file_extension": ".py", 531 | "mimetype": "text/x-python", 532 | "name": "python", 533 | "nbconvert_exporter": "python", 534 | "pygments_lexer": "ipython3", 535 | "version": "3.7.0" 536 | } 537 | }, 538 | "nbformat": 4, 539 | "nbformat_minor": 2 540 | } 541 | --------------------------------------------------------------------------------