machinelearning

Machine learning code
git clone git://git.laack.co/machinelearning.git
Log | Files | Refs

StudentPerformanceNN.ipynb (29777B)


      1 {
      2  "cells": [
      3   {
      4    "cell_type": "markdown",
      5    "metadata": {},
      6    "source": [
      7     "https://www.kaggle.com/datasets/rabieelkharoua/students-performance-dataset/data\n",
      8     "\n",
      9     "MAE:\n",
     10     "\n",
     11     "0.10496861395429209\n",
     12     "\n",
     13     "3.5% MAPE"
     14    ]
     15   },
     16   {
     17    "cell_type": "code",
     18    "execution_count": 51,
     19    "metadata": {},
     20    "outputs": [
     21     {
     22      "data": {
     23       "text/plain": [
     24        "(1794, 12)"
     25       ]
     26      },
     27      "execution_count": 51,
     28      "metadata": {},
     29      "output_type": "execute_result"
     30     }
     31    ],
     32    "source": [
     33     "import pandas as pd\n",
     34     "from sklearn.model_selection import train_test_split\n",
     35     "from sklearn.preprocessing import StandardScaler\n",
     36     "\n",
     37     "df = pd.read_csv('../datasets/studentPerformance/StudentPerformance.csv')\n",
     38     "X = df.drop(columns=['GPA', 'GradeClass', 'StudentID'], axis=1)\n",
     39     "y = df['GradeClass']\n",
     40     "sclr = StandardScaler()\n",
     41     "X = sclr.fit_transform(X)\n",
     42     "X_train, X_test, y_train, y_test = train_test_split(X,y)\n",
     43     "X_val, X_test, y_val, y_test = train_test_split(X_train,y_train, test_size=.5)\n",
     44     "\n",
     45     "X_train.shape"
     46    ]
     47   },
     48   {
     49    "cell_type": "code",
     50    "execution_count": 52,
     51    "metadata": {},
     52    "outputs": [],
     53    "source": [
     54     "import keras\n",
     55     "import tensorflow as tf\n",
     56     "\n",
     57     "model = keras.Sequential(layers=[\n",
     58     "\n",
     59     "    keras.layers.Input(shape=(12,)),\n",
     60     "    keras.layers.Dense(256, activation='relu'),\n",
     61     "    keras.layers.Dropout(.1),\n",
     62     "    keras.layers.Dense(256, activation='relu'),\n",
     63     "    keras.layers.Dropout(.1),\n",
     64     "    keras.layers.Dense(256, activation='relu'),\n",
     65     "    keras.layers.Dropout(.1),\n",
     66     "    keras.layers.Dense(256, activation='relu'),\n",
     67     "    keras.layers.Dense(1)\n",
     68     "])"
     69    ]
     70   },
     71   {
     72    "cell_type": "code",
     73    "execution_count": 53,
     74    "metadata": {},
     75    "outputs": [
     76     {
     77      "name": "stdout",
     78      "output_type": "stream",
     79      "text": [
     80       "Epoch 1/100\n",
     81       "\u001b[1m57/57\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m2s\u001b[0m 5ms/step - loss: 2.9243 - mae: 1.3415 - val_loss: 0.7946 - val_mae: 0.6464\n",
     82       "Epoch 2/100\n",
     83       "\u001b[1m57/57\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 3ms/step - loss: 0.7969 - mae: 0.6824 - val_loss: 0.6778 - val_mae: 0.6281\n",
     84       "Epoch 3/100\n",
     85       "\u001b[1m57/57\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 3ms/step - loss: 0.6274 - mae: 0.5849 - val_loss: 0.6190 - val_mae: 0.6068\n",
     86       "Epoch 4/100\n",
     87       "\u001b[1m57/57\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 3ms/step - loss: 0.5872 - mae: 0.5563 - val_loss: 0.4950 - val_mae: 0.4443\n",
     88       "Epoch 5/100\n",
     89       "\u001b[1m57/57\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 3ms/step - loss: 0.5568 - mae: 0.5244 - val_loss: 0.4614 - val_mae: 0.4691\n",
     90       "Epoch 6/100\n",
     91       "\u001b[1m57/57\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 3ms/step - loss: 0.5457 - mae: 0.5076 - val_loss: 0.4437 - val_mae: 0.4255\n",
     92       "Epoch 7/100\n",
     93       "\u001b[1m57/57\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 3ms/step - loss: 0.5544 - mae: 0.5246 - val_loss: 0.4566 - val_mae: 0.4545\n",
     94       "Epoch 8/100\n",
     95       "\u001b[1m57/57\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 4ms/step - loss: 0.4496 - mae: 0.4792 - val_loss: 0.3990 - val_mae: 0.4142\n",
     96       "Epoch 9/100\n",
     97       "\u001b[1m57/57\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 3ms/step - loss: 0.4472 - mae: 0.4745 - val_loss: 0.3991 - val_mae: 0.4445\n",
     98       "Epoch 10/100\n",
     99       "\u001b[1m57/57\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 3ms/step - loss: 0.4941 - mae: 0.4969 - val_loss: 0.4244 - val_mae: 0.4763\n",
    100       "Epoch 11/100\n",
    101       "\u001b[1m57/57\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 3ms/step - loss: 0.4168 - mae: 0.4510 - val_loss: 0.4499 - val_mae: 0.4338\n",
    102       "Epoch 12/100\n",
    103       "\u001b[1m57/57\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 3ms/step - loss: 0.4840 - mae: 0.4939 - val_loss: 0.3797 - val_mae: 0.4034\n",
    104       "Epoch 13/100\n",
    105       "\u001b[1m57/57\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 3ms/step - loss: 0.4371 - mae: 0.4686 - val_loss: 0.3647 - val_mae: 0.3907\n",
    106       "Epoch 14/100\n",
    107       "\u001b[1m57/57\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 3ms/step - loss: 0.4781 - mae: 0.4995 - val_loss: 0.4937 - val_mae: 0.5747\n",
    108       "Epoch 15/100\n",
    109       "\u001b[1m57/57\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 3ms/step - loss: 0.4719 - mae: 0.4944 - val_loss: 0.3294 - val_mae: 0.3549\n",
    110       "Epoch 16/100\n",
    111       "\u001b[1m57/57\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 3ms/step - loss: 0.3997 - mae: 0.4483 - val_loss: 0.3152 - val_mae: 0.3549\n",
    112       "Epoch 17/100\n",
    113       "\u001b[1m57/57\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 3ms/step - loss: 0.4213 - mae: 0.4487 - val_loss: 0.3297 - val_mae: 0.4052\n",
    114       "Epoch 18/100\n",
    115       "\u001b[1m57/57\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 3ms/step - loss: 0.3893 - mae: 0.4380 - val_loss: 0.3285 - val_mae: 0.4176\n",
    116       "Epoch 19/100\n",
    117       "\u001b[1m57/57\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 3ms/step - loss: 0.3952 - mae: 0.4418 - val_loss: 0.3014 - val_mae: 0.3542\n",
    118       "Epoch 20/100\n",
    119       "\u001b[1m57/57\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 3ms/step - loss: 0.3588 - mae: 0.4229 - val_loss: 0.3074 - val_mae: 0.3983\n",
    120       "Epoch 21/100\n",
    121       "\u001b[1m57/57\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 4ms/step - loss: 0.3325 - mae: 0.4002 - val_loss: 0.2826 - val_mae: 0.3712\n",
    122       "Epoch 22/100\n",
    123       "\u001b[1m57/57\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 3ms/step - loss: 0.3545 - mae: 0.4104 - val_loss: 0.2708 - val_mae: 0.3508\n",
    124       "Epoch 23/100\n",
    125       "\u001b[1m57/57\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 3ms/step - loss: 0.3169 - mae: 0.3996 - val_loss: 0.2538 - val_mae: 0.3331\n",
    126       "Epoch 24/100\n",
    127       "\u001b[1m57/57\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 3ms/step - loss: 0.3375 - mae: 0.4106 - val_loss: 0.3023 - val_mae: 0.4265\n",
    128       "Epoch 25/100\n",
    129       "\u001b[1m57/57\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 5ms/step - loss: 0.2909 - mae: 0.3760 - val_loss: 0.2453 - val_mae: 0.3518\n",
    130       "Epoch 26/100\n",
    131       "\u001b[1m57/57\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 4ms/step - loss: 0.3147 - mae: 0.3939 - val_loss: 0.2206 - val_mae: 0.3004\n",
    132       "Epoch 27/100\n",
    133       "\u001b[1m57/57\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 3ms/step - loss: 0.2455 - mae: 0.3495 - val_loss: 0.4073 - val_mae: 0.5486\n",
    134       "Epoch 28/100\n",
    135       "\u001b[1m57/57\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 3ms/step - loss: 0.3003 - mae: 0.4157 - val_loss: 0.2155 - val_mae: 0.3147\n",
    136       "Epoch 29/100\n",
    137       "\u001b[1m57/57\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 3ms/step - loss: 0.2819 - mae: 0.3813 - val_loss: 0.2175 - val_mae: 0.3168\n",
    138       "Epoch 30/100\n",
    139       "\u001b[1m57/57\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 3ms/step - loss: 0.2887 - mae: 0.3885 - val_loss: 0.2135 - val_mae: 0.3201\n",
    140       "Epoch 31/100\n",
    141       "\u001b[1m57/57\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 3ms/step - loss: 0.2825 - mae: 0.3714 - val_loss: 0.1951 - val_mae: 0.2933\n",
    142       "Epoch 32/100\n",
    143       "\u001b[1m57/57\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 3ms/step - loss: 0.2718 - mae: 0.3738 - val_loss: 0.2076 - val_mae: 0.3302\n",
    144       "Epoch 33/100\n",
    145       "\u001b[1m57/57\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 3ms/step - loss: 0.2659 - mae: 0.3757 - val_loss: 0.1839 - val_mae: 0.3012\n",
    146       "Epoch 34/100\n",
    147       "\u001b[1m57/57\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 3ms/step - loss: 0.2200 - mae: 0.3312 - val_loss: 0.1660 - val_mae: 0.2752\n",
    148       "Epoch 35/100\n",
    149       "\u001b[1m57/57\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 3ms/step - loss: 0.2170 - mae: 0.3346 - val_loss: 0.1693 - val_mae: 0.2718\n",
    150       "Epoch 36/100\n",
    151       "\u001b[1m57/57\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 3ms/step - loss: 0.2241 - mae: 0.3506 - val_loss: 0.1500 - val_mae: 0.2731\n",
    152       "Epoch 37/100\n",
    153       "\u001b[1m57/57\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 3ms/step - loss: 0.1994 - mae: 0.3174 - val_loss: 0.1448 - val_mae: 0.2549\n",
    154       "Epoch 38/100\n",
    155       "\u001b[1m57/57\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 3ms/step - loss: 0.2183 - mae: 0.3237 - val_loss: 0.1595 - val_mae: 0.2743\n",
    156       "Epoch 39/100\n",
    157       "\u001b[1m57/57\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 3ms/step - loss: 0.2041 - mae: 0.3234 - val_loss: 0.1782 - val_mae: 0.3303\n",
    158       "Epoch 40/100\n",
    159       "\u001b[1m57/57\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 3ms/step - loss: 0.2374 - mae: 0.3542 - val_loss: 0.1570 - val_mae: 0.2853\n",
    160       "Epoch 41/100\n",
    161       "\u001b[1m57/57\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 3ms/step - loss: 0.1880 - mae: 0.3193 - val_loss: 0.1136 - val_mae: 0.2300\n",
    162       "Epoch 42/100\n",
    163       "\u001b[1m57/57\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 3ms/step - loss: 0.1670 - mae: 0.2956 - val_loss: 0.1222 - val_mae: 0.2595\n",
    164       "Epoch 43/100\n",
    165       "\u001b[1m57/57\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 3ms/step - loss: 0.2178 - mae: 0.3238 - val_loss: 0.1602 - val_mae: 0.2842\n",
    166       "Epoch 44/100\n",
    167       "\u001b[1m57/57\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 3ms/step - loss: 0.1981 - mae: 0.3220 - val_loss: 0.1752 - val_mae: 0.3231\n",
    168       "Epoch 45/100\n",
    169       "\u001b[1m57/57\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 3ms/step - loss: 0.2190 - mae: 0.3447 - val_loss: 0.1033 - val_mae: 0.2224\n",
    170       "Epoch 46/100\n",
    171       "\u001b[1m57/57\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 3ms/step - loss: 0.1589 - mae: 0.2896 - val_loss: 0.0976 - val_mae: 0.2108\n",
    172       "Epoch 47/100\n",
    173       "\u001b[1m57/57\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 3ms/step - loss: 0.1519 - mae: 0.2855 - val_loss: 0.0830 - val_mae: 0.1973\n",
    174       "Epoch 48/100\n",
    175       "\u001b[1m57/57\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 3ms/step - loss: 0.1612 - mae: 0.2926 - val_loss: 0.1134 - val_mae: 0.2580\n",
    176       "Epoch 49/100\n",
    177       "\u001b[1m57/57\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 3ms/step - loss: 0.1532 - mae: 0.2821 - val_loss: 0.0859 - val_mae: 0.2061\n",
    178       "Epoch 50/100\n",
    179       "\u001b[1m57/57\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 3ms/step - loss: 0.1620 - mae: 0.2898 - val_loss: 0.1085 - val_mae: 0.2440\n",
    180       "Epoch 51/100\n",
    181       "\u001b[1m57/57\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 3ms/step - loss: 0.1482 - mae: 0.2890 - val_loss: 0.0829 - val_mae: 0.2060\n",
    182       "Epoch 52/100\n",
    183       "\u001b[1m57/57\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 3ms/step - loss: 0.1384 - mae: 0.2624 - val_loss: 0.0862 - val_mae: 0.2048\n",
    184       "Epoch 53/100\n",
    185       "\u001b[1m57/57\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 4ms/step - loss: 0.1698 - mae: 0.2971 - val_loss: 0.1102 - val_mae: 0.2372\n",
    186       "Epoch 54/100\n",
    187       "\u001b[1m57/57\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 3ms/step - loss: 0.1452 - mae: 0.2742 - val_loss: 0.0799 - val_mae: 0.2044\n",
    188       "Epoch 55/100\n",
    189       "\u001b[1m57/57\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 3ms/step - loss: 0.1291 - mae: 0.2642 - val_loss: 0.0784 - val_mae: 0.2106\n",
    190       "Epoch 56/100\n",
    191       "\u001b[1m57/57\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 3ms/step - loss: 0.1115 - mae: 0.2429 - val_loss: 0.0709 - val_mae: 0.1973\n",
    192       "Epoch 57/100\n",
    193       "\u001b[1m57/57\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 3ms/step - loss: 0.1301 - mae: 0.2654 - val_loss: 0.0734 - val_mae: 0.2040\n",
    194       "Epoch 58/100\n",
    195       "\u001b[1m57/57\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 3ms/step - loss: 0.1104 - mae: 0.2438 - val_loss: 0.0709 - val_mae: 0.2018\n",
    196       "Epoch 59/100\n",
    197       "\u001b[1m57/57\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 3ms/step - loss: 0.1043 - mae: 0.2390 - val_loss: 0.1021 - val_mae: 0.2712\n",
    198       "Epoch 60/100\n",
    199       "\u001b[1m57/57\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 3ms/step - loss: 0.1094 - mae: 0.2521 - val_loss: 0.0577 - val_mae: 0.1695\n",
    200       "Epoch 61/100\n",
    201       "\u001b[1m57/57\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 3ms/step - loss: 0.1382 - mae: 0.2671 - val_loss: 0.0514 - val_mae: 0.1597\n",
    202       "Epoch 62/100\n",
    203       "\u001b[1m57/57\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 3ms/step - loss: 0.1001 - mae: 0.2352 - val_loss: 0.0511 - val_mae: 0.1575\n",
    204       "Epoch 63/100\n",
    205       "\u001b[1m57/57\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 3ms/step - loss: 0.1007 - mae: 0.2296 - val_loss: 0.0517 - val_mae: 0.1556\n",
    206       "Epoch 64/100\n",
    207       "\u001b[1m57/57\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 3ms/step - loss: 0.1007 - mae: 0.2289 - val_loss: 0.0489 - val_mae: 0.1612\n",
    208       "Epoch 65/100\n",
    209       "\u001b[1m57/57\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 3ms/step - loss: 0.0935 - mae: 0.2201 - val_loss: 0.0707 - val_mae: 0.1960\n",
    210       "Epoch 66/100\n",
    211       "\u001b[1m57/57\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 3ms/step - loss: 0.1339 - mae: 0.2470 - val_loss: 0.0883 - val_mae: 0.2245\n",
    212       "Epoch 67/100\n",
    213       "\u001b[1m57/57\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 3ms/step - loss: 0.1343 - mae: 0.2542 - val_loss: 0.0594 - val_mae: 0.1778\n",
    214       "Epoch 68/100\n",
    215       "\u001b[1m57/57\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 5ms/step - loss: 0.1072 - mae: 0.2423 - val_loss: 0.0512 - val_mae: 0.1513\n",
    216       "Epoch 69/100\n",
    217       "\u001b[1m57/57\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 4ms/step - loss: 0.1180 - mae: 0.2368 - val_loss: 0.0663 - val_mae: 0.1832\n",
    218       "Epoch 70/100\n",
    219       "\u001b[1m57/57\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 3ms/step - loss: 0.0984 - mae: 0.2299 - val_loss: 0.0417 - val_mae: 0.1391\n",
    220       "Epoch 71/100\n",
    221       "\u001b[1m57/57\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 3ms/step - loss: 0.0837 - mae: 0.2177 - val_loss: 0.0346 - val_mae: 0.1242\n",
    222       "Epoch 72/100\n",
    223       "\u001b[1m57/57\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 3ms/step - loss: 0.0960 - mae: 0.2116 - val_loss: 0.0540 - val_mae: 0.1525\n",
    224       "Epoch 73/100\n",
    225       "\u001b[1m57/57\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 3ms/step - loss: 0.0995 - mae: 0.2215 - val_loss: 0.0543 - val_mae: 0.1666\n",
    226       "Epoch 74/100\n",
    227       "\u001b[1m57/57\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 3ms/step - loss: 0.1190 - mae: 0.2285 - val_loss: 0.0403 - val_mae: 0.1366\n",
    228       "Epoch 75/100\n",
    229       "\u001b[1m57/57\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 3ms/step - loss: 0.0802 - mae: 0.2053 - val_loss: 0.0432 - val_mae: 0.1350\n",
    230       "Epoch 76/100\n",
    231       "\u001b[1m57/57\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 3ms/step - loss: 0.0952 - mae: 0.2193 - val_loss: 0.0439 - val_mae: 0.1392\n",
    232       "Epoch 77/100\n",
    233       "\u001b[1m57/57\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 3ms/step - loss: 0.1020 - mae: 0.2256 - val_loss: 0.0387 - val_mae: 0.1320\n",
    234       "Epoch 78/100\n",
    235       "\u001b[1m57/57\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 3ms/step - loss: 0.0946 - mae: 0.2127 - val_loss: 0.0648 - val_mae: 0.2079\n",
    236       "Epoch 79/100\n",
    237       "\u001b[1m57/57\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 3ms/step - loss: 0.0882 - mae: 0.2201 - val_loss: 0.0460 - val_mae: 0.1463\n",
    238       "Epoch 80/100\n",
    239       "\u001b[1m57/57\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 3ms/step - loss: 0.1007 - mae: 0.2220 - val_loss: 0.0440 - val_mae: 0.1515\n",
    240       "Epoch 81/100\n",
    241       "\u001b[1m57/57\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 3ms/step - loss: 0.1145 - mae: 0.2329 - val_loss: 0.0507 - val_mae: 0.1608\n",
    242       "Epoch 82/100\n",
    243       "\u001b[1m57/57\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 3ms/step - loss: 0.0999 - mae: 0.2143 - val_loss: 0.0429 - val_mae: 0.1396\n",
    244       "Epoch 83/100\n",
    245       "\u001b[1m57/57\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 3ms/step - loss: 0.0860 - mae: 0.2129 - val_loss: 0.0424 - val_mae: 0.1305\n",
    246       "Epoch 84/100\n",
    247       "\u001b[1m57/57\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 3ms/step - loss: 0.0933 - mae: 0.2084 - val_loss: 0.0455 - val_mae: 0.1348\n",
    248       "Epoch 85/100\n",
    249       "\u001b[1m57/57\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 3ms/step - loss: 0.0860 - mae: 0.2102 - val_loss: 0.0403 - val_mae: 0.1489\n",
    250       "Epoch 86/100\n",
    251       "\u001b[1m57/57\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 3ms/step - loss: 0.0746 - mae: 0.1942 - val_loss: 0.0390 - val_mae: 0.1293\n",
    252       "Epoch 87/100\n",
    253       "\u001b[1m57/57\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 3ms/step - loss: 0.0756 - mae: 0.1961 - val_loss: 0.0345 - val_mae: 0.1207\n",
    254       "Epoch 88/100\n",
    255       "\u001b[1m57/57\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 3ms/step - loss: 0.0724 - mae: 0.1843 - val_loss: 0.0352 - val_mae: 0.1299\n",
    256       "Epoch 89/100\n",
    257       "\u001b[1m57/57\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 3ms/step - loss: 0.0866 - mae: 0.1971 - val_loss: 0.0398 - val_mae: 0.1482\n",
    258       "Epoch 90/100\n",
    259       "\u001b[1m57/57\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 3ms/step - loss: 0.0777 - mae: 0.1965 - val_loss: 0.0336 - val_mae: 0.1218\n",
    260       "Epoch 91/100\n",
    261       "\u001b[1m57/57\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 4ms/step - loss: 0.0859 - mae: 0.2065 - val_loss: 0.0318 - val_mae: 0.1220\n",
    262       "Epoch 92/100\n",
    263       "\u001b[1m57/57\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 4ms/step - loss: 0.0538 - mae: 0.1644 - val_loss: 0.0318 - val_mae: 0.1289\n",
    264       "Epoch 93/100\n",
    265       "\u001b[1m57/57\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 3ms/step - loss: 0.0655 - mae: 0.1806 - val_loss: 0.0357 - val_mae: 0.1242\n",
    266       "Epoch 94/100\n",
    267       "\u001b[1m57/57\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 3ms/step - loss: 0.0698 - mae: 0.1770 - val_loss: 0.0311 - val_mae: 0.1224\n",
    268       "Epoch 95/100\n",
    269       "\u001b[1m57/57\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 3ms/step - loss: 0.0716 - mae: 0.1887 - val_loss: 0.0315 - val_mae: 0.1187\n",
    270       "Epoch 96/100\n",
    271       "\u001b[1m57/57\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 3ms/step - loss: 0.0782 - mae: 0.1907 - val_loss: 0.0349 - val_mae: 0.1142\n",
    272       "Epoch 97/100\n",
    273       "\u001b[1m57/57\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 3ms/step - loss: 0.0609 - mae: 0.1673 - val_loss: 0.0417 - val_mae: 0.1586\n",
    274       "Epoch 98/100\n",
    275       "\u001b[1m57/57\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 4ms/step - loss: 0.0655 - mae: 0.1834 - val_loss: 0.0480 - val_mae: 0.1177\n",
    276       "Epoch 99/100\n",
    277       "\u001b[1m57/57\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 3ms/step - loss: 0.0569 - mae: 0.1673 - val_loss: 0.0425 - val_mae: 0.1254\n",
    278       "Epoch 100/100\n",
    279       "\u001b[1m57/57\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 3ms/step - loss: 0.0719 - mae: 0.1797 - val_loss: 0.0276 - val_mae: 0.1050\n"
    280      ]
    281     },
    282     {
    283      "data": {
    284       "text/plain": [
    285        "<keras.src.callbacks.history.History at 0x7efb79f8c990>"
    286       ]
    287      },
    288      "execution_count": 53,
    289      "metadata": {},
    290      "output_type": "execute_result"
    291     }
    292    ],
    293    "source": [
    294     "model.compile(optimizer='adam', loss='mse', metrics=['mae'])\n",
    295     "model.fit(X_train,y_train, validation_data=[X_test,y_test], epochs=100, batch_size=32)"
    296    ]
    297   },
    298   {
    299    "cell_type": "code",
    300    "execution_count": 83,
    301    "metadata": {},
    302    "outputs": [
    303     {
    304      "name": "stdout",
    305      "output_type": "stream",
    306      "text": [
    307       "\u001b[1m29/29\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 1ms/step \n"
    308      ]
    309     },
    310     {
    311      "data": {
    312       "text/plain": [
    313        "3.4900187146428183"
    314       ]
    315      },
    316      "execution_count": 83,
    317      "metadata": {},
    318      "output_type": "execute_result"
    319     }
    320    ],
    321    "source": [
    322     "from sklearn.metrics import mean_absolute_error\n",
    323     "\n",
    324     "y_pred = model.predict(X_val)\n",
    325     "mean_absolute_error(y_pred=y_pred, y_true=y_val) / y_val.mean() * 100"
    326    ]
    327   },
    328   {
    329    "cell_type": "code",
    330    "execution_count": 76,
    331    "metadata": {},
    332    "outputs": [
    333     {
    334      "name": "stdout",
    335      "output_type": "stream",
    336      "text": [
    337       "\u001b[1m29/29\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 1ms/step \n"
    338      ]
    339     },
    340     {
    341      "data": {
    342       "text/plain": [
    343        "0.1043893000154591"
    344       ]
    345      },
    346      "execution_count": 76,
    347      "metadata": {},
    348      "output_type": "execute_result"
    349     }
    350    ],
    351    "source": [
    352     "y_pred = model.predict(X_val)\n",
    353     "mean_absolute_error(y_pred=y_pred, y_true=y_val)"
    354    ]
    355   },
    356   {
    357    "cell_type": "markdown",
    358    "metadata": {},
    359    "source": [
    360     "This kills the others models.\n",
    361     "\n",
    362     "This only had an average error of 3.5%"
    363    ]
    364   }
    365  ],
    366  "metadata": {
    367   "kernelspec": {
    368    "display_name": ".venv",
    369    "language": "python",
    370    "name": "python3"
    371   },
    372   "language_info": {
    373    "codemirror_mode": {
    374     "name": "ipython",
    375     "version": 3
    376    },
    377    "file_extension": ".py",
    378    "mimetype": "text/x-python",
    379    "name": "python",
    380    "nbconvert_exporter": "python",
    381    "pygments_lexer": "ipython3",
    382    "version": "3.11.2"
    383   }
    384  },
    385  "nbformat": 4,
    386  "nbformat_minor": 2
    387 }