machinelearning

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

MLPHousingKeras.ipynb (62611B)


      1 {
      2  "cells": [
      3   {
      4    "cell_type": "code",
      5    "execution_count": 1,
      6    "metadata": {},
      7    "outputs": [],
      8    "source": [
      9     "from sklearn.datasets import fetch_california_housing\n",
     10     "from sklearn.model_selection import train_test_split\n",
     11     "\n",
     12     "housing = fetch_california_housing()\n",
     13     "\n",
     14     "# Split train, validation, and test (in that order).\n",
     15     "X_train_full, X_test, y_train_full, y_test = train_test_split(housing.data,housing.target,random_state=10)\n",
     16     "X_train, X_valid, y_train, y_valid = train_test_split(X_train_full, y_train_full, random_state=10)"
     17    ]
     18   },
     19   {
     20    "cell_type": "code",
     21    "execution_count": 2,
     22    "metadata": {},
     23    "outputs": [
     24     {
     25      "name": "stderr",
     26      "output_type": "stream",
     27      "text": [
     28       "2024-06-11 07:03:53.306268: I external/local_tsl/tsl/cuda/cudart_stub.cc:32] Could not find cuda drivers on your machine, GPU will not be used.\n",
     29       "2024-06-11 07:03:53.309533: I external/local_tsl/tsl/cuda/cudart_stub.cc:32] Could not find cuda drivers on your machine, GPU will not be used.\n",
     30       "2024-06-11 07:03:53.351612: I tensorflow/core/platform/cpu_feature_guard.cc:210] This TensorFlow binary is optimized to use available CPU instructions in performance-critical operations.\n",
     31       "To enable the following instructions: AVX2 FMA, in other operations, rebuild TensorFlow with the appropriate compiler flags.\n",
     32       "2024-06-11 07:03:54.094326: W tensorflow/compiler/tf2tensorrt/utils/py_utils.cc:38] TF-TRT Warning: Could not find TensorRT\n",
     33       "/home/andrew/gitRepos/myvenv/lib/python3.11/site-packages/keras/src/layers/preprocessing/normalization.py:99: UserWarning: Do not pass an `input_shape`/`input_dim` argument to a layer. When using Sequential models, prefer using an `Input(shape)` object as the first layer in the model instead.\n",
     34       "  super().__init__(**kwargs)\n",
     35       "2024-06-11 07:03:54.745587: I external/local_xla/xla/stream_executor/cuda/cuda_executor.cc:998] successful NUMA node read from SysFS had negative value (-1), but there must be at least one NUMA node, so returning NUMA node zero. See more at https://github.com/torvalds/linux/blob/v6.0/Documentation/ABI/testing/sysfs-bus-pci#L344-L355\n",
     36       "2024-06-11 07:03:54.746044: W tensorflow/core/common_runtime/gpu/gpu_device.cc:2251] Cannot dlopen some GPU libraries. Please make sure the missing libraries mentioned above are installed properly if you would like to use GPU. Follow the guide at https://www.tensorflow.org/install/gpu for how to download and setup the required libraries for your platform.\n",
     37       "Skipping registering GPU devices...\n"
     38      ]
     39     }
     40    ],
     41    "source": [
     42     "import tensorflow as tf\n",
     43     "norm_layer = tf.keras.layers.Normalization(input_shape=X_train.shape[1:])\n",
     44     "tf.random.set_seed(10)\n",
     45     "model = tf.keras.Sequential([\n",
     46     "    norm_layer,\n",
     47     "    tf.keras.layers.Dense(50, activation='relu'),\n",
     48     "    tf.keras.layers.Dense(50, activation='relu'),\n",
     49     "    tf.keras.layers.Dense(50, activation='relu'),\n",
     50     "    tf.keras.layers.Dense(1)\n",
     51     "])"
     52    ]
     53   },
     54   {
     55    "cell_type": "code",
     56    "execution_count": 3,
     57    "metadata": {},
     58    "outputs": [
     59     {
     60      "data": {
     61       "text/html": [
     62        "<pre style=\"white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace\"><span style=\"font-weight: bold\">Model: \"sequential\"</span>\n",
     63        "</pre>\n"
     64       ],
     65       "text/plain": [
     66        "\u001b[1mModel: \"sequential\"\u001b[0m\n"
     67       ]
     68      },
     69      "metadata": {},
     70      "output_type": "display_data"
     71     },
     72     {
     73      "data": {
     74       "text/html": [
     75        "<pre style=\"white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace\">┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━┓\n",
     76        "┃<span style=\"font-weight: bold\"> Layer (type)                    </span>┃<span style=\"font-weight: bold\"> Output Shape           </span>┃<span style=\"font-weight: bold\">       Param # </span>┃\n",
     77        "┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━┩\n",
     78        "│ normalization (<span style=\"color: #0087ff; text-decoration-color: #0087ff\">Normalization</span>)   │ (<span style=\"color: #00d7ff; text-decoration-color: #00d7ff\">None</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">8</span>)              │            <span style=\"color: #00af00; text-decoration-color: #00af00\">17</span> │\n",
     79        "├─────────────────────────────────┼────────────────────────┼───────────────┤\n",
     80        "│ dense (<span style=\"color: #0087ff; text-decoration-color: #0087ff\">Dense</span>)                   │ (<span style=\"color: #00d7ff; text-decoration-color: #00d7ff\">None</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">50</span>)             │           <span style=\"color: #00af00; text-decoration-color: #00af00\">450</span> │\n",
     81        "├─────────────────────────────────┼────────────────────────┼───────────────┤\n",
     82        "│ dense_1 (<span style=\"color: #0087ff; text-decoration-color: #0087ff\">Dense</span>)                 │ (<span style=\"color: #00d7ff; text-decoration-color: #00d7ff\">None</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">50</span>)             │         <span style=\"color: #00af00; text-decoration-color: #00af00\">2,550</span> │\n",
     83        "├─────────────────────────────────┼────────────────────────┼───────────────┤\n",
     84        "│ dense_2 (<span style=\"color: #0087ff; text-decoration-color: #0087ff\">Dense</span>)                 │ (<span style=\"color: #00d7ff; text-decoration-color: #00d7ff\">None</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">50</span>)             │         <span style=\"color: #00af00; text-decoration-color: #00af00\">2,550</span> │\n",
     85        "├─────────────────────────────────┼────────────────────────┼───────────────┤\n",
     86        "│ dense_3 (<span style=\"color: #0087ff; text-decoration-color: #0087ff\">Dense</span>)                 │ (<span style=\"color: #00d7ff; text-decoration-color: #00d7ff\">None</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">1</span>)              │            <span style=\"color: #00af00; text-decoration-color: #00af00\">51</span> │\n",
     87        "└─────────────────────────────────┴────────────────────────┴───────────────┘\n",
     88        "</pre>\n"
     89       ],
     90       "text/plain": [
     91        "┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━┓\n",
     92        "┃\u001b[1m \u001b[0m\u001b[1mLayer (type)                   \u001b[0m\u001b[1m \u001b[0m┃\u001b[1m \u001b[0m\u001b[1mOutput Shape          \u001b[0m\u001b[1m \u001b[0m┃\u001b[1m \u001b[0m\u001b[1m      Param #\u001b[0m\u001b[1m \u001b[0m┃\n",
     93        "┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━┩\n",
     94        "│ normalization (\u001b[38;5;33mNormalization\u001b[0m)   │ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m8\u001b[0m)              │            \u001b[38;5;34m17\u001b[0m │\n",
     95        "├─────────────────────────────────┼────────────────────────┼───────────────┤\n",
     96        "│ dense (\u001b[38;5;33mDense\u001b[0m)                   │ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m50\u001b[0m)             │           \u001b[38;5;34m450\u001b[0m │\n",
     97        "├─────────────────────────────────┼────────────────────────┼───────────────┤\n",
     98        "│ dense_1 (\u001b[38;5;33mDense\u001b[0m)                 │ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m50\u001b[0m)             │         \u001b[38;5;34m2,550\u001b[0m │\n",
     99        "├─────────────────────────────────┼────────────────────────┼───────────────┤\n",
    100        "│ dense_2 (\u001b[38;5;33mDense\u001b[0m)                 │ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m50\u001b[0m)             │         \u001b[38;5;34m2,550\u001b[0m │\n",
    101        "├─────────────────────────────────┼────────────────────────┼───────────────┤\n",
    102        "│ dense_3 (\u001b[38;5;33mDense\u001b[0m)                 │ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m1\u001b[0m)              │            \u001b[38;5;34m51\u001b[0m │\n",
    103        "└─────────────────────────────────┴────────────────────────┴───────────────┘\n"
    104       ]
    105      },
    106      "metadata": {},
    107      "output_type": "display_data"
    108     },
    109     {
    110      "data": {
    111       "text/html": [
    112        "<pre style=\"white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace\"><span style=\"font-weight: bold\"> Total params: </span><span style=\"color: #00af00; text-decoration-color: #00af00\">5,618</span> (21.95 KB)\n",
    113        "</pre>\n"
    114       ],
    115       "text/plain": [
    116        "\u001b[1m Total params: \u001b[0m\u001b[38;5;34m5,618\u001b[0m (21.95 KB)\n"
    117       ]
    118      },
    119      "metadata": {},
    120      "output_type": "display_data"
    121     },
    122     {
    123      "data": {
    124       "text/html": [
    125        "<pre style=\"white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace\"><span style=\"font-weight: bold\"> Trainable params: </span><span style=\"color: #00af00; text-decoration-color: #00af00\">5,601</span> (21.88 KB)\n",
    126        "</pre>\n"
    127       ],
    128       "text/plain": [
    129        "\u001b[1m Trainable params: \u001b[0m\u001b[38;5;34m5,601\u001b[0m (21.88 KB)\n"
    130       ]
    131      },
    132      "metadata": {},
    133      "output_type": "display_data"
    134     },
    135     {
    136      "data": {
    137       "text/html": [
    138        "<pre style=\"white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace\"><span style=\"font-weight: bold\"> Non-trainable params: </span><span style=\"color: #00af00; text-decoration-color: #00af00\">17</span> (72.00 B)\n",
    139        "</pre>\n"
    140       ],
    141       "text/plain": [
    142        "\u001b[1m Non-trainable params: \u001b[0m\u001b[38;5;34m17\u001b[0m (72.00 B)\n"
    143       ]
    144      },
    145      "metadata": {},
    146      "output_type": "display_data"
    147     }
    148    ],
    149    "source": [
    150     "model.summary()"
    151    ]
    152   },
    153   {
    154    "cell_type": "code",
    155    "execution_count": 4,
    156    "metadata": {},
    157    "outputs": [],
    158    "source": [
    159     "optimizer = tf.keras.optimizers.Adam(learning_rate=1e-3)\n",
    160     "model.compile(loss='mse', optimizer=optimizer, metrics=['RootMeanSquaredError'])\n",
    161     "norm_layer.adapt(X_train)"
    162    ]
    163   },
    164   {
    165    "cell_type": "code",
    166    "execution_count": 5,
    167    "metadata": {},
    168    "outputs": [
    169     {
    170      "name": "stdout",
    171      "output_type": "stream",
    172      "text": [
    173       "Epoch 1/20\n",
    174       "\u001b[1m363/363\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 2ms/step - RootMeanSquaredError: 1.2797 - loss: 1.7474 - val_RootMeanSquaredError: 0.6666 - val_loss: 0.4444\n",
    175       "Epoch 2/20\n",
    176       "\u001b[1m363/363\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 988us/step - RootMeanSquaredError: 0.6317 - loss: 0.3996 - val_RootMeanSquaredError: 0.6262 - val_loss: 0.3921\n",
    177       "Epoch 3/20\n",
    178       "\u001b[1m363/363\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 932us/step - RootMeanSquaredError: 0.6012 - loss: 0.3618 - val_RootMeanSquaredError: 0.6135 - val_loss: 0.3764\n",
    179       "Epoch 4/20\n",
    180       "\u001b[1m363/363\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 981us/step - RootMeanSquaredError: 0.5898 - loss: 0.3483 - val_RootMeanSquaredError: 0.6002 - val_loss: 0.3602\n",
    181       "Epoch 5/20\n",
    182       "\u001b[1m363/363\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 1ms/step - RootMeanSquaredError: 0.5737 - loss: 0.3295 - val_RootMeanSquaredError: 0.5929 - val_loss: 0.3516\n",
    183       "Epoch 6/20\n",
    184       "\u001b[1m363/363\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 944us/step - RootMeanSquaredError: 0.5647 - loss: 0.3192 - val_RootMeanSquaredError: 0.5876 - val_loss: 0.3453\n",
    185       "Epoch 7/20\n",
    186       "\u001b[1m363/363\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 969us/step - RootMeanSquaredError: 0.5633 - loss: 0.3178 - val_RootMeanSquaredError: 0.5853 - val_loss: 0.3425\n",
    187       "Epoch 8/20\n",
    188       "\u001b[1m363/363\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 1ms/step - RootMeanSquaredError: 0.5551 - loss: 0.3085 - val_RootMeanSquaredError: 0.5816 - val_loss: 0.3383\n",
    189       "Epoch 9/20\n",
    190       "\u001b[1m363/363\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 922us/step - RootMeanSquaredError: 0.5500 - loss: 0.3028 - val_RootMeanSquaredError: 0.5773 - val_loss: 0.3332\n",
    191       "Epoch 10/20\n",
    192       "\u001b[1m363/363\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 1ms/step - RootMeanSquaredError: 0.5433 - loss: 0.2954 - val_RootMeanSquaredError: 0.5755 - val_loss: 0.3312\n",
    193       "Epoch 11/20\n",
    194       "\u001b[1m363/363\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 1ms/step - RootMeanSquaredError: 0.5386 - loss: 0.2904 - val_RootMeanSquaredError: 0.5712 - val_loss: 0.3263\n",
    195       "Epoch 12/20\n",
    196       "\u001b[1m363/363\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 1ms/step - RootMeanSquaredError: 0.5350 - loss: 0.2864 - val_RootMeanSquaredError: 0.5696 - val_loss: 0.3244\n",
    197       "Epoch 13/20\n",
    198       "\u001b[1m363/363\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 950us/step - RootMeanSquaredError: 0.5329 - loss: 0.2842 - val_RootMeanSquaredError: 0.5701 - val_loss: 0.3250\n",
    199       "Epoch 14/20\n",
    200       "\u001b[1m363/363\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 926us/step - RootMeanSquaredError: 0.5335 - loss: 0.2849 - val_RootMeanSquaredError: 0.5706 - val_loss: 0.3256\n",
    201       "Epoch 15/20\n",
    202       "\u001b[1m363/363\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 1ms/step - RootMeanSquaredError: 0.5288 - loss: 0.2798 - val_RootMeanSquaredError: 0.5681 - val_loss: 0.3227\n",
    203       "Epoch 16/20\n",
    204       "\u001b[1m363/363\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 952us/step - RootMeanSquaredError: 0.5263 - loss: 0.2772 - val_RootMeanSquaredError: 0.5674 - val_loss: 0.3220\n",
    205       "Epoch 17/20\n",
    206       "\u001b[1m363/363\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 1ms/step - RootMeanSquaredError: 0.5243 - loss: 0.2751 - val_RootMeanSquaredError: 0.5638 - val_loss: 0.3179\n",
    207       "Epoch 18/20\n",
    208       "\u001b[1m363/363\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 2ms/step - RootMeanSquaredError: 0.5240 - loss: 0.2748 - val_RootMeanSquaredError: 0.5647 - val_loss: 0.3189\n",
    209       "Epoch 19/20\n",
    210       "\u001b[1m363/363\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 1ms/step - RootMeanSquaredError: 0.5233 - loss: 0.2741 - val_RootMeanSquaredError: 0.5676 - val_loss: 0.3221\n",
    211       "Epoch 20/20\n",
    212       "\u001b[1m363/363\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 960us/step - RootMeanSquaredError: 0.5226 - loss: 0.2733 - val_RootMeanSquaredError: 0.5658 - val_loss: 0.3202\n"
    213      ]
    214     }
    215    ],
    216    "source": [
    217     "history = model.fit(X_train, y_train, epochs=20,\n",
    218     "            validation_data=(X_valid,y_valid))"
    219    ]
    220   },
    221   {
    222    "cell_type": "code",
    223    "execution_count": 6,
    224    "metadata": {},
    225    "outputs": [
    226     {
    227      "data": {
    228       "text/plain": [
    229        "<Axes: >"
    230       ]
    231      },
    232      "execution_count": 6,
    233      "metadata": {},
    234      "output_type": "execute_result"
    235     },
    236     {
    237      "data": {
    238       "image/png": "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QGF3/bdRaaWfhdogza+jCal8rfb8nOTXBs+63jLP+vJrz37UhsrQIE8geM4zB885oKTKa/N56cowZ0XdMx4rNZ6ZjauElaEza58PqBkxjBARUfAp1YA+PNi1aN3qM4Ggw+o707H5grBiPi9dYeWyewYzn67cts/1DCNERETUSGqddAftyK41r+NyVAksVUJKbds0M4YRIiKijkSp9ly23TnYNZG1ntErRERE1CExjBAREVFQMYwQERFRUDGMEBERUVAxjBAREVFQMYwQERFRUDGMEBERUVAxjBAREVFQMYwQERFRUDGMEBERUVAxjBAREVFQMYwQERFRUDGMEBERUVC1ibv2iqIIADCbzUGuCREREdWX93vb+z1ekzYRRkpLSwEAycnJQa4JERERBaq0tBRhYWE1LhfEuuJKK+B2u3H+/HmEhoZCEIQm26/ZbEZycjLOnDkDk8nUZPttrTrS+fJc26+OdL481/aro5yvKIooLS1FYmIiFIqaR4a0iZYRhUKBTp06Ndv+TSZTu/5luFBHOl+ea/vVkc6X59p+dYTzra1FxIsDWImIiCioGEaIiIgoqDp0GNFqtVi8eDG0Wm2wq9IiOtL58lzbr450vjzX9qujnW9d2sQAViIiImq/OnTLCBEREQUfwwgREREFFcMIERERBRXDCBEREQVVuw8jy5cvR0pKCnQ6HUaOHIk9e/bUuv7nn3+O3r17Q6fTYcCAAdiwYUML1bRxlixZguHDhyM0NBSxsbGYPHky0tPTa91mzZo1EATB56HT6Vqoxg335JNPVqt37969a92mrX6uKSkp1c5VEATMnTvX7/pt7TP93//+h4kTJyIxMRGCIODLL7/0WS6KIhYtWoSEhATo9XqMHTsWx44dq3O/gf7dt4TaztXhcODRRx/FgAEDYDQakZiYiOnTp+P8+fO17rMhfwstoa7PdebMmdXqPW7cuDr32xo/V6Du8/X3NywIAl566aUa99laP9vm0q7DyGeffYYFCxZg8eLF2LdvHwYOHIi0tDTk5ub6XX/Hjh245ZZbcOedd+LXX3/F5MmTMXnyZBw8eLCFax64H3/8EXPnzsWuXbuwefNmOBwOXHPNNSgvL691O5PJhKysLPlx+vTpFqpx4/Tr18+n3tu2batx3bb8uf78888+57l582YAwE033VTjNm3pMy0vL8fAgQOxfPlyv8v/+c9/4rXXXsPKlSuxe/duGI1GpKWlwWq11rjPQP/uW0pt52qxWLBv3z488cQT2LdvH9auXYv09HRcf/31de43kL+FllLX5woA48aN86n3J598Uus+W+vnCtR9vlXPMysrC6tWrYIgCLjxxhtr3W9r/GybjdiOjRgxQpw7d6783uVyiYmJieKSJUv8rn/zzTeL1157rU/ZyJEjxb/+9a/NWs/mkJubKwIQf/zxxxrXWb16tRgWFtZylWoiixcvFgcOHFjv9dvT5/rAAw+I3bt3F91ut9/lbfUzFUVRBCB+8cUX8nu32y3Gx8eLL730klxWXFwsarVa8ZNPPqlxP4H+3QfDhefqz549e0QA4unTp2tcJ9C/hWDwd64zZswQJ02aFNB+2sLnKor1+2wnTZokXnXVVbWu0xY+26bUbltG7HY79u7di7Fjx8plCoUCY8eOxc6dO/1us3PnTp/1ASAtLa3G9VuzkpISAEBkZGSt65WVlaFLly5ITk7GpEmTcOjQoZaoXqMdO3YMiYmJ6NatG6ZNm4bMzMwa120vn6vdbseHH36IO+64o9YbRrbVz/RCGRkZyM7O9vnswsLCMHLkyBo/u4b83bdWJSUlEAQB4eHhta4XyN9Ca7J161bExsYiNTUV9957LwoKCmpctz19rjk5OVi/fj3uvPPOOtdtq59tQ7TbMJKfnw+Xy4W4uDif8ri4OGRnZ/vdJjs7O6D1Wyu324358+djzJgx6N+/f43rpaamYtWqVVi3bh0+/PBDuN1ujB49GmfPnm3B2gZu5MiRWLNmDTZu3IgVK1YgIyMDl156KUpLS/2u314+1y+//BLFxcWYOXNmjeu01c/UH+/nE8hn15C/+9bIarXi0UcfxS233FLrTdQC/VtoLcaNG4f3338fW7ZswYsvvogff/wR48ePh8vl8rt+e/lcAeC9995DaGgopkyZUut6bfWzbag2cddeCszcuXNx8ODBOvsXR40ahVGjRsnvR48ejT59+uCtt97CM88809zVbLDx48fLry+66CKMHDkSXbp0wX/+8596/W+jrXr33Xcxfvx4JCYm1rhOW/1MqZLD4cDNN98MURSxYsWKWtdtq38Lf/nLX+TXAwYMwEUXXYTu3btj69atuPrqq4NYs+a3atUqTJs2rc6B5W31s22odtsyEh0dDaVSiZycHJ/ynJwcxMfH+90mPj4+oPVbo3nz5uHrr7/GDz/8gE6dOgW0rVqtxuDBg3H8+PFmql3zCA8PR69evWqsd3v4XE+fPo3vvvsOd911V0DbtdXPFID8+QTy2TXk77418QaR06dPY/PmzQHfWr6uv4XWqlu3boiOjq6x3m39c/X66aefkJ6eHvDfMdB2P9v6ardhRKPRYOjQodiyZYtc5na7sWXLFp//OVY1atQon/UBYPPmzTWu35qIooh58+bhiy++wPfff4+uXbsGvA+Xy4Xff/8dCQkJzVDD5lNWVoYTJ07UWO+2/Ll6rV69GrGxsbj22msD2q6tfqYA0LVrV8THx/t8dmazGbt3767xs2vI331r4Q0ix44dw3fffYeoqKiA91HX30JrdfbsWRQUFNRY77b8uVb17rvvYujQoRg4cGDA27bVz7begj2Ctjl9+umnolarFdesWSMePnxYvPvuu8Xw8HAxOztbFEVRvP3228W///3v8vrbt28XVSqV+PLLL4tHjhwRFy9eLKrVavH3338P1inU27333iuGhYWJW7duFbOysuSHxWKR17nwfJ966ilx06ZN4okTJ8S9e/eKf/nLX0SdTiceOnQoGKdQbw8++KC4detWMSMjQ9y+fbs4duxYMTo6WszNzRVFsX19rqIoXTXQuXNn8dFHH622rK1/pqWlpeKvv/4q/vrrryIAcenSpeKvv/4qX0HywgsviOHh4eK6devE3377TZw0aZLYtWtXsaKiQt7HVVddJb7++uvy+7r+7oOltnO12+3i9ddfL3bq1Encv3+/z9+wzWaT93Hhudb1txAstZ1raWmp+NBDD4k7d+4UMzIyxO+++04cMmSI2LNnT9Fqtcr7aCufqyjW/XssiqJYUlIiGgwGccWKFX730VY+2+bSrsOIKIri66+/Lnbu3FnUaDTiiBEjxF27dsnLLr/8cnHGjBk+6//nP/8Re/XqJWo0GrFfv37i+vXrW7jGDQPA72P16tXyOhee7/z58+WfTVxcnDhhwgRx3759LV/5AE2dOlVMSEgQNRqNmJSUJE6dOlU8fvy4vLw9fa6iKIqbNm0SAYjp6enVlrX1z/SHH37w+3vrPSe32y0+8cQTYlxcnKjVasWrr7662s+hS5cu4uLFi33Kavu7D5bazjUjI6PGv+EffvhB3seF51rX30Kw1HauFotFvOaaa8SYmBhRrVaLXbp0EWfPnl0tVLSVz1UU6/49FkVRfOutt0S9Xi8WFxf73Udb+WybiyCKotisTS9EREREtWi3Y0aIiIiobWAYISIioqBiGCEiIqKgYhghIiKioGIYISIioqBiGCEiIqKgYhghIiKioGIYISIioqBiGCEiIqKgYhghIiKioGIYISIioqBiGCEiIqKg+v+8VzGYSNy1wgAAAABJRU5ErkJggg==",
    239       "text/plain": [
    240        "<Figure size 640x480 with 1 Axes>"
    241       ]
    242      },
    243      "metadata": {},
    244      "output_type": "display_data"
    245     }
    246    ],
    247    "source": [
    248     "import pandas as pd\n",
    249     "\n",
    250     "pd.DataFrame(history.history).plot()"
    251    ]
    252   },
    253   {
    254    "cell_type": "code",
    255    "execution_count": 7,
    256    "metadata": {},
    257    "outputs": [
    258     {
    259      "name": "stdout",
    260      "output_type": "stream",
    261      "text": [
    262       "\u001b[1m162/162\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 981us/step\n",
    263       "72.50016054455384\n"
    264      ]
    265     }
    266    ],
    267    "source": [
    268     "import numpy as np\n",
    269     "\n",
    270     "y_pred = model.predict(X_test)\n",
    271     "\n",
    272     "residuals = y_test - y_pred\n",
    273     "\n",
    274     "percent_off = np.abs(residuals) / y_test * 100\n",
    275     "\n",
    276     "print(percent_off.mean())"
    277    ]
    278   }
    279  ],
    280  "metadata": {
    281   "kernelspec": {
    282    "display_name": "notebook",
    283    "language": "python",
    284    "name": "notebook"
    285   },
    286   "language_info": {
    287    "codemirror_mode": {
    288     "name": "ipython",
    289     "version": 3
    290    },
    291    "file_extension": ".py",
    292    "mimetype": "text/x-python",
    293    "name": "python",
    294    "nbconvert_exporter": "python",
    295    "pygments_lexer": "ipython3",
    296    "version": "3.11.2"
    297   }
    298  },
    299  "nbformat": 4,
    300  "nbformat_minor": 2
    301 }