From 3c655f6cfe4bcf263eb0f4c0d9145fa22d5fa470 Mon Sep 17 00:00:00 2001 From: javierdastas Date: Thu, 16 Jan 2025 08:27:11 -0400 Subject: [PATCH] Complete turtorial-regression-model-tensorflow Challenge Week 5 - Day 3 - Extra Challenge --- .DS_Store | Bin 0 -> 6148 bytes ...tutorial-regression-model-tensorflow.ipynb | 794 ++++++++++++++---- 2 files changed, 646 insertions(+), 148 deletions(-) create mode 100644 .DS_Store diff --git a/.DS_Store b/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..4247a378e9d6fd3897243373aae55eded2f3a538 GIT binary patch literal 6148 zcmeHK!EVz)5S>i}byOkc08)=Dm17VgR8)wI70M6Ps2l(VTQaK z`aQha-4s=U8=@7OiDuvK%+5~y#@h7~k(w{_XGCKnilB^x5t`o!`&qYS5G;(!tx;1+ zDOL1@>aE#gxQh&M?H*H0OQ=QFe$}s_GmHyr@GIdnsOmW|hm9-T0u6i|^%)jRUDh=h zS!FY5NNR)k z^(cCD@buNm;%jwo>~~)Th4KB0PhbP$`}XiJ-V#}4Sznef5^y!KHnu6b-*}a?-3q|@}WQr MG)N;1{8I*g0^TBGwEzGB literal 0 HcmV?d00001 diff --git a/tutorial-regression-model-tensorflow/tutorial-regression-model-tensorflow.ipynb b/tutorial-regression-model-tensorflow/tutorial-regression-model-tensorflow.ipynb index 8516705..3615605 100644 --- a/tutorial-regression-model-tensorflow/tutorial-regression-model-tensorflow.ipynb +++ b/tutorial-regression-model-tensorflow/tutorial-regression-model-tensorflow.ipynb @@ -55,7 +55,7 @@ }, { "cell_type": "code", - "execution_count": 1, + "execution_count": 6, "metadata": {}, "outputs": [], "source": [ @@ -95,7 +95,7 @@ }, { "cell_type": "code", - "execution_count": 2, + "execution_count": 9, "metadata": {}, "outputs": [ { @@ -211,7 +211,7 @@ "4 978.4 825.5 360 44.30 " ] }, - "execution_count": 2, + "execution_count": 9, "metadata": {}, "output_type": "execute_result" } @@ -237,7 +237,7 @@ }, { "cell_type": "code", - "execution_count": 3, + "execution_count": 12, "metadata": {}, "outputs": [ { @@ -246,7 +246,7 @@ "(1030, 9)" ] }, - "execution_count": 3, + "execution_count": 12, "metadata": {}, "output_type": "execute_result" } @@ -271,7 +271,7 @@ }, { "cell_type": "code", - "execution_count": 4, + "execution_count": 15, "metadata": {}, "outputs": [ { @@ -439,7 +439,7 @@ "max 82.600000 " ] }, - "execution_count": 4, + "execution_count": 15, "metadata": {}, "output_type": "execute_result" } @@ -450,7 +450,7 @@ }, { "cell_type": "code", - "execution_count": 5, + "execution_count": 16, "metadata": {}, "outputs": [ { @@ -468,7 +468,7 @@ "dtype: int64" ] }, - "execution_count": 5, + "execution_count": 16, "metadata": {}, "output_type": "execute_result" } @@ -500,7 +500,7 @@ }, { "cell_type": "code", - "execution_count": 6, + "execution_count": 20, "metadata": {}, "outputs": [], "source": [ @@ -526,7 +526,7 @@ }, { "cell_type": "code", - "execution_count": 7, + "execution_count": 23, "metadata": {}, "outputs": [ { @@ -636,7 +636,7 @@ "4 978.4 825.5 360 " ] }, - "execution_count": 7, + "execution_count": 23, "metadata": {}, "output_type": "execute_result" } @@ -647,7 +647,7 @@ }, { "cell_type": "code", - "execution_count": 8, + "execution_count": 24, "metadata": {}, "outputs": [ { @@ -661,7 +661,7 @@ "Name: Strength, dtype: float64" ] }, - "execution_count": 8, + "execution_count": 24, "metadata": {}, "output_type": "execute_result" } @@ -679,7 +679,7 @@ }, { "cell_type": "code", - "execution_count": 9, + "execution_count": 26, "metadata": {}, "outputs": [ { @@ -789,7 +789,7 @@ "4 0.070492 0.647569 4.976069 " ] }, - "execution_count": 9, + "execution_count": 26, "metadata": {}, "output_type": "execute_result" } @@ -808,7 +808,7 @@ }, { "cell_type": "code", - "execution_count": 10, + "execution_count": 28, "metadata": {}, "outputs": [], "source": [ @@ -852,7 +852,7 @@ }, { "cell_type": "code", - "execution_count": 11, + "execution_count": 34, "metadata": {}, "outputs": [], "source": [ @@ -875,12 +875,12 @@ }, { "cell_type": "code", - "execution_count": 12, + "execution_count": 37, "metadata": {}, "outputs": [], "source": [ "from keras.models import Sequential\n", - "from keras.layers import Dense" + "from keras.layers import Dense, Dropout, Input" ] }, { @@ -906,18 +906,20 @@ }, { "cell_type": "code", - "execution_count": 13, + "execution_count": 41, "metadata": {}, "outputs": [], "source": [ "# define regression model\n", - "def regression_model():\n", + "def regression_model(input_dim):\n", " # create model\n", - " model = Sequential()\n", - " model.add(Dense(50, activation='relu', input_shape=(n_cols,)))\n", - " model.add(Dense(50, activation='relu'))\n", - " model.add(Dense(1))\n", - " \n", + " model = Sequential([\n", + " Input(shape=(input_dim,)), # Explicit input layer\n", + " Dense(50, activation='relu'), # First hidden layer\n", + " Dense(50, activation='relu'), # Second hidden layer\n", + " Dense(1, activation='linear') # Output layer for regression\n", + " ])\n", + "\n", " # compile model\n", " model.compile(optimizer='adam', loss='mean_squared_error')\n", " return model" @@ -960,21 +962,97 @@ }, { "cell_type": "code", - "execution_count": 14, - "metadata": {}, + "execution_count": 47, + "metadata": { + "scrolled": true + }, "outputs": [ { - "name": "stderr", - "output_type": "stream", - "text": [ - "/Users/joaorochaemelo/code/IH/venv_ironhack/lib/python3.12/site-packages/keras/src/layers/core/dense.py:87: 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", - " super().__init__(activity_regularizer=activity_regularizer, **kwargs)\n" - ] + "data": { + "text/html": [ + "
Model: \"sequential\"\n",
+       "
\n" + ], + "text/plain": [ + "\u001b[1mModel: \"sequential\"\u001b[0m\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━┓\n",
+       "┃ Layer (type)                     Output Shape                  Param # ┃\n",
+       "┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━┩\n",
+       "│ dense (Dense)                   │ (None, 50)             │           450 │\n",
+       "├─────────────────────────────────┼────────────────────────┼───────────────┤\n",
+       "│ dense_1 (Dense)                 │ (None, 50)             │         2,550 │\n",
+       "├─────────────────────────────────┼────────────────────────┼───────────────┤\n",
+       "│ dense_2 (Dense)                 │ (None, 1)              │            51 │\n",
+       "└─────────────────────────────────┴────────────────────────┴───────────────┘\n",
+       "
\n" + ], + "text/plain": [ + "┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━┓\n", + "┃\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", + "┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━┩\n", + "│ 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", + "├─────────────────────────────────┼────────────────────────┼───────────────┤\n", + "│ 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", + "├─────────────────────────────────┼────────────────────────┼───────────────┤\n", + "│ dense_2 (\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", + "└─────────────────────────────────┴────────────────────────┴───────────────┘\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
 Total params: 3,051 (11.92 KB)\n",
+       "
\n" + ], + "text/plain": [ + "\u001b[1m Total params: \u001b[0m\u001b[38;5;34m3,051\u001b[0m (11.92 KB)\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
 Trainable params: 3,051 (11.92 KB)\n",
+       "
\n" + ], + "text/plain": [ + "\u001b[1m Trainable params: \u001b[0m\u001b[38;5;34m3,051\u001b[0m (11.92 KB)\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
 Non-trainable params: 0 (0.00 B)\n",
+       "
\n" + ], + "text/plain": [ + "\u001b[1m Non-trainable params: \u001b[0m\u001b[38;5;34m0\u001b[0m (0.00 B)\n" + ] + }, + "metadata": {}, + "output_type": "display_data" } ], "source": [ "# build the model\n", - "model = regression_model()" + "model = regression_model(n_cols)\n", + "model.summary()" ] }, { @@ -999,7 +1077,7 @@ }, { "cell_type": "code", - "execution_count": 15, + "execution_count": 49, "metadata": {}, "outputs": [], "source": [ @@ -1018,7 +1096,7 @@ }, { "cell_type": "code", - "execution_count": 16, + "execution_count": 51, "metadata": {}, "outputs": [ { @@ -1026,214 +1104,214 @@ "output_type": "stream", "text": [ "Epoch 1/100\n", - "23/23 - 0s - 10ms/step - loss: 1535.6633\n", + "23/23 - 0s - 11ms/step - loss: 1541.2819\n", "Epoch 2/100\n", - "23/23 - 0s - 631us/step - loss: 1414.8718\n", + "23/23 - 0s - 910us/step - loss: 1428.5844\n", "Epoch 3/100\n", - "23/23 - 0s - 593us/step - loss: 1213.6837\n", + "23/23 - 0s - 930us/step - loss: 1262.0283\n", "Epoch 4/100\n", - "23/23 - 0s - 574us/step - loss: 908.4758\n", + "23/23 - 0s - 851us/step - loss: 1013.7786\n", "Epoch 5/100\n", - "23/23 - 0s - 539us/step - loss: 584.8323\n", + "23/23 - 0s - 760us/step - loss: 699.7716\n", "Epoch 6/100\n", - "23/23 - 0s - 550us/step - loss: 343.2379\n", + "23/23 - 0s - 747us/step - loss: 418.7799\n", "Epoch 7/100\n", - "23/23 - 0s - 588us/step - loss: 243.2305\n", + "23/23 - 0s - 727us/step - loss: 263.0559\n", "Epoch 8/100\n", - "23/23 - 0s - 1ms/step - loss: 212.0887\n", + "23/23 - 0s - 728us/step - loss: 215.7027\n", "Epoch 9/100\n", - "23/23 - 0s - 534us/step - loss: 197.9822\n", + "23/23 - 0s - 708us/step - loss: 199.4929\n", "Epoch 10/100\n", - "23/23 - 0s - 568us/step - loss: 188.5838\n", + "23/23 - 0s - 703us/step - loss: 190.4789\n", "Epoch 11/100\n", - "23/23 - 0s - 660us/step - loss: 181.9457\n", + "23/23 - 0s - 729us/step - loss: 182.9215\n", "Epoch 12/100\n", - "23/23 - 0s - 566us/step - loss: 175.3464\n", + "23/23 - 0s - 772us/step - loss: 176.4402\n", "Epoch 13/100\n", - "23/23 - 0s - 562us/step - loss: 170.7014\n", + "23/23 - 0s - 756us/step - loss: 171.6512\n", "Epoch 14/100\n", - "23/23 - 0s - 540us/step - loss: 165.9897\n", + "23/23 - 0s - 731us/step - loss: 167.5122\n", "Epoch 15/100\n", - "23/23 - 0s - 531us/step - loss: 161.5963\n", + "23/23 - 0s - 732us/step - loss: 163.7119\n", "Epoch 16/100\n", - "23/23 - 0s - 513us/step - loss: 158.0017\n", + "23/23 - 0s - 741us/step - loss: 159.7008\n", "Epoch 17/100\n", - "23/23 - 0s - 530us/step - loss: 154.6594\n", + "23/23 - 0s - 737us/step - loss: 156.7447\n", "Epoch 18/100\n", - "23/23 - 0s - 521us/step - loss: 151.9145\n", + "23/23 - 0s - 739us/step - loss: 154.1825\n", "Epoch 19/100\n", - "23/23 - 0s - 542us/step - loss: 149.1095\n", + "23/23 - 0s - 728us/step - loss: 151.9096\n", "Epoch 20/100\n", - "23/23 - 0s - 524us/step - loss: 146.4254\n", + "23/23 - 0s - 737us/step - loss: 150.0976\n", "Epoch 21/100\n", - "23/23 - 0s - 522us/step - loss: 144.3078\n", + "23/23 - 0s - 726us/step - loss: 147.2221\n", "Epoch 22/100\n", - "23/23 - 0s - 522us/step - loss: 142.3603\n", + "23/23 - 0s - 772us/step - loss: 146.0423\n", "Epoch 23/100\n", - "23/23 - 0s - 588us/step - loss: 140.5479\n", + "23/23 - 0s - 766us/step - loss: 143.7839\n", "Epoch 24/100\n", - "23/23 - 0s - 636us/step - loss: 138.3354\n", + "23/23 - 0s - 736us/step - loss: 143.1618\n", "Epoch 25/100\n", - "23/23 - 0s - 522us/step - loss: 136.9098\n", + "23/23 - 0s - 723us/step - loss: 140.9458\n", "Epoch 26/100\n", - "23/23 - 0s - 525us/step - loss: 134.6907\n", + "23/23 - 0s - 733us/step - loss: 139.4034\n", "Epoch 27/100\n", - "23/23 - 0s - 542us/step - loss: 133.2367\n", + "23/23 - 0s - 744us/step - loss: 137.9393\n", "Epoch 28/100\n", - "23/23 - 0s - 533us/step - loss: 131.5907\n", + "23/23 - 0s - 766us/step - loss: 136.7807\n", "Epoch 29/100\n", - "23/23 - 0s - 521us/step - loss: 130.2710\n", + "23/23 - 0s - 820us/step - loss: 135.0861\n", "Epoch 30/100\n", - "23/23 - 0s - 523us/step - loss: 128.7159\n", + "23/23 - 0s - 778us/step - loss: 133.6270\n", "Epoch 31/100\n", - "23/23 - 0s - 531us/step - loss: 127.1269\n", + "23/23 - 0s - 764us/step - loss: 132.4332\n", "Epoch 32/100\n", - "23/23 - 0s - 549us/step - loss: 125.9689\n", + "23/23 - 0s - 759us/step - loss: 130.8985\n", "Epoch 33/100\n", - "23/23 - 0s - 588us/step - loss: 124.5487\n", + "23/23 - 0s - 747us/step - loss: 129.4762\n", "Epoch 34/100\n", - "23/23 - 0s - 557us/step - loss: 122.4145\n", + "23/23 - 0s - 780us/step - loss: 129.1946\n", "Epoch 35/100\n", - "23/23 - 0s - 612us/step - loss: 120.9934\n", + "23/23 - 0s - 745us/step - loss: 126.8611\n", "Epoch 36/100\n", - "23/23 - 0s - 546us/step - loss: 118.7995\n", + "23/23 - 0s - 724us/step - loss: 125.5543\n", "Epoch 37/100\n", - "23/23 - 0s - 625us/step - loss: 116.9498\n", + "23/23 - 0s - 763us/step - loss: 124.5658\n", "Epoch 38/100\n", - "23/23 - 0s - 562us/step - loss: 114.8048\n", + "23/23 - 0s - 773us/step - loss: 123.4133\n", "Epoch 39/100\n", - "23/23 - 0s - 660us/step - loss: 113.3864\n", + "23/23 - 0s - 748us/step - loss: 122.2664\n", "Epoch 40/100\n", - "23/23 - 0s - 602us/step - loss: 111.1297\n", + "23/23 - 0s - 753us/step - loss: 120.6392\n", "Epoch 41/100\n", - "23/23 - 0s - 532us/step - loss: 109.5491\n", + "23/23 - 0s - 728us/step - loss: 120.6782\n", "Epoch 42/100\n", - "23/23 - 0s - 1ms/step - loss: 107.0669\n", + "23/23 - 0s - 758us/step - loss: 118.2639\n", "Epoch 43/100\n", - "23/23 - 0s - 599us/step - loss: 105.3359\n", + "23/23 - 0s - 751us/step - loss: 116.7865\n", "Epoch 44/100\n", - "23/23 - 0s - 521us/step - loss: 103.8479\n", + "23/23 - 0s - 739us/step - loss: 114.6794\n", "Epoch 45/100\n", - "23/23 - 0s - 524us/step - loss: 101.4090\n", + "23/23 - 0s - 747us/step - loss: 113.9547\n", "Epoch 46/100\n", - "23/23 - 0s - 506us/step - loss: 99.6286\n", + "23/23 - 0s - 747us/step - loss: 112.1781\n", "Epoch 47/100\n", - "23/23 - 0s - 531us/step - loss: 97.5453\n", + "23/23 - 0s - 747us/step - loss: 110.8746\n", "Epoch 48/100\n", - "23/23 - 0s - 518us/step - loss: 95.3318\n", + "23/23 - 0s - 723us/step - loss: 108.8632\n", "Epoch 49/100\n", - "23/23 - 0s - 515us/step - loss: 92.9175\n", + "23/23 - 0s - 777us/step - loss: 106.9650\n", "Epoch 50/100\n", - "23/23 - 0s - 519us/step - loss: 91.2547\n", + "23/23 - 0s - 749us/step - loss: 105.4845\n", "Epoch 51/100\n", - "23/23 - 0s - 540us/step - loss: 89.2832\n", + "23/23 - 0s - 725us/step - loss: 104.0238\n", "Epoch 52/100\n", - "23/23 - 0s - 518us/step - loss: 87.6215\n", + "23/23 - 0s - 782us/step - loss: 102.2074\n", "Epoch 53/100\n", - "23/23 - 0s - 559us/step - loss: 85.2530\n", + "23/23 - 0s - 745us/step - loss: 101.1428\n", "Epoch 54/100\n", - "23/23 - 0s - 537us/step - loss: 83.4716\n", + "23/23 - 0s - 741us/step - loss: 98.8452\n", "Epoch 55/100\n", - "23/23 - 0s - 526us/step - loss: 80.7640\n", + "23/23 - 0s - 746us/step - loss: 96.8529\n", "Epoch 56/100\n", - "23/23 - 0s - 524us/step - loss: 78.4899\n", + "23/23 - 0s - 759us/step - loss: 94.8379\n", "Epoch 57/100\n", - "23/23 - 0s - 526us/step - loss: 75.8565\n", + "23/23 - 0s - 803us/step - loss: 93.1513\n", "Epoch 58/100\n", - "23/23 - 0s - 514us/step - loss: 74.2692\n", + "23/23 - 0s - 773us/step - loss: 91.1329\n", "Epoch 59/100\n", - "23/23 - 0s - 525us/step - loss: 71.5710\n", + "23/23 - 0s - 785us/step - loss: 89.1572\n", "Epoch 60/100\n", - "23/23 - 0s - 545us/step - loss: 69.4473\n", + "23/23 - 0s - 775us/step - loss: 86.7760\n", "Epoch 61/100\n", - "23/23 - 0s - 536us/step - loss: 67.4782\n", + "23/23 - 0s - 782us/step - loss: 84.8577\n", "Epoch 62/100\n", - "23/23 - 0s - 539us/step - loss: 65.4971\n", + "23/23 - 0s - 745us/step - loss: 82.5608\n", "Epoch 63/100\n", - "23/23 - 0s - 522us/step - loss: 63.5175\n", + "23/23 - 0s - 748us/step - loss: 80.6677\n", "Epoch 64/100\n", - "23/23 - 0s - 543us/step - loss: 62.5338\n", + "23/23 - 0s - 755us/step - loss: 78.9774\n", "Epoch 65/100\n", - "23/23 - 0s - 537us/step - loss: 60.4255\n", + "23/23 - 0s - 769us/step - loss: 76.4190\n", "Epoch 66/100\n", - "23/23 - 0s - 527us/step - loss: 58.4166\n", + "23/23 - 0s - 719us/step - loss: 73.7663\n", "Epoch 67/100\n", - "23/23 - 0s - 533us/step - loss: 57.3019\n", + "23/23 - 0s - 785us/step - loss: 71.9764\n", "Epoch 68/100\n", - "23/23 - 0s - 518us/step - loss: 55.3096\n", + "23/23 - 0s - 833us/step - loss: 69.9222\n", "Epoch 69/100\n", - "23/23 - 0s - 525us/step - loss: 53.5642\n", + "23/23 - 0s - 753us/step - loss: 68.4996\n", "Epoch 70/100\n", - "23/23 - 0s - 531us/step - loss: 51.9112\n", + "23/23 - 0s - 777us/step - loss: 66.2948\n", "Epoch 71/100\n", - "23/23 - 0s - 553us/step - loss: 51.5374\n", + "23/23 - 0s - 770us/step - loss: 64.5349\n", "Epoch 72/100\n", - "23/23 - 0s - 526us/step - loss: 49.3751\n", + "23/23 - 0s - 754us/step - loss: 61.5689\n", "Epoch 73/100\n", - "23/23 - 0s - 527us/step - loss: 47.8511\n", + "23/23 - 0s - 768us/step - loss: 60.1079\n", "Epoch 74/100\n", - "23/23 - 0s - 505us/step - loss: 46.8954\n", + "23/23 - 0s - 755us/step - loss: 58.0989\n", "Epoch 75/100\n", - "23/23 - 0s - 539us/step - loss: 46.0732\n", + "23/23 - 0s - 749us/step - loss: 56.6301\n", "Epoch 76/100\n", - "23/23 - 0s - 582us/step - loss: 45.6850\n", + "23/23 - 0s - 788us/step - loss: 54.7724\n", "Epoch 77/100\n", - "23/23 - 0s - 531us/step - loss: 44.0348\n", + "23/23 - 0s - 773us/step - loss: 53.8532\n", "Epoch 78/100\n", - "23/23 - 0s - 533us/step - loss: 42.9983\n", + "23/23 - 0s - 730us/step - loss: 52.6937\n", "Epoch 79/100\n", - "23/23 - 0s - 573us/step - loss: 42.3076\n", + "23/23 - 0s - 737us/step - loss: 51.8331\n", "Epoch 80/100\n", - "23/23 - 0s - 562us/step - loss: 42.2509\n", + "23/23 - 0s - 811us/step - loss: 50.1780\n", "Epoch 81/100\n", - "23/23 - 0s - 511us/step - loss: 41.4649\n", + "23/23 - 0s - 728us/step - loss: 49.6339\n", "Epoch 82/100\n", - "23/23 - 0s - 1ms/step - loss: 40.4328\n", + "23/23 - 0s - 756us/step - loss: 48.5244\n", "Epoch 83/100\n", - "23/23 - 0s - 779us/step - loss: 39.9605\n", + "23/23 - 0s - 759us/step - loss: 47.3690\n", "Epoch 84/100\n", - "23/23 - 0s - 547us/step - loss: 38.9635\n", + "23/23 - 0s - 832us/step - loss: 46.4823\n", "Epoch 85/100\n", - "23/23 - 0s - 544us/step - loss: 38.8389\n", + "23/23 - 0s - 800us/step - loss: 45.1775\n", "Epoch 86/100\n", - "23/23 - 0s - 532us/step - loss: 38.2276\n", + "23/23 - 0s - 746us/step - loss: 44.5210\n", "Epoch 87/100\n", - "23/23 - 0s - 550us/step - loss: 37.6962\n", + "23/23 - 0s - 773us/step - loss: 43.4352\n", "Epoch 88/100\n", - "23/23 - 0s - 522us/step - loss: 37.2286\n", + "23/23 - 0s - 783us/step - loss: 43.0055\n", "Epoch 89/100\n", - "23/23 - 0s - 535us/step - loss: 36.6299\n", + "23/23 - 0s - 843us/step - loss: 42.3732\n", "Epoch 90/100\n", - "23/23 - 0s - 531us/step - loss: 36.4384\n", + "23/23 - 0s - 785us/step - loss: 41.6420\n", "Epoch 91/100\n", - "23/23 - 0s - 512us/step - loss: 35.9840\n", + "23/23 - 0s - 804us/step - loss: 41.1611\n", "Epoch 92/100\n", - "23/23 - 0s - 529us/step - loss: 35.5926\n", + "23/23 - 0s - 774us/step - loss: 40.7909\n", "Epoch 93/100\n", - "23/23 - 0s - 529us/step - loss: 35.3393\n", + "23/23 - 0s - 832us/step - loss: 39.8461\n", "Epoch 94/100\n", - "23/23 - 0s - 525us/step - loss: 35.1205\n", + "23/23 - 0s - 806us/step - loss: 39.5223\n", "Epoch 95/100\n", - "23/23 - 0s - 540us/step - loss: 34.2688\n", + "23/23 - 0s - 797us/step - loss: 38.7759\n", "Epoch 96/100\n", - "23/23 - 0s - 558us/step - loss: 34.0703\n", + "23/23 - 0s - 790us/step - loss: 38.1885\n", "Epoch 97/100\n", - "23/23 - 0s - 538us/step - loss: 33.6579\n", + "23/23 - 0s - 783us/step - loss: 39.9747\n", "Epoch 98/100\n", - "23/23 - 0s - 529us/step - loss: 33.3642\n", + "23/23 - 0s - 818us/step - loss: 37.6916\n", "Epoch 99/100\n", - "23/23 - 0s - 541us/step - loss: 33.8287\n", + "23/23 - 0s - 819us/step - loss: 37.3984\n", "Epoch 100/100\n", - "23/23 - 0s - 590us/step - loss: 33.2377\n" + "23/23 - 0s - 835us/step - loss: 37.0089\n" ] }, { "data": { "text/plain": [ - "" + "" ] }, - "execution_count": 16, + "execution_count": 51, "metadata": {}, "output_type": "execute_result" } @@ -1258,14 +1336,14 @@ }, { "cell_type": "code", - "execution_count": 17, + "execution_count": 53, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "\u001b[1m10/10\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 1ms/step \n" + "\u001b[1m10/10\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 2ms/step \n" ] } ], @@ -1283,16 +1361,16 @@ }, { "cell_type": "code", - "execution_count": 18, + "execution_count": 55, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "Mean Squared Error (MSE): 40.6015\n", - "Mean Absolute Error (MAE): 4.9573\n", - "R² Score: 0.8499\n" + "Mean Squared Error (MSE): 43.4408\n", + "Mean Absolute Error (MAE): 5.0672\n", + "R² Score: 0.8394\n" ] } ], @@ -1320,6 +1398,419 @@ "3. Increase number of epochs\n" ] }, + { + "cell_type": "code", + "execution_count": 57, + "metadata": {}, + "outputs": [], + "source": [ + "# define regression model\n", + "def regression_model_version2(input_dim):\n", + " # create model\n", + " model = Sequential([\n", + " Input(shape=(input_dim,)), # Explicit input layer\n", + " Dense(128, activation='relu'), # First hidden layer\n", + " Dropout(0.2), # Dropout for regularization\n", + " Dense(64, activation='relu'), # Second hidden layer\n", + " Dense(32, activation='relu'), # Third hidden layer\n", + " Dropout(0.2),\n", + " Dense(16, activation='relu'), # Fourth hidden layer\n", + " Dense(1, activation='linear') # Output layer for regression\n", + " ])\n", + " \n", + " # Compile model\n", + " model.compile(optimizer='adam', loss='mean_squared_error')\n", + " return model" + ] + }, + { + "cell_type": "code", + "execution_count": 58, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
Model: \"sequential_1\"\n",
+       "
\n" + ], + "text/plain": [ + "\u001b[1mModel: \"sequential_1\"\u001b[0m\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━┓\n",
+       "┃ Layer (type)                     Output Shape                  Param # ┃\n",
+       "┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━┩\n",
+       "│ dense_3 (Dense)                 │ (None, 128)            │         1,152 │\n",
+       "├─────────────────────────────────┼────────────────────────┼───────────────┤\n",
+       "│ dropout (Dropout)               │ (None, 128)            │             0 │\n",
+       "├─────────────────────────────────┼────────────────────────┼───────────────┤\n",
+       "│ dense_4 (Dense)                 │ (None, 64)             │         8,256 │\n",
+       "├─────────────────────────────────┼────────────────────────┼───────────────┤\n",
+       "│ dense_5 (Dense)                 │ (None, 32)             │         2,080 │\n",
+       "├─────────────────────────────────┼────────────────────────┼───────────────┤\n",
+       "│ dropout_1 (Dropout)             │ (None, 32)             │             0 │\n",
+       "├─────────────────────────────────┼────────────────────────┼───────────────┤\n",
+       "│ dense_6 (Dense)                 │ (None, 16)             │           528 │\n",
+       "├─────────────────────────────────┼────────────────────────┼───────────────┤\n",
+       "│ dense_7 (Dense)                 │ (None, 1)              │            17 │\n",
+       "└─────────────────────────────────┴────────────────────────┴───────────────┘\n",
+       "
\n" + ], + "text/plain": [ + "┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━┓\n", + "┃\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", + "┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━┩\n", + "│ dense_3 (\u001b[38;5;33mDense\u001b[0m) │ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m128\u001b[0m) │ \u001b[38;5;34m1,152\u001b[0m │\n", + "├─────────────────────────────────┼────────────────────────┼───────────────┤\n", + "│ dropout (\u001b[38;5;33mDropout\u001b[0m) │ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m128\u001b[0m) │ \u001b[38;5;34m0\u001b[0m │\n", + "├─────────────────────────────────┼────────────────────────┼───────────────┤\n", + "│ dense_4 (\u001b[38;5;33mDense\u001b[0m) │ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m64\u001b[0m) │ \u001b[38;5;34m8,256\u001b[0m │\n", + "├─────────────────────────────────┼────────────────────────┼───────────────┤\n", + "│ dense_5 (\u001b[38;5;33mDense\u001b[0m) │ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m32\u001b[0m) │ \u001b[38;5;34m2,080\u001b[0m │\n", + "├─────────────────────────────────┼────────────────────────┼───────────────┤\n", + "│ dropout_1 (\u001b[38;5;33mDropout\u001b[0m) │ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m32\u001b[0m) │ \u001b[38;5;34m0\u001b[0m │\n", + "├─────────────────────────────────┼────────────────────────┼───────────────┤\n", + "│ dense_6 (\u001b[38;5;33mDense\u001b[0m) │ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m16\u001b[0m) │ \u001b[38;5;34m528\u001b[0m │\n", + "├─────────────────────────────────┼────────────────────────┼───────────────┤\n", + "│ dense_7 (\u001b[38;5;33mDense\u001b[0m) │ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m1\u001b[0m) │ \u001b[38;5;34m17\u001b[0m │\n", + "└─────────────────────────────────┴────────────────────────┴───────────────┘\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
 Total params: 12,033 (47.00 KB)\n",
+       "
\n" + ], + "text/plain": [ + "\u001b[1m Total params: \u001b[0m\u001b[38;5;34m12,033\u001b[0m (47.00 KB)\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
 Trainable params: 12,033 (47.00 KB)\n",
+       "
\n" + ], + "text/plain": [ + "\u001b[1m Trainable params: \u001b[0m\u001b[38;5;34m12,033\u001b[0m (47.00 KB)\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
 Non-trainable params: 0 (0.00 B)\n",
+       "
\n" + ], + "text/plain": [ + "\u001b[1m Non-trainable params: \u001b[0m\u001b[38;5;34m0\u001b[0m (0.00 B)\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "model_version2 = regression_model_version2(input_dim=n_cols) # Build the model\n", + "model_version2.summary() # Print model summary" + ] + }, + { + "cell_type": "code", + "execution_count": 59, + "metadata": {}, + "outputs": [], + "source": [ + "# Split the dataset into training and test sets\n", + "X_train, X_test, y_train, y_test = train_test_split(predictors_norm, target, test_size=0.3, random_state=42)" + ] + }, + { + "cell_type": "code", + "execution_count": 60, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 1/100\n", + "23/23 - 0s - 18ms/step - loss: 1506.5284\n", + "Epoch 2/100\n", + "23/23 - 0s - 1ms/step - loss: 1012.5695\n", + "Epoch 3/100\n", + "23/23 - 0s - 1ms/step - loss: 361.9189\n", + "Epoch 4/100\n", + "23/23 - 0s - 1ms/step - loss: 248.3746\n", + "Epoch 5/100\n", + "23/23 - 0s - 811us/step - loss: 226.4765\n", + "Epoch 6/100\n", + "23/23 - 0s - 803us/step - loss: 211.5013\n", + "Epoch 7/100\n", + "23/23 - 0s - 793us/step - loss: 204.6122\n", + "Epoch 8/100\n", + "23/23 - 0s - 816us/step - loss: 212.2970\n", + "Epoch 9/100\n", + "23/23 - 0s - 844us/step - loss: 188.3201\n", + "Epoch 10/100\n", + "23/23 - 0s - 874us/step - loss: 183.7838\n", + "Epoch 11/100\n", + "23/23 - 0s - 1ms/step - loss: 172.6186\n", + "Epoch 12/100\n", + "23/23 - 0s - 1ms/step - loss: 166.8078\n", + "Epoch 13/100\n", + "23/23 - 0s - 953us/step - loss: 156.2429\n", + "Epoch 14/100\n", + "23/23 - 0s - 939us/step - loss: 163.5040\n", + "Epoch 15/100\n", + "23/23 - 0s - 926us/step - loss: 162.4820\n", + "Epoch 16/100\n", + "23/23 - 0s - 873us/step - loss: 139.1870\n", + "Epoch 17/100\n", + "23/23 - 0s - 850us/step - loss: 134.5186\n", + "Epoch 18/100\n", + "23/23 - 0s - 821us/step - loss: 135.7166\n", + "Epoch 19/100\n", + "23/23 - 0s - 833us/step - loss: 123.0136\n", + "Epoch 20/100\n", + "23/23 - 0s - 807us/step - loss: 126.6185\n", + "Epoch 21/100\n", + "23/23 - 0s - 943us/step - loss: 109.6284\n", + "Epoch 22/100\n", + "23/23 - 0s - 955us/step - loss: 107.6411\n", + "Epoch 23/100\n", + "23/23 - 0s - 861us/step - loss: 100.4530\n", + "Epoch 24/100\n", + "23/23 - 0s - 911us/step - loss: 103.2133\n", + "Epoch 25/100\n", + "23/23 - 0s - 850us/step - loss: 97.2804\n", + "Epoch 26/100\n", + "23/23 - 0s - 847us/step - loss: 99.9778\n", + "Epoch 27/100\n", + "23/23 - 0s - 828us/step - loss: 100.4149\n", + "Epoch 28/100\n", + "23/23 - 0s - 861us/step - loss: 88.6341\n", + "Epoch 29/100\n", + "23/23 - 0s - 812us/step - loss: 83.0944\n", + "Epoch 30/100\n", + "23/23 - 0s - 829us/step - loss: 84.3235\n", + "Epoch 31/100\n", + "23/23 - 0s - 788us/step - loss: 87.7622\n", + "Epoch 32/100\n", + "23/23 - 0s - 799us/step - loss: 79.9052\n", + "Epoch 33/100\n", + "23/23 - 0s - 804us/step - loss: 81.5937\n", + "Epoch 34/100\n", + "23/23 - 0s - 781us/step - loss: 76.6903\n", + "Epoch 35/100\n", + "23/23 - 0s - 807us/step - loss: 88.0790\n", + "Epoch 36/100\n", + "23/23 - 0s - 792us/step - loss: 74.4041\n", + "Epoch 37/100\n", + "23/23 - 0s - 797us/step - loss: 74.8928\n", + "Epoch 38/100\n", + "23/23 - 0s - 781us/step - loss: 73.2672\n", + "Epoch 39/100\n", + "23/23 - 0s - 781us/step - loss: 70.3321\n", + "Epoch 40/100\n", + "23/23 - 0s - 797us/step - loss: 74.5983\n", + "Epoch 41/100\n", + "23/23 - 0s - 804us/step - loss: 80.8405\n", + "Epoch 42/100\n", + "23/23 - 0s - 809us/step - loss: 75.2954\n", + "Epoch 43/100\n", + "23/23 - 0s - 900us/step - loss: 74.1446\n", + "Epoch 44/100\n", + "23/23 - 0s - 824us/step - loss: 66.8767\n", + "Epoch 45/100\n", + "23/23 - 0s - 816us/step - loss: 74.4687\n", + "Epoch 46/100\n", + "23/23 - 0s - 798us/step - loss: 68.2307\n", + "Epoch 47/100\n", + "23/23 - 0s - 785us/step - loss: 66.6718\n", + "Epoch 48/100\n", + "23/23 - 0s - 796us/step - loss: 60.4631\n", + "Epoch 49/100\n", + "23/23 - 0s - 799us/step - loss: 68.1654\n", + "Epoch 50/100\n", + "23/23 - 0s - 813us/step - loss: 68.1081\n", + "Epoch 51/100\n", + "23/23 - 0s - 807us/step - loss: 58.4070\n", + "Epoch 52/100\n", + "23/23 - 0s - 795us/step - loss: 63.0811\n", + "Epoch 53/100\n", + "23/23 - 0s - 805us/step - loss: 62.0794\n", + "Epoch 54/100\n", + "23/23 - 0s - 801us/step - loss: 59.3621\n", + "Epoch 55/100\n", + "23/23 - 0s - 789us/step - loss: 64.2509\n", + "Epoch 56/100\n", + "23/23 - 0s - 798us/step - loss: 59.3678\n", + "Epoch 57/100\n", + "23/23 - 0s - 788us/step - loss: 62.0736\n", + "Epoch 58/100\n", + "23/23 - 0s - 782us/step - loss: 61.1695\n", + "Epoch 59/100\n", + "23/23 - 0s - 788us/step - loss: 59.9894\n", + "Epoch 60/100\n", + "23/23 - 0s - 830us/step - loss: 56.7670\n", + "Epoch 61/100\n", + "23/23 - 0s - 807us/step - loss: 61.5025\n", + "Epoch 62/100\n", + "23/23 - 0s - 857us/step - loss: 60.5461\n", + "Epoch 63/100\n", + "23/23 - 0s - 802us/step - loss: 56.6539\n", + "Epoch 64/100\n", + "23/23 - 0s - 797us/step - loss: 52.8009\n", + "Epoch 65/100\n", + "23/23 - 0s - 795us/step - loss: 55.8587\n", + "Epoch 66/100\n", + "23/23 - 0s - 790us/step - loss: 58.9443\n", + "Epoch 67/100\n", + "23/23 - 0s - 785us/step - loss: 54.3323\n", + "Epoch 68/100\n", + "23/23 - 0s - 809us/step - loss: 55.2727\n", + "Epoch 69/100\n", + "23/23 - 0s - 791us/step - loss: 49.1431\n", + "Epoch 70/100\n", + "23/23 - 0s - 781us/step - loss: 52.4756\n", + "Epoch 71/100\n", + "23/23 - 0s - 780us/step - loss: 48.7997\n", + "Epoch 72/100\n", + "23/23 - 0s - 800us/step - loss: 51.9765\n", + "Epoch 73/100\n", + "23/23 - 0s - 785us/step - loss: 49.8133\n", + "Epoch 74/100\n", + "23/23 - 0s - 817us/step - loss: 47.4235\n", + "Epoch 75/100\n", + "23/23 - 0s - 790us/step - loss: 48.4559\n", + "Epoch 76/100\n", + "23/23 - 0s - 778us/step - loss: 53.3248\n", + "Epoch 77/100\n", + "23/23 - 0s - 792us/step - loss: 48.7112\n", + "Epoch 78/100\n", + "23/23 - 0s - 795us/step - loss: 52.3270\n", + "Epoch 79/100\n", + "23/23 - 0s - 784us/step - loss: 49.6255\n", + "Epoch 80/100\n", + "23/23 - 0s - 783us/step - loss: 57.7027\n", + "Epoch 81/100\n", + "23/23 - 0s - 820us/step - loss: 49.6434\n", + "Epoch 82/100\n", + "23/23 - 0s - 786us/step - loss: 47.1161\n", + "Epoch 83/100\n", + "23/23 - 0s - 784us/step - loss: 44.7161\n", + "Epoch 84/100\n", + "23/23 - 0s - 802us/step - loss: 46.7216\n", + "Epoch 85/100\n", + "23/23 - 0s - 794us/step - loss: 49.4875\n", + "Epoch 86/100\n", + "23/23 - 0s - 799us/step - loss: 46.0787\n", + "Epoch 87/100\n", + "23/23 - 0s - 794us/step - loss: 44.3090\n", + "Epoch 88/100\n", + "23/23 - 0s - 793us/step - loss: 47.9379\n", + "Epoch 89/100\n", + "23/23 - 0s - 783us/step - loss: 44.9635\n", + "Epoch 90/100\n", + "23/23 - 0s - 796us/step - loss: 45.6326\n", + "Epoch 91/100\n", + "23/23 - 0s - 793us/step - loss: 45.3235\n", + "Epoch 92/100\n", + "23/23 - 0s - 798us/step - loss: 43.8267\n", + "Epoch 93/100\n", + "23/23 - 0s - 782us/step - loss: 42.5479\n", + "Epoch 94/100\n", + "23/23 - 0s - 795us/step - loss: 45.4005\n", + "Epoch 95/100\n", + "23/23 - 0s - 801us/step - loss: 42.4914\n", + "Epoch 96/100\n", + "23/23 - 0s - 792us/step - loss: 46.7129\n", + "Epoch 97/100\n", + "23/23 - 0s - 794us/step - loss: 45.9986\n", + "Epoch 98/100\n", + "23/23 - 0s - 790us/step - loss: 46.7078\n", + "Epoch 99/100\n", + "23/23 - 0s - 795us/step - loss: 46.3625\n", + "Epoch 100/100\n", + "23/23 - 0s - 788us/step - loss: 47.8058\n" + ] + }, + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 60, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# fit the model\n", + "model_version2.fit(X_train, y_train, epochs=100, verbose=2)" + ] + }, + { + "cell_type": "code", + "execution_count": 61, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\u001b[1m10/10\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 2ms/step \n" + ] + } + ], + "source": [ + "# Make predictions on the test set\n", + "y_pred = model_version2.predict(X_test)" + ] + }, + { + "cell_type": "code", + "execution_count": 62, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Mean Squared Error (MSE): 31.8443\n", + "Mean Absolute Error (MAE): 4.2934\n", + "R² Score: 0.8823\n" + ] + } + ], + "source": [ + "mse = mean_squared_error(y_test, y_pred)\n", + "mae = mean_absolute_error(y_test, y_pred)\n", + "r2 = r2_score(y_test, y_pred)\n", + "\n", + "print(f'Mean Squared Error (MSE): {mse:.4f}')\n", + "print(f'Mean Absolute Error (MAE): {mae:.4f}')\n", + "print(f'R² Score: {r2:.4f}')" + ] + }, { "cell_type": "markdown", "metadata": {}, @@ -1337,11 +1828,18 @@ "source": [ "### Thank you for following this tutorial - feel free to go back and play with the architcture and parameters" ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] } ], "metadata": { "kernelspec": { - "display_name": "venv_ironhack", + "display_name": "Python 3 (ipykernel)", "language": "python", "name": "python3" }, @@ -1355,7 +1853,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.12.6" + "version": "3.12.2" } }, "nbformat": 4,