diff --git a/model_base.ipynb b/model_base.ipynb index 189305a..4a1f83f 100644 --- a/model_base.ipynb +++ b/model_base.ipynb @@ -2,7 +2,7 @@ "cells": [ { "cell_type": "code", - "execution_count": null, + "execution_count": 1, "metadata": {}, "outputs": [], "source": [ @@ -13,7 +13,353 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 2, + "metadata": {}, + "outputs": [], + "source": [ + "with h5py.File('./data/TrainingData.h5', 'r') as f:\n", + " # Access the trip dataset and their corresponding timestamps\n", + " traffic_data = f['trip'][()]\n", + " dates = f['timeslot'][()]" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [], + "source": [ + "formatted_dates = []\n", + "\n", + "for date_string in dates:\n", + " formatted_date = datetime.strptime(date_string.decode(), '%Y%m%d%H%M')\n", + "\n", + " year = formatted_date.year\n", + " month = formatted_date.month\n", + " day = formatted_date.day\n", + " hour = formatted_date.hour\n", + " minute = formatted_date.minute\n", + "\n", + " formatted_dates.append(np.array([year, month, day, hour, minute]))\n", + "\n", + "formatted_dates = np.array(formatted_dates).reshape(1488, 5, 1)" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [], + "source": [ + "test_size = 240\n", + "\n", + "train_traffic_data = traffic_data[:-test_size]\n", + "test_traffic_data = traffic_data[-test_size:]\n", + "\n", + "train_formatted_dates = formatted_dates[:-test_size]\n", + "test_formatted_dates = formatted_dates[-test_size:]" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [], + "source": [ + "X_train, X_test = train_formatted_dates, test_formatted_dates\n", + "y_train, y_test = train_traffic_data, test_traffic_data" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [], + "source": [ + "import pandas as pd\n", + "import numpy as np" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
Join_CountTARGET_FIDBlockIDBikeLane_milesAADTSpeedLimitAvgSpeedPop2019Pop_DensityShape_LengthShape_AreaStationNum
0011NaN32638.666667NaNNaN0.00.0000007840.4902883.787844e+060
1022NaNNaNNaNNaN0.00.0000007840.6864483.787843e+060
23330.80705521234.74193525.015.01049.00.0295947840.8829703.787843e+063
33442.0962215915.12500025.019.01816.00.0302527841.0804773.787844e+063
43550.98432023940.078947NaNNaN1892.00.0226477841.2773273.787843e+063
.......................................
12331241241.9557079050.487805NaNNaN1986.00.0460457840.2809373.787843e+063
12431251251.4404499121.500000NaNNaN1198.00.0397267840.0850723.787843e+063
12521261260.9857048770.901961NaNNaN555.00.0151257839.8905183.787843e+062
12641271270.22859312266.08571425.016.0814.00.0311257839.6966213.787844e+064
12741281281.61994011077.03703725.016.01385.00.0596717839.5019803.787843e+064
\n", + "

128 rows × 12 columns

\n", + "
" + ], + "text/plain": [ + " Join_Count TARGET_FID BlockID BikeLane_miles AADT \\\n", + "0 0 1 1 NaN 32638.666667 \n", + "1 0 2 2 NaN NaN \n", + "2 3 3 3 0.807055 21234.741935 \n", + "3 3 4 4 2.096221 5915.125000 \n", + "4 3 5 5 0.984320 23940.078947 \n", + ".. ... ... ... ... ... \n", + "123 3 124 124 1.955707 9050.487805 \n", + "124 3 125 125 1.440449 9121.500000 \n", + "125 2 126 126 0.985704 8770.901961 \n", + "126 4 127 127 0.228593 12266.085714 \n", + "127 4 128 128 1.619940 11077.037037 \n", + "\n", + " SpeedLimit AvgSpeed Pop2019 Pop_Density Shape_Length Shape_Area \\\n", + "0 NaN NaN 0.0 0.000000 7840.490288 3.787844e+06 \n", + "1 NaN NaN 0.0 0.000000 7840.686448 3.787843e+06 \n", + "2 25.0 15.0 1049.0 0.029594 7840.882970 3.787843e+06 \n", + "3 25.0 19.0 1816.0 0.030252 7841.080477 3.787844e+06 \n", + "4 NaN NaN 1892.0 0.022647 7841.277327 3.787843e+06 \n", + ".. ... ... ... ... ... ... \n", + "123 NaN NaN 1986.0 0.046045 7840.280937 3.787843e+06 \n", + "124 NaN NaN 1198.0 0.039726 7840.085072 3.787843e+06 \n", + "125 NaN NaN 555.0 0.015125 7839.890518 3.787843e+06 \n", + "126 25.0 16.0 814.0 0.031125 7839.696621 3.787844e+06 \n", + "127 25.0 16.0 1385.0 0.059671 7839.501980 3.787843e+06 \n", + "\n", + " StationNum \n", + "0 0 \n", + "1 0 \n", + "2 3 \n", + "3 3 \n", + "4 3 \n", + ".. ... \n", + "123 3 \n", + "124 3 \n", + "125 2 \n", + "126 4 \n", + "127 4 \n", + "\n", + "[128 rows x 12 columns]" + ] + }, + "execution_count": 7, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "spatio_data_file = \"./data/SpatialFeatures.csv\"\n", + "raw_spatio_feature = pd.read_csv(spatio_data_file)\n", + "raw_spatio_feature" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": {}, + "outputs": [], + "source": [ + "bikeLane_matrix = raw_spatio_feature[\"BikeLane_miles\"]\n", + "bikeLane_matrix = bikeLane_matrix.fillna(0).to_numpy()\n", + "bikeLane_matrix = bikeLane_matrix/bikeLane_matrix.max()\n", + "bikeLane_matrix_board = bikeLane_matrix[np.newaxis,:] * np.ones((1248,1))" + ] + }, + { + "cell_type": "code", + "execution_count": 9, "metadata": {}, "outputs": [], "source": [ @@ -27,7 +373,7 @@ "\n", "left_inputs = layers.Input(shape = input_shape)\n", "\n", - "x = models.layers.LSTM(50, activation = \"tanh\")(left_inputs)\n", + "x = layers.LSTM(50, activation = \"tanh\")(left_inputs)\n", "\n", "x = layers.Dense(2*16*8, activation = \"linear\")(x)\n", "\n", @@ -39,12 +385,220 @@ "\n" ] }, + { + "cell_type": "code", + "execution_count": 13, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array([[[2019],\n", + " [ 10],\n", + " [ 1],\n", + " [ 0],\n", + " [ 30]],\n", + "\n", + " [[2019],\n", + " [ 10],\n", + " [ 1],\n", + " [ 1],\n", + " [ 0]],\n", + "\n", + " [[2019],\n", + " [ 10],\n", + " [ 1],\n", + " [ 1],\n", + " [ 30]],\n", + "\n", + " ...,\n", + "\n", + " [[2019],\n", + " [ 10],\n", + " [ 26],\n", + " [ 23],\n", + " [ 0]],\n", + "\n", + " [[2019],\n", + " [ 10],\n", + " [ 26],\n", + " [ 23],\n", + " [ 30]],\n", + "\n", + " [[2019],\n", + " [ 10],\n", + " [ 27],\n", + " [ 0],\n", + " [ 0]]])" + ] + }, + "execution_count": 13, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "X_train" + ] + }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], - "source": [] + "source": [ + "X_train_scaled = X_train[:,3:]\n", + "X_test_scaled = X_test[:,3:]" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 1/50\n", + "39/39 [==============================] - 1s 9ms/step - loss: 213.0473 - val_loss: 144.8039\n", + "Epoch 2/50\n", + "39/39 [==============================] - 0s 2ms/step - loss: 184.4646 - val_loss: 119.2632\n", + "Epoch 3/50\n", + "39/39 [==============================] - 0s 2ms/step - loss: 158.5347 - val_loss: 105.8267\n", + "Epoch 4/50\n", + "39/39 [==============================] - 0s 2ms/step - loss: 143.7741 - val_loss: 98.0472\n", + "Epoch 5/50\n", + "39/39 [==============================] - 0s 2ms/step - loss: 134.0348 - val_loss: 93.0242\n", + "Epoch 6/50\n", + "39/39 [==============================] - 0s 1ms/step - loss: 127.1140 - val_loss: 89.8005\n", + "Epoch 7/50\n", + "39/39 [==============================] - 0s 1ms/step - loss: 122.1602 - val_loss: 87.7104\n", + "Epoch 8/50\n", + "39/39 [==============================] - 0s 1ms/step - loss: 118.5489 - val_loss: 86.4234\n", + "Epoch 9/50\n", + "39/39 [==============================] - 0s 1ms/step - loss: 115.9217 - val_loss: 85.6522\n", + "Epoch 10/50\n", + "39/39 [==============================] - 0s 2ms/step - loss: 114.0212 - val_loss: 85.3681\n", + "Epoch 11/50\n", + "39/39 [==============================] - 0s 1ms/step - loss: 112.5865 - val_loss: 85.1347\n", + "Epoch 12/50\n", + "39/39 [==============================] - 0s 2ms/step - loss: 111.6269 - val_loss: 85.2543\n", + "Epoch 13/50\n", + "39/39 [==============================] - 0s 2ms/step - loss: 110.8616 - val_loss: 85.2738\n", + "Epoch 14/50\n", + "39/39 [==============================] - 0s 2ms/step - loss: 110.3609 - val_loss: 85.4121\n", + "Epoch 15/50\n", + "39/39 [==============================] - 0s 2ms/step - loss: 110.0156 - val_loss: 85.7094\n", + "Epoch 16/50\n", + "39/39 [==============================] - 0s 2ms/step - loss: 109.7098 - val_loss: 85.6584\n", + "Epoch 17/50\n", + "39/39 [==============================] - 0s 1ms/step - loss: 109.5667 - val_loss: 86.0608\n", + "Epoch 18/50\n", + "39/39 [==============================] - 0s 1ms/step - loss: 109.3852 - val_loss: 86.0898\n", + "Epoch 19/50\n", + "39/39 [==============================] - 0s 1ms/step - loss: 109.3077 - val_loss: 86.1924\n", + "Epoch 20/50\n", + "39/39 [==============================] - 0s 1ms/step - loss: 109.2454 - val_loss: 86.4365\n", + "Epoch 21/50\n", + "39/39 [==============================] - 0s 1ms/step - loss: 109.1953 - val_loss: 86.2306\n", + "Epoch 22/50\n", + "39/39 [==============================] - 0s 2ms/step - loss: 108.7120 - val_loss: 85.5497\n", + "Epoch 23/50\n", + "39/39 [==============================] - 0s 1ms/step - loss: 107.9923 - val_loss: 84.8486\n", + "Epoch 24/50\n", + "39/39 [==============================] - 0s 2ms/step - loss: 106.5528 - val_loss: 83.9956\n", + "Epoch 25/50\n", + "39/39 [==============================] - 0s 2ms/step - loss: 105.1779 - val_loss: 81.6498\n", + "Epoch 26/50\n", + "39/39 [==============================] - 0s 1ms/step - loss: 103.8916 - val_loss: 81.1214\n", + "Epoch 27/50\n", + "39/39 [==============================] - 0s 1ms/step - loss: 102.9861 - val_loss: 81.5862\n", + "Epoch 28/50\n", + "39/39 [==============================] - 0s 1ms/step - loss: 100.8951 - val_loss: 79.1956\n", + "Epoch 29/50\n", + "39/39 [==============================] - 0s 1ms/step - loss: 97.6820 - val_loss: 75.3084\n", + "Epoch 30/50\n", + "39/39 [==============================] - 0s 2ms/step - loss: 94.0599 - val_loss: 71.8201\n", + "Epoch 31/50\n", + "39/39 [==============================] - 0s 2ms/step - loss: 89.8942 - val_loss: 68.2872\n", + "Epoch 32/50\n", + "39/39 [==============================] - 0s 2ms/step - loss: 86.6234 - val_loss: 68.3562\n", + "Epoch 33/50\n", + "39/39 [==============================] - 0s 1ms/step - loss: 83.7273 - val_loss: 66.8059\n", + "Epoch 34/50\n", + "39/39 [==============================] - 0s 1ms/step - loss: 81.5555 - val_loss: 65.0340\n", + "Epoch 35/50\n", + "39/39 [==============================] - 0s 1ms/step - loss: 79.8541 - val_loss: 64.4435\n", + "Epoch 36/50\n", + "39/39 [==============================] - 0s 1ms/step - loss: 78.2599 - val_loss: 64.8526\n", + "Epoch 37/50\n", + "39/39 [==============================] - 0s 1ms/step - loss: 76.9122 - val_loss: 63.9882\n", + "Epoch 38/50\n", + "39/39 [==============================] - 0s 1ms/step - loss: 75.8087 - val_loss: 63.5033\n", + "Epoch 39/50\n", + "39/39 [==============================] - 0s 1ms/step - loss: 75.1495 - val_loss: 63.4638\n", + "Epoch 40/50\n", + "39/39 [==============================] - 0s 1ms/step - loss: 74.5850 - val_loss: 64.1694\n", + "Epoch 41/50\n", + "39/39 [==============================] - 0s 1ms/step - loss: 74.6376 - val_loss: 65.1026\n", + "Epoch 42/50\n", + "39/39 [==============================] - 0s 1ms/step - loss: 73.7184 - val_loss: 63.3465\n", + "Epoch 43/50\n", + "39/39 [==============================] - 0s 1ms/step - loss: 73.0771 - val_loss: 62.3124\n", + "Epoch 44/50\n", + "39/39 [==============================] - 0s 1ms/step - loss: 72.4952 - val_loss: 62.8214\n", + "Epoch 45/50\n", + "39/39 [==============================] - 0s 1ms/step - loss: 72.1373 - val_loss: 62.8891\n", + "Epoch 46/50\n", + "39/39 [==============================] - 0s 1ms/step - loss: 71.4127 - val_loss: 63.0681\n", + "Epoch 47/50\n", + "39/39 [==============================] - 0s 1ms/step - loss: 71.1406 - val_loss: 63.8471\n", + "Epoch 48/50\n", + "39/39 [==============================] - 0s 1ms/step - loss: 70.7038 - val_loss: 62.8992\n", + "Epoch 49/50\n", + "39/39 [==============================] - 0s 1ms/step - loss: 70.3270 - val_loss: 62.5290\n", + "Epoch 50/50\n", + "39/39 [==============================] - 0s 1ms/step - loss: 70.1907 - val_loss: 63.5971\n" + ] + }, + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 11, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "model.compile(optimizer='adam', loss='mse')\n", + "model.fit([X_train], y_train, epochs=50, batch_size=32, validation_data=([X_test], y_test))" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "8/8 [==============================] - 0s 1ms/step - loss: 63.5971\n", + "Root Mean Squared Error: 7.9747811027309465\n" + ] + } + ], + "source": [ + "mse = model.evaluate(X_test, y_test)\n", + "\n", + "# Show rmse to see how model performs on the test set\n", + "rmse = np.sqrt(mse)\n", + "print(f'Root Mean Squared Error: {rmse}')" + ] } ], "metadata": { @@ -54,8 +608,16 @@ "name": "python3" }, "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", "name": "python", - "version": "3.10.13" + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.8.18" } }, "nbformat": 4, diff --git a/model_v1.ipynb b/model_v1.ipynb index db6c599..6e84e8c 100644 --- a/model_v1.ipynb +++ b/model_v1.ipynb @@ -2,7 +2,7 @@ "cells": [ { "cell_type": "code", - "execution_count": 15, + "execution_count": 1, "metadata": {}, "outputs": [], "source": [ @@ -13,7 +13,7 @@ }, { "cell_type": "code", - "execution_count": 16, + "execution_count": 2, "metadata": {}, "outputs": [], "source": [ @@ -25,7 +25,7 @@ }, { "cell_type": "code", - "execution_count": 17, + "execution_count": 3, "metadata": {}, "outputs": [], "source": [ @@ -47,7 +47,7 @@ }, { "cell_type": "code", - "execution_count": 18, + "execution_count": 4, "metadata": {}, "outputs": [], "source": [ @@ -62,7 +62,7 @@ }, { "cell_type": "code", - "execution_count": 19, + "execution_count": 5, "metadata": {}, "outputs": [], "source": [ @@ -72,7 +72,295 @@ }, { "cell_type": "code", - "execution_count": 20, + "execution_count": 6, + "metadata": {}, + "outputs": [], + "source": [ + "import pandas as pd\n", + "import numpy as np\n", + "\n" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
Join_CountTARGET_FIDBlockIDBikeLane_milesAADTSpeedLimitAvgSpeedPop2019Pop_DensityShape_LengthShape_AreaStationNum
0011NaN32638.666667NaNNaN0.00.0000007840.4902883.787844e+060
1022NaNNaNNaNNaN0.00.0000007840.6864483.787843e+060
23330.80705521234.74193525.015.01049.00.0295947840.8829703.787843e+063
33442.0962215915.12500025.019.01816.00.0302527841.0804773.787844e+063
43550.98432023940.078947NaNNaN1892.00.0226477841.2773273.787843e+063
.......................................
12331241241.9557079050.487805NaNNaN1986.00.0460457840.2809373.787843e+063
12431251251.4404499121.500000NaNNaN1198.00.0397267840.0850723.787843e+063
12521261260.9857048770.901961NaNNaN555.00.0151257839.8905183.787843e+062
12641271270.22859312266.08571425.016.0814.00.0311257839.6966213.787844e+064
12741281281.61994011077.03703725.016.01385.00.0596717839.5019803.787843e+064
\n", + "

128 rows × 12 columns

\n", + "
" + ], + "text/plain": [ + " Join_Count TARGET_FID BlockID BikeLane_miles AADT \\\n", + "0 0 1 1 NaN 32638.666667 \n", + "1 0 2 2 NaN NaN \n", + "2 3 3 3 0.807055 21234.741935 \n", + "3 3 4 4 2.096221 5915.125000 \n", + "4 3 5 5 0.984320 23940.078947 \n", + ".. ... ... ... ... ... \n", + "123 3 124 124 1.955707 9050.487805 \n", + "124 3 125 125 1.440449 9121.500000 \n", + "125 2 126 126 0.985704 8770.901961 \n", + "126 4 127 127 0.228593 12266.085714 \n", + "127 4 128 128 1.619940 11077.037037 \n", + "\n", + " SpeedLimit AvgSpeed Pop2019 Pop_Density Shape_Length Shape_Area \\\n", + "0 NaN NaN 0.0 0.000000 7840.490288 3.787844e+06 \n", + "1 NaN NaN 0.0 0.000000 7840.686448 3.787843e+06 \n", + "2 25.0 15.0 1049.0 0.029594 7840.882970 3.787843e+06 \n", + "3 25.0 19.0 1816.0 0.030252 7841.080477 3.787844e+06 \n", + "4 NaN NaN 1892.0 0.022647 7841.277327 3.787843e+06 \n", + ".. ... ... ... ... ... ... \n", + "123 NaN NaN 1986.0 0.046045 7840.280937 3.787843e+06 \n", + "124 NaN NaN 1198.0 0.039726 7840.085072 3.787843e+06 \n", + "125 NaN NaN 555.0 0.015125 7839.890518 3.787843e+06 \n", + "126 25.0 16.0 814.0 0.031125 7839.696621 3.787844e+06 \n", + "127 25.0 16.0 1385.0 0.059671 7839.501980 3.787843e+06 \n", + "\n", + " StationNum \n", + "0 0 \n", + "1 0 \n", + "2 3 \n", + "3 3 \n", + "4 3 \n", + ".. ... \n", + "123 3 \n", + "124 3 \n", + "125 2 \n", + "126 4 \n", + "127 4 \n", + "\n", + "[128 rows x 12 columns]" + ] + }, + "execution_count": 7, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "spatio_data_file = \"./data/SpatialFeatures.csv\"\n", + "raw_spatio_feature = pd.read_csv(spatio_data_file)\n", + "raw_spatio_feature" + ] + }, + { + "cell_type": "code", + "execution_count": 45, + "metadata": {}, + "outputs": [], + "source": [ + "bikeLane_matrix = raw_spatio_feature[\"BikeLane_miles\"]\n", + "bikeLane_matrix = bikeLane_matrix.fillna(0).to_numpy()\n", + "bikeLane_matrix = bikeLane_matrix/bikeLane_matrix.max()\n", + "bikeLane_matrix_board = bikeLane_matrix[np.newaxis,:] * np.ones((1248,1))" + ] + }, + { + "cell_type": "code", + "execution_count": 43, "metadata": {}, "outputs": [], "source": [ @@ -84,15 +372,25 @@ "\n", "input_shape = (5,1)\n", "\n", + "static_features = 128\n", + "\n", "left_inputs = layers.Input(shape = input_shape)\n", "\n", + "static_input = layers.Input(shape = static_features,)\n", + "\n", "x = layers.LSTM(50, activation = \"tanh\")(left_inputs)\n", "\n", - "x = layers.Dense(2*16*8, activation = \"linear\")(x)\n", + "# x = layers.Dense(128,activation= \"relu\")(x)\n", + "\n", + "\n", + "x = layers.concatenate([x,static_input])\n", + "\n", + "x = layers.Dense(2*16*8, activation = \"relu\")(x)\n", "\n", "output = layers.Reshape((2,16,8))(x)\n", "\n", - "model = models.Model([left_inputs],outputs = output)\n", + "model = models.Model([left_inputs,static_input],outputs = output)\n", + "\n", "\n", "\n", "\n" @@ -100,7 +398,7 @@ }, { "cell_type": "code", - "execution_count": 21, + "execution_count": 47, "metadata": {}, "outputs": [ { @@ -108,134 +406,39 @@ "output_type": "stream", "text": [ "Epoch 1/50\n", - "39/39 [==============================] - 1s 9ms/step - loss: 212.9115 - val_loss: 144.5777\n", - "Epoch 2/50\n", - "39/39 [==============================] - 0s 2ms/step - loss: 183.6068 - val_loss: 118.8507\n", - "Epoch 3/50\n", - "39/39 [==============================] - 0s 2ms/step - loss: 158.2998 - val_loss: 105.8254\n", - "Epoch 4/50\n", - "39/39 [==============================] - 0s 2ms/step - loss: 143.8591 - val_loss: 98.0465\n", - "Epoch 5/50\n", - "39/39 [==============================] - 0s 2ms/step - loss: 134.1396 - val_loss: 93.0498\n", - "Epoch 6/50\n", - "39/39 [==============================] - 0s 2ms/step - loss: 127.2775 - val_loss: 89.7777\n", - "Epoch 7/50\n", - "39/39 [==============================] - 0s 2ms/step - loss: 122.2552 - val_loss: 87.7291\n", - "Epoch 8/50\n", - "39/39 [==============================] - 0s 2ms/step - loss: 118.6310 - val_loss: 86.4313\n", - "Epoch 9/50\n", - "39/39 [==============================] - 0s 2ms/step - loss: 115.9718 - val_loss: 85.7162\n", - "Epoch 10/50\n", - "39/39 [==============================] - 0s 2ms/step - loss: 114.0570 - val_loss: 85.3153\n", - "Epoch 11/50\n", - "39/39 [==============================] - 0s 2ms/step - loss: 112.6366 - val_loss: 85.1707\n", - "Epoch 12/50\n", - "39/39 [==============================] - 0s 2ms/step - loss: 111.6274 - val_loss: 85.1579\n", - "Epoch 13/50\n", - "39/39 [==============================] - 0s 2ms/step - loss: 110.8910 - val_loss: 85.2295\n", - "Epoch 14/50\n", - "39/39 [==============================] - 0s 2ms/step - loss: 110.3705 - val_loss: 85.3980\n", - "Epoch 15/50\n", - "39/39 [==============================] - 0s 2ms/step - loss: 109.9801 - val_loss: 85.5780\n", - "Epoch 16/50\n", - "39/39 [==============================] - 0s 2ms/step - loss: 109.7158 - val_loss: 85.8827\n", - "Epoch 17/50\n", - "39/39 [==============================] - 0s 2ms/step - loss: 109.5257 - val_loss: 86.0089\n", - "Epoch 18/50\n", - "39/39 [==============================] - 0s 2ms/step - loss: 109.4247 - val_loss: 86.1505\n", - "Epoch 19/50\n", - "39/39 [==============================] - 0s 2ms/step - loss: 109.0258 - val_loss: 85.7924\n", - "Epoch 20/50\n", - "39/39 [==============================] - 0s 2ms/step - loss: 108.8352 - val_loss: 85.9186\n", - "Epoch 21/50\n", - "39/39 [==============================] - 0s 2ms/step - loss: 108.5763 - val_loss: 85.5510\n", - "Epoch 22/50\n", - "39/39 [==============================] - 0s 2ms/step - loss: 108.1767 - val_loss: 85.3380\n", - "Epoch 23/50\n", - "39/39 [==============================] - 0s 2ms/step - loss: 107.4323 - val_loss: 84.9938\n", - "Epoch 24/50\n", - "39/39 [==============================] - 0s 2ms/step - loss: 106.1936 - val_loss: 82.6167\n", - "Epoch 25/50\n", - "39/39 [==============================] - 0s 2ms/step - loss: 104.6931 - val_loss: 81.7814\n", - "Epoch 26/50\n", - "39/39 [==============================] - 0s 2ms/step - loss: 102.9895 - val_loss: 79.9620\n", - "Epoch 27/50\n", - "39/39 [==============================] - 0s 2ms/step - loss: 101.5745 - val_loss: 78.4792\n", - "Epoch 28/50\n", - "39/39 [==============================] - 0s 2ms/step - loss: 98.5761 - val_loss: 76.5478\n", - "Epoch 29/50\n", - "39/39 [==============================] - 0s 2ms/step - loss: 94.6209 - val_loss: 72.0995\n", - "Epoch 30/50\n", - "39/39 [==============================] - 0s 2ms/step - loss: 90.4683 - val_loss: 70.5429\n", - "Epoch 31/50\n", - "39/39 [==============================] - 0s 2ms/step - loss: 86.6393 - val_loss: 67.5324\n", - "Epoch 32/50\n", - "39/39 [==============================] - 0s 2ms/step - loss: 83.6719 - val_loss: 66.9005\n", - "Epoch 33/50\n", - "39/39 [==============================] - 0s 2ms/step - loss: 81.2981 - val_loss: 65.7497\n", - "Epoch 34/50\n", - "39/39 [==============================] - 0s 2ms/step - loss: 79.8582 - val_loss: 65.4873\n", - "Epoch 35/50\n", - "39/39 [==============================] - 0s 2ms/step - loss: 78.4644 - val_loss: 64.4355\n", - "Epoch 36/50\n", - "39/39 [==============================] - 0s 2ms/step - loss: 77.4534 - val_loss: 65.0040\n", - "Epoch 37/50\n", - "39/39 [==============================] - 0s 2ms/step - loss: 76.9951 - val_loss: 65.3200\n", - "Epoch 38/50\n", - "39/39 [==============================] - 0s 2ms/step - loss: 76.4038 - val_loss: 64.2204\n", - "Epoch 39/50\n", - "39/39 [==============================] - 0s 2ms/step - loss: 75.8992 - val_loss: 64.0133\n", - "Epoch 40/50\n", - "39/39 [==============================] - 0s 2ms/step - loss: 75.4885 - val_loss: 64.4360\n", - "Epoch 41/50\n", - "39/39 [==============================] - 0s 2ms/step - loss: 75.2467 - val_loss: 64.6135\n", - "Epoch 42/50\n", - "39/39 [==============================] - 0s 2ms/step - loss: 74.6445 - val_loss: 64.3743\n", - "Epoch 43/50\n", - "39/39 [==============================] - 0s 2ms/step - loss: 74.2044 - val_loss: 63.9837\n", - "Epoch 44/50\n", - "39/39 [==============================] - 0s 2ms/step - loss: 73.8331 - val_loss: 64.3629\n", - "Epoch 45/50\n", - "39/39 [==============================] - 0s 2ms/step - loss: 73.4110 - val_loss: 63.6357\n", - "Epoch 46/50\n", - "39/39 [==============================] - 0s 2ms/step - loss: 72.9355 - val_loss: 63.7812\n", - "Epoch 47/50\n", - "39/39 [==============================] - 0s 2ms/step - loss: 72.2754 - val_loss: 63.3691\n", - "Epoch 48/50\n", - "39/39 [==============================] - 0s 2ms/step - loss: 71.8866 - val_loss: 64.9375\n", - "Epoch 49/50\n", - "39/39 [==============================] - 0s 2ms/step - loss: 71.0808 - val_loss: 63.7018\n", - "Epoch 50/50\n", - "39/39 [==============================] - 0s 2ms/step - loss: 70.5971 - val_loss: 62.9802\n" + " 1/39 [..............................] - ETA: 23s - loss: 131.9053" ] }, { - "data": { - "text/plain": [ - "" - ] - }, - "execution_count": 21, - "metadata": {}, - "output_type": "execute_result" + "ename": "ValueError", + "evalue": "in user code:\n\n File \"d:\\Anoconda\\envs\\py38\\lib\\site-packages\\keras\\src\\engine\\training.py\", line 1972, in test_function *\n return step_function(self, iterator)\n File \"d:\\Anoconda\\envs\\py38\\lib\\site-packages\\keras\\src\\engine\\training.py\", line 1956, in step_function **\n outputs = model.distribute_strategy.run(run_step, args=(data,))\n File \"d:\\Anoconda\\envs\\py38\\lib\\site-packages\\keras\\src\\engine\\training.py\", line 1944, in run_step **\n outputs = model.test_step(data)\n File \"d:\\Anoconda\\envs\\py38\\lib\\site-packages\\keras\\src\\engine\\training.py\", line 1850, in test_step\n y_pred = self(x, training=False)\n File \"d:\\Anoconda\\envs\\py38\\lib\\site-packages\\keras\\src\\utils\\traceback_utils.py\", line 70, in error_handler\n raise e.with_traceback(filtered_tb) from None\n File \"d:\\Anoconda\\envs\\py38\\lib\\site-packages\\keras\\src\\engine\\input_spec.py\", line 219, in assert_input_compatibility\n raise ValueError(\n\n ValueError: Layer \"model_6\" expects 2 input(s), but it received 1 input tensors. Inputs received: []\n", + "output_type": "error", + "traceback": [ + "\u001b[1;31m---------------------------------------------------------------------------\u001b[0m", + "\u001b[1;31mValueError\u001b[0m Traceback (most recent call last)", + "Cell \u001b[1;32mIn[47], line 2\u001b[0m\n\u001b[0;32m 1\u001b[0m model\u001b[38;5;241m.\u001b[39mcompile(optimizer\u001b[38;5;241m=\u001b[39m\u001b[38;5;124m'\u001b[39m\u001b[38;5;124madam\u001b[39m\u001b[38;5;124m'\u001b[39m, loss\u001b[38;5;241m=\u001b[39m\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mmse\u001b[39m\u001b[38;5;124m'\u001b[39m)\n\u001b[1;32m----> 2\u001b[0m \u001b[43mmodel\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mfit\u001b[49m\u001b[43m(\u001b[49m\u001b[43m[\u001b[49m\u001b[43mX_train\u001b[49m\u001b[43m,\u001b[49m\u001b[43mbikeLane_matrix_board\u001b[49m\u001b[43m]\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43my_train\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mepochs\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;241;43m50\u001b[39;49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mbatch_size\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;241;43m32\u001b[39;49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mvalidation_data\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43m(\u001b[49m\u001b[43m[\u001b[49m\u001b[43mX_test\u001b[49m\u001b[43m,\u001b[49m\u001b[43mbikeLane_matrix_board\u001b[49m\u001b[43m]\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43my_test\u001b[49m\u001b[43m)\u001b[49m\u001b[43m)\u001b[49m\n", + "File \u001b[1;32md:\\Anoconda\\envs\\py38\\lib\\site-packages\\keras\\src\\utils\\traceback_utils.py:70\u001b[0m, in \u001b[0;36mfilter_traceback..error_handler\u001b[1;34m(*args, **kwargs)\u001b[0m\n\u001b[0;32m 67\u001b[0m filtered_tb \u001b[38;5;241m=\u001b[39m _process_traceback_frames(e\u001b[38;5;241m.\u001b[39m__traceback__)\n\u001b[0;32m 68\u001b[0m \u001b[38;5;66;03m# To get the full stack trace, call:\u001b[39;00m\n\u001b[0;32m 69\u001b[0m \u001b[38;5;66;03m# `tf.debugging.disable_traceback_filtering()`\u001b[39;00m\n\u001b[1;32m---> 70\u001b[0m \u001b[38;5;28;01mraise\u001b[39;00m e\u001b[38;5;241m.\u001b[39mwith_traceback(filtered_tb) \u001b[38;5;28;01mfrom\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m\n\u001b[0;32m 71\u001b[0m \u001b[38;5;28;01mfinally\u001b[39;00m:\n\u001b[0;32m 72\u001b[0m \u001b[38;5;28;01mdel\u001b[39;00m filtered_tb\n", + "File \u001b[1;32m~\\AppData\\Local\\Temp\\__autograph_generated_file8nzlr_ef.py:15\u001b[0m, in \u001b[0;36mouter_factory..inner_factory..tf__test_function\u001b[1;34m(iterator)\u001b[0m\n\u001b[0;32m 13\u001b[0m \u001b[38;5;28;01mtry\u001b[39;00m:\n\u001b[0;32m 14\u001b[0m do_return \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;01mTrue\u001b[39;00m\n\u001b[1;32m---> 15\u001b[0m retval_ \u001b[38;5;241m=\u001b[39m ag__\u001b[38;5;241m.\u001b[39mconverted_call(ag__\u001b[38;5;241m.\u001b[39mld(step_function), (ag__\u001b[38;5;241m.\u001b[39mld(\u001b[38;5;28mself\u001b[39m), ag__\u001b[38;5;241m.\u001b[39mld(iterator)), \u001b[38;5;28;01mNone\u001b[39;00m, fscope)\n\u001b[0;32m 16\u001b[0m \u001b[38;5;28;01mexcept\u001b[39;00m:\n\u001b[0;32m 17\u001b[0m do_return \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;01mFalse\u001b[39;00m\n", + "\u001b[1;31mValueError\u001b[0m: in user code:\n\n File \"d:\\Anoconda\\envs\\py38\\lib\\site-packages\\keras\\src\\engine\\training.py\", line 1972, in test_function *\n return step_function(self, iterator)\n File \"d:\\Anoconda\\envs\\py38\\lib\\site-packages\\keras\\src\\engine\\training.py\", line 1956, in step_function **\n outputs = model.distribute_strategy.run(run_step, args=(data,))\n File \"d:\\Anoconda\\envs\\py38\\lib\\site-packages\\keras\\src\\engine\\training.py\", line 1944, in run_step **\n outputs = model.test_step(data)\n File \"d:\\Anoconda\\envs\\py38\\lib\\site-packages\\keras\\src\\engine\\training.py\", line 1850, in test_step\n y_pred = self(x, training=False)\n File \"d:\\Anoconda\\envs\\py38\\lib\\site-packages\\keras\\src\\utils\\traceback_utils.py\", line 70, in error_handler\n raise e.with_traceback(filtered_tb) from None\n File \"d:\\Anoconda\\envs\\py38\\lib\\site-packages\\keras\\src\\engine\\input_spec.py\", line 219, in assert_input_compatibility\n raise ValueError(\n\n ValueError: Layer \"model_6\" expects 2 input(s), but it received 1 input tensors. Inputs received: []\n" + ] } ], "source": [ "model.compile(optimizer='adam', loss='mse')\n", - "model.fit(X_train, y_train, epochs=50, batch_size=32, validation_data=(X_test, y_test))" + "model.fit([X_train,bikeLane_matrix_board], y_train, epochs=50, batch_size=32, validation_data=([X_test,bikeLane_matrix_board], y_test))" ] }, { "cell_type": "code", - "execution_count": 22, + "execution_count": 38, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "8/8 [==============================] - 0s 1000us/step - loss: 62.9802\n", - "Root Mean Squared Error: 7.936009544951329\n" + "8/8 [==============================] - 0s 714us/step - loss: 50.3341\n", + "Root Mean Squared Error: 7.094656058773051\n" ] } ], @@ -271,7 +474,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.10.13" + "version": "3.8.18" } }, "nbformat": 4, diff --git a/model_v2.ipynb b/model_v2.ipynb new file mode 100644 index 0000000..6c61c70 --- /dev/null +++ b/model_v2.ipynb @@ -0,0 +1,533 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [], + "source": [ + "import h5py\n", + "import numpy as np\n", + "from datetime import datetime\n" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [], + "source": [ + "with h5py.File('./data/TrainingData.h5', 'r') as f:\n", + " # Access the trip dataset and their corresponding timestamps\n", + " traffic_data = f['trip'][()]\n", + " dates = f['timeslot'][()]" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [], + "source": [ + "formatted_dates = []\n", + "\n", + "for date_string in dates:\n", + " formatted_date = datetime.strptime(date_string.decode(), '%Y%m%d%H%M')\n", + "\n", + " year = formatted_date.year\n", + " month = formatted_date.month\n", + " day = formatted_date.day\n", + " hour = formatted_date.hour\n", + " minute = formatted_date.minute\n", + "\n", + " formatted_dates.append(np.array([year, month, day, hour, minute]))\n", + "\n", + "formatted_dates = np.array(formatted_dates).reshape(1488, 5, 1)" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [], + "source": [ + "test_size = 240\n", + "\n", + "train_traffic_data = traffic_data[:-test_size]\n", + "test_traffic_data = traffic_data[-test_size:]\n", + "\n", + "train_formatted_dates = formatted_dates[:-test_size]\n", + "test_formatted_dates = formatted_dates[-test_size:]" + ] + }, + { + "cell_type": "code", + "execution_count": 46, + "metadata": {}, + "outputs": [], + "source": [ + "X_train, X_test = train_formatted_dates, test_formatted_dates\n", + "y_train, y_test = train_traffic_data, test_traffic_data" + ] + }, + { + "cell_type": "code", + "execution_count": 47, + "metadata": {}, + "outputs": [], + "source": [ + "import pandas as pd\n", + "import numpy as np\n", + "\n" + ] + }, + { + "cell_type": "code", + "execution_count": 48, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
Join_CountTARGET_FIDBlockIDBikeLane_milesAADTSpeedLimitAvgSpeedPop2019Pop_DensityShape_LengthShape_AreaStationNum
0011NaN32638.666667NaNNaN0.00.0000007840.4902883.787844e+060
1022NaNNaNNaNNaN0.00.0000007840.6864483.787843e+060
23330.80705521234.74193525.015.01049.00.0295947840.8829703.787843e+063
33442.0962215915.12500025.019.01816.00.0302527841.0804773.787844e+063
43550.98432023940.078947NaNNaN1892.00.0226477841.2773273.787843e+063
.......................................
12331241241.9557079050.487805NaNNaN1986.00.0460457840.2809373.787843e+063
12431251251.4404499121.500000NaNNaN1198.00.0397267840.0850723.787843e+063
12521261260.9857048770.901961NaNNaN555.00.0151257839.8905183.787843e+062
12641271270.22859312266.08571425.016.0814.00.0311257839.6966213.787844e+064
12741281281.61994011077.03703725.016.01385.00.0596717839.5019803.787843e+064
\n", + "

128 rows × 12 columns

\n", + "
" + ], + "text/plain": [ + " Join_Count TARGET_FID BlockID BikeLane_miles AADT \\\n", + "0 0 1 1 NaN 32638.666667 \n", + "1 0 2 2 NaN NaN \n", + "2 3 3 3 0.807055 21234.741935 \n", + "3 3 4 4 2.096221 5915.125000 \n", + "4 3 5 5 0.984320 23940.078947 \n", + ".. ... ... ... ... ... \n", + "123 3 124 124 1.955707 9050.487805 \n", + "124 3 125 125 1.440449 9121.500000 \n", + "125 2 126 126 0.985704 8770.901961 \n", + "126 4 127 127 0.228593 12266.085714 \n", + "127 4 128 128 1.619940 11077.037037 \n", + "\n", + " SpeedLimit AvgSpeed Pop2019 Pop_Density Shape_Length Shape_Area \\\n", + "0 NaN NaN 0.0 0.000000 7840.490288 3.787844e+06 \n", + "1 NaN NaN 0.0 0.000000 7840.686448 3.787843e+06 \n", + "2 25.0 15.0 1049.0 0.029594 7840.882970 3.787843e+06 \n", + "3 25.0 19.0 1816.0 0.030252 7841.080477 3.787844e+06 \n", + "4 NaN NaN 1892.0 0.022647 7841.277327 3.787843e+06 \n", + ".. ... ... ... ... ... ... \n", + "123 NaN NaN 1986.0 0.046045 7840.280937 3.787843e+06 \n", + "124 NaN NaN 1198.0 0.039726 7840.085072 3.787843e+06 \n", + "125 NaN NaN 555.0 0.015125 7839.890518 3.787843e+06 \n", + "126 25.0 16.0 814.0 0.031125 7839.696621 3.787844e+06 \n", + "127 25.0 16.0 1385.0 0.059671 7839.501980 3.787843e+06 \n", + "\n", + " StationNum \n", + "0 0 \n", + "1 0 \n", + "2 3 \n", + "3 3 \n", + "4 3 \n", + ".. ... \n", + "123 3 \n", + "124 3 \n", + "125 2 \n", + "126 4 \n", + "127 4 \n", + "\n", + "[128 rows x 12 columns]" + ] + }, + "execution_count": 48, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "spatio_data_file = \"./data/SpatialFeatures.csv\"\n", + "raw_spatio_feature = pd.read_csv(spatio_data_file)\n", + "raw_spatio_feature" + ] + }, + { + "cell_type": "code", + "execution_count": 49, + "metadata": {}, + "outputs": [], + "source": [ + "bikeLane_matrix = raw_spatio_feature[\"BikeLane_miles\"]\n", + "bikeLane_matrix = bikeLane_matrix.fillna(0).to_numpy()\n", + "bikeLane_matrix = bikeLane_matrix/bikeLane_matrix.max()\n", + "bikeLane_matrix_board = bikeLane_matrix[np.newaxis,:] * np.ones((1248,1))" + ] + }, + { + "cell_type": "code", + "execution_count": 60, + "metadata": {}, + "outputs": [ + { + "ename": "ValueError", + "evalue": "Graph disconnected: cannot obtain value for tensor KerasTensor(type_spec=TensorSpec(shape=(None, 128), dtype=tf.float32, name='input_31'), name='input_31', description=\"created by layer 'input_31'\") at layer \"concatenate_16\". The following previous layers were accessed without issue: ['lstm_25', 'dense_23']", + "output_type": "error", + "traceback": [ + "\u001b[1;31m---------------------------------------------------------------------------\u001b[0m", + "\u001b[1;31mValueError\u001b[0m Traceback (most recent call last)", + "Cell \u001b[1;32mIn[60], line 24\u001b[0m\n\u001b[0;32m 20\u001b[0m x \u001b[38;5;241m=\u001b[39m layers\u001b[38;5;241m.\u001b[39mDense(\u001b[38;5;241m2\u001b[39m\u001b[38;5;241m*\u001b[39m\u001b[38;5;241m16\u001b[39m\u001b[38;5;241m*\u001b[39m\u001b[38;5;241m8\u001b[39m,activation\u001b[38;5;241m=\u001b[39m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mrelu\u001b[39m\u001b[38;5;124m\"\u001b[39m) (x)\n\u001b[0;32m 22\u001b[0m output \u001b[38;5;241m=\u001b[39m layers\u001b[38;5;241m.\u001b[39mReshape((\u001b[38;5;241m2\u001b[39m,\u001b[38;5;241m16\u001b[39m,\u001b[38;5;241m8\u001b[39m))(x)\n\u001b[1;32m---> 24\u001b[0m model \u001b[38;5;241m=\u001b[39m \u001b[43mmodels\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mModel\u001b[49m\u001b[43m(\u001b[49m\u001b[43m[\u001b[49m\u001b[43mleft_inputs\u001b[49m\u001b[43m]\u001b[49m\u001b[43m,\u001b[49m\u001b[43moutputs\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43m \u001b[49m\u001b[43moutput\u001b[49m\u001b[43m)\u001b[49m\n", + "File \u001b[1;32md:\\Anoconda\\envs\\py38\\lib\\site-packages\\tensorflow\\python\\trackable\\base.py:204\u001b[0m, in \u001b[0;36mno_automatic_dependency_tracking.._method_wrapper\u001b[1;34m(self, *args, **kwargs)\u001b[0m\n\u001b[0;32m 202\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_self_setattr_tracking \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;01mFalse\u001b[39;00m \u001b[38;5;66;03m# pylint: disable=protected-access\u001b[39;00m\n\u001b[0;32m 203\u001b[0m \u001b[38;5;28;01mtry\u001b[39;00m:\n\u001b[1;32m--> 204\u001b[0m result \u001b[38;5;241m=\u001b[39m \u001b[43mmethod\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43margs\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43mkwargs\u001b[49m\u001b[43m)\u001b[49m\n\u001b[0;32m 205\u001b[0m \u001b[38;5;28;01mfinally\u001b[39;00m:\n\u001b[0;32m 206\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_self_setattr_tracking \u001b[38;5;241m=\u001b[39m previous_value \u001b[38;5;66;03m# pylint: disable=protected-access\u001b[39;00m\n", + "File \u001b[1;32md:\\Anoconda\\envs\\py38\\lib\\site-packages\\keras\\src\\engine\\functional.py:167\u001b[0m, in \u001b[0;36mFunctional.__init__\u001b[1;34m(self, inputs, outputs, name, trainable, **kwargs)\u001b[0m\n\u001b[0;32m 158\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m \u001b[38;5;28mall\u001b[39m(\n\u001b[0;32m 159\u001b[0m [\n\u001b[0;32m 160\u001b[0m functional_utils\u001b[38;5;241m.\u001b[39mis_input_keras_tensor(t)\n\u001b[0;32m 161\u001b[0m \u001b[38;5;28;01mfor\u001b[39;00m t \u001b[38;5;129;01min\u001b[39;00m tf\u001b[38;5;241m.\u001b[39mnest\u001b[38;5;241m.\u001b[39mflatten(inputs)\n\u001b[0;32m 162\u001b[0m ]\n\u001b[0;32m 163\u001b[0m ):\n\u001b[0;32m 164\u001b[0m inputs, outputs \u001b[38;5;241m=\u001b[39m functional_utils\u001b[38;5;241m.\u001b[39mclone_graph_nodes(\n\u001b[0;32m 165\u001b[0m inputs, outputs\n\u001b[0;32m 166\u001b[0m )\n\u001b[1;32m--> 167\u001b[0m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_init_graph_network\u001b[49m\u001b[43m(\u001b[49m\u001b[43minputs\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43moutputs\u001b[49m\u001b[43m)\u001b[49m\n", + "File \u001b[1;32md:\\Anoconda\\envs\\py38\\lib\\site-packages\\tensorflow\\python\\trackable\\base.py:204\u001b[0m, in \u001b[0;36mno_automatic_dependency_tracking.._method_wrapper\u001b[1;34m(self, *args, **kwargs)\u001b[0m\n\u001b[0;32m 202\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_self_setattr_tracking \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;01mFalse\u001b[39;00m \u001b[38;5;66;03m# pylint: disable=protected-access\u001b[39;00m\n\u001b[0;32m 203\u001b[0m \u001b[38;5;28;01mtry\u001b[39;00m:\n\u001b[1;32m--> 204\u001b[0m result \u001b[38;5;241m=\u001b[39m \u001b[43mmethod\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43margs\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43mkwargs\u001b[49m\u001b[43m)\u001b[49m\n\u001b[0;32m 205\u001b[0m \u001b[38;5;28;01mfinally\u001b[39;00m:\n\u001b[0;32m 206\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_self_setattr_tracking \u001b[38;5;241m=\u001b[39m previous_value \u001b[38;5;66;03m# pylint: disable=protected-access\u001b[39;00m\n", + "File \u001b[1;32md:\\Anoconda\\envs\\py38\\lib\\site-packages\\keras\\src\\engine\\functional.py:266\u001b[0m, in \u001b[0;36mFunctional._init_graph_network\u001b[1;34m(self, inputs, outputs)\u001b[0m\n\u001b[0;32m 263\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_input_coordinates\u001b[38;5;241m.\u001b[39mappend((layer, node_index, tensor_index))\n\u001b[0;32m 265\u001b[0m \u001b[38;5;66;03m# Keep track of the network's nodes and layers.\u001b[39;00m\n\u001b[1;32m--> 266\u001b[0m nodes, nodes_by_depth, layers, _ \u001b[38;5;241m=\u001b[39m \u001b[43m_map_graph_network\u001b[49m\u001b[43m(\u001b[49m\n\u001b[0;32m 267\u001b[0m \u001b[43m \u001b[49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43minputs\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43moutputs\u001b[49m\n\u001b[0;32m 268\u001b[0m \u001b[43m\u001b[49m\u001b[43m)\u001b[49m\n\u001b[0;32m 269\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_network_nodes \u001b[38;5;241m=\u001b[39m nodes\n\u001b[0;32m 270\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_nodes_by_depth \u001b[38;5;241m=\u001b[39m nodes_by_depth\n", + "File \u001b[1;32md:\\Anoconda\\envs\\py38\\lib\\site-packages\\keras\\src\\engine\\functional.py:1142\u001b[0m, in \u001b[0;36m_map_graph_network\u001b[1;34m(inputs, outputs)\u001b[0m\n\u001b[0;32m 1140\u001b[0m \u001b[38;5;28;01mfor\u001b[39;00m x \u001b[38;5;129;01min\u001b[39;00m tf\u001b[38;5;241m.\u001b[39mnest\u001b[38;5;241m.\u001b[39mflatten(node\u001b[38;5;241m.\u001b[39mkeras_inputs):\n\u001b[0;32m 1141\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;28mid\u001b[39m(x) \u001b[38;5;129;01mnot\u001b[39;00m \u001b[38;5;129;01min\u001b[39;00m computable_tensors:\n\u001b[1;32m-> 1142\u001b[0m \u001b[38;5;28;01mraise\u001b[39;00m \u001b[38;5;167;01mValueError\u001b[39;00m(\n\u001b[0;32m 1143\u001b[0m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mGraph disconnected: cannot obtain value for \u001b[39m\u001b[38;5;124m\"\u001b[39m\n\u001b[0;32m 1144\u001b[0m \u001b[38;5;124mf\u001b[39m\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mtensor \u001b[39m\u001b[38;5;132;01m{\u001b[39;00mx\u001b[38;5;132;01m}\u001b[39;00m\u001b[38;5;124m at layer \u001b[39m\u001b[38;5;124m\"\u001b[39m\u001b[38;5;132;01m{\u001b[39;00mlayer\u001b[38;5;241m.\u001b[39mname\u001b[38;5;132;01m}\u001b[39;00m\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124m. \u001b[39m\u001b[38;5;124m'\u001b[39m\n\u001b[0;32m 1145\u001b[0m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mThe following previous layers were accessed \u001b[39m\u001b[38;5;124m\"\u001b[39m\n\u001b[0;32m 1146\u001b[0m \u001b[38;5;124mf\u001b[39m\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mwithout issue: \u001b[39m\u001b[38;5;132;01m{\u001b[39;00mlayers_with_complete_input\u001b[38;5;132;01m}\u001b[39;00m\u001b[38;5;124m\"\u001b[39m\n\u001b[0;32m 1147\u001b[0m )\n\u001b[0;32m 1148\u001b[0m \u001b[38;5;28;01mfor\u001b[39;00m x \u001b[38;5;129;01min\u001b[39;00m tf\u001b[38;5;241m.\u001b[39mnest\u001b[38;5;241m.\u001b[39mflatten(node\u001b[38;5;241m.\u001b[39moutputs):\n\u001b[0;32m 1149\u001b[0m computable_tensors\u001b[38;5;241m.\u001b[39madd(\u001b[38;5;28mid\u001b[39m(x))\n", + "\u001b[1;31mValueError\u001b[0m: Graph disconnected: cannot obtain value for tensor KerasTensor(type_spec=TensorSpec(shape=(None, 128), dtype=tf.float32, name='input_31'), name='input_31', description=\"created by layer 'input_31'\") at layer \"concatenate_16\". The following previous layers were accessed without issue: ['lstm_25', 'dense_23']" + ] + } + ], + "source": [ + "import keras\n", + "from keras import layers\n", + "from keras import models\n", + "\n", + "spatio_feature = None\n", + "\n", + "input_shape = (5,1)\n", + "\n", + "left_inputs = layers.Input(shape = (input_shape))\n", + "\n", + "right_inputs = layers.Input(shape = (128))\n", + "\n", + "x = layers.LSTM(128, activation = \"tanh\")(left_inputs)\n", + "\n", + "x = layers.Dense(2*16*8, activation = \"linear\")(x)\n", + "\n", + "\n", + "x = layers.concatenate([x,right_inputs])\n", + "\n", + "x = layers.Dense(2*16*8,activation= \"relu\") (x)\n", + "\n", + "output = layers.Reshape((2,16,8))(x)\n", + "\n", + "model = models.Model([left_inputs],outputs = output)\n", + "\n", + "\n", + "\n" + ] + }, + { + "cell_type": "code", + "execution_count": 56, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Model: \"model_7\"\n", + "_________________________________________________________________\n", + " Layer (type) Output Shape Param # \n", + "=================================================================\n", + " input_24 (InputLayer) [(None, 5, 1)] 0 \n", + " \n", + " lstm_22 (LSTM) (None, 128) 66560 \n", + " \n", + " dense_17 (Dense) (None, 256) 33024 \n", + " \n", + " concatenate_13 (Concatenat (2, 384) 0 \n", + " e) \n", + " \n", + " dense_18 (Dense) (2, 256) 98560 \n", + " \n", + " reshape_8 (Reshape) (2, 2, 16, 8) 0 \n", + " \n", + "=================================================================\n", + "Total params: 198144 (774.00 KB)\n", + "Trainable params: 198144 (774.00 KB)\n", + "Non-trainable params: 0 (0.00 Byte)\n", + "_________________________________________________________________\n" + ] + } + ], + "source": [ + "model.summary()" + ] + }, + { + "cell_type": "code", + "execution_count": 55, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 1/50\n" + ] + }, + { + "ename": "ValueError", + "evalue": "in user code:\n\n File \"d:\\Anoconda\\envs\\py38\\lib\\site-packages\\keras\\src\\engine\\training.py\", line 1338, in train_function *\n return step_function(self, iterator)\n File \"d:\\Anoconda\\envs\\py38\\lib\\site-packages\\keras\\src\\engine\\training.py\", line 1322, in step_function **\n outputs = model.distribute_strategy.run(run_step, args=(data,))\n File \"d:\\Anoconda\\envs\\py38\\lib\\site-packages\\keras\\src\\engine\\training.py\", line 1303, in run_step **\n outputs = model.train_step(data)\n File \"d:\\Anoconda\\envs\\py38\\lib\\site-packages\\keras\\src\\engine\\training.py\", line 1080, in train_step\n y_pred = self(x, training=True)\n File \"d:\\Anoconda\\envs\\py38\\lib\\site-packages\\keras\\src\\utils\\traceback_utils.py\", line 70, in error_handler\n raise e.with_traceback(filtered_tb) from None\n File \"d:\\Anoconda\\envs\\py38\\lib\\site-packages\\keras\\src\\backend.py\", line 3582, in concatenate\n return tf.concat([to_dense(x) for x in tensors], axis)\n\n ValueError: Exception encountered when calling layer 'concatenate_13' (type Concatenate).\n \n Dimension 0 in both shapes must be equal, but are 32 and 2. Shapes are [32] and [2]. for '{{node model_7/concatenate_13/concat}} = ConcatV2[N=2, T=DT_FLOAT, Tidx=DT_INT32](model_7/dense_17/BiasAdd, model_7/concatenate_13/Cast, model_7/concatenate_13/concat/axis)' with input shapes: [32,256], [2,128], [] and with computed input tensors: input[2] = <1>.\n \n Call arguments received by layer 'concatenate_13' (type Concatenate):\n • inputs=['tf.Tensor(shape=(32, 256), dtype=float32)', 'tf.Tensor(shape=(2, 128), dtype=float32)']\n", + "output_type": "error", + "traceback": [ + "\u001b[1;31m---------------------------------------------------------------------------\u001b[0m", + "\u001b[1;31mValueError\u001b[0m Traceback (most recent call last)", + "Cell \u001b[1;32mIn[55], line 2\u001b[0m\n\u001b[0;32m 1\u001b[0m model\u001b[38;5;241m.\u001b[39mcompile(optimizer\u001b[38;5;241m=\u001b[39m\u001b[38;5;124m'\u001b[39m\u001b[38;5;124madam\u001b[39m\u001b[38;5;124m'\u001b[39m, loss\u001b[38;5;241m=\u001b[39m\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mmse\u001b[39m\u001b[38;5;124m'\u001b[39m)\n\u001b[1;32m----> 2\u001b[0m \u001b[43mmodel\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mfit\u001b[49m\u001b[43m(\u001b[49m\u001b[43m[\u001b[49m\u001b[43mX_train\u001b[49m\u001b[43m]\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43my_train\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mepochs\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;241;43m50\u001b[39;49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mbatch_size\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;241;43m32\u001b[39;49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mvalidation_data\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43m(\u001b[49m\u001b[43m[\u001b[49m\u001b[43mX_test\u001b[49m\u001b[43m]\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43my_test\u001b[49m\u001b[43m)\u001b[49m\u001b[43m)\u001b[49m\n", + "File \u001b[1;32md:\\Anoconda\\envs\\py38\\lib\\site-packages\\keras\\src\\utils\\traceback_utils.py:70\u001b[0m, in \u001b[0;36mfilter_traceback..error_handler\u001b[1;34m(*args, **kwargs)\u001b[0m\n\u001b[0;32m 67\u001b[0m filtered_tb \u001b[38;5;241m=\u001b[39m _process_traceback_frames(e\u001b[38;5;241m.\u001b[39m__traceback__)\n\u001b[0;32m 68\u001b[0m \u001b[38;5;66;03m# To get the full stack trace, call:\u001b[39;00m\n\u001b[0;32m 69\u001b[0m \u001b[38;5;66;03m# `tf.debugging.disable_traceback_filtering()`\u001b[39;00m\n\u001b[1;32m---> 70\u001b[0m \u001b[38;5;28;01mraise\u001b[39;00m e\u001b[38;5;241m.\u001b[39mwith_traceback(filtered_tb) \u001b[38;5;28;01mfrom\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m\n\u001b[0;32m 71\u001b[0m \u001b[38;5;28;01mfinally\u001b[39;00m:\n\u001b[0;32m 72\u001b[0m \u001b[38;5;28;01mdel\u001b[39;00m filtered_tb\n", + "File \u001b[1;32m~\\AppData\\Local\\Temp\\__autograph_generated_fileootg_h1c.py:15\u001b[0m, in \u001b[0;36mouter_factory..inner_factory..tf__train_function\u001b[1;34m(iterator)\u001b[0m\n\u001b[0;32m 13\u001b[0m \u001b[38;5;28;01mtry\u001b[39;00m:\n\u001b[0;32m 14\u001b[0m do_return \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;01mTrue\u001b[39;00m\n\u001b[1;32m---> 15\u001b[0m retval_ \u001b[38;5;241m=\u001b[39m ag__\u001b[38;5;241m.\u001b[39mconverted_call(ag__\u001b[38;5;241m.\u001b[39mld(step_function), (ag__\u001b[38;5;241m.\u001b[39mld(\u001b[38;5;28mself\u001b[39m), ag__\u001b[38;5;241m.\u001b[39mld(iterator)), \u001b[38;5;28;01mNone\u001b[39;00m, fscope)\n\u001b[0;32m 16\u001b[0m \u001b[38;5;28;01mexcept\u001b[39;00m:\n\u001b[0;32m 17\u001b[0m do_return \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;01mFalse\u001b[39;00m\n", + "\u001b[1;31mValueError\u001b[0m: in user code:\n\n File \"d:\\Anoconda\\envs\\py38\\lib\\site-packages\\keras\\src\\engine\\training.py\", line 1338, in train_function *\n return step_function(self, iterator)\n File \"d:\\Anoconda\\envs\\py38\\lib\\site-packages\\keras\\src\\engine\\training.py\", line 1322, in step_function **\n outputs = model.distribute_strategy.run(run_step, args=(data,))\n File \"d:\\Anoconda\\envs\\py38\\lib\\site-packages\\keras\\src\\engine\\training.py\", line 1303, in run_step **\n outputs = model.train_step(data)\n File \"d:\\Anoconda\\envs\\py38\\lib\\site-packages\\keras\\src\\engine\\training.py\", line 1080, in train_step\n y_pred = self(x, training=True)\n File \"d:\\Anoconda\\envs\\py38\\lib\\site-packages\\keras\\src\\utils\\traceback_utils.py\", line 70, in error_handler\n raise e.with_traceback(filtered_tb) from None\n File \"d:\\Anoconda\\envs\\py38\\lib\\site-packages\\keras\\src\\backend.py\", line 3582, in concatenate\n return tf.concat([to_dense(x) for x in tensors], axis)\n\n ValueError: Exception encountered when calling layer 'concatenate_13' (type Concatenate).\n \n Dimension 0 in both shapes must be equal, but are 32 and 2. Shapes are [32] and [2]. for '{{node model_7/concatenate_13/concat}} = ConcatV2[N=2, T=DT_FLOAT, Tidx=DT_INT32](model_7/dense_17/BiasAdd, model_7/concatenate_13/Cast, model_7/concatenate_13/concat/axis)' with input shapes: [32,256], [2,128], [] and with computed input tensors: input[2] = <1>.\n \n Call arguments received by layer 'concatenate_13' (type Concatenate):\n • inputs=['tf.Tensor(shape=(32, 256), dtype=float32)', 'tf.Tensor(shape=(2, 128), dtype=float32)']\n" + ] + } + ], + "source": [ + "model.compile(optimizer='adam', loss='mse')\n", + "model.fit([X_train], y_train, epochs=50, batch_size=32, validation_data=([X_test], y_test))" + ] + }, + { + "cell_type": "code", + "execution_count": 39, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "8/8 [==============================] - 0s 1ms/step - loss: 56.9645\n", + "Root Mean Squared Error: 7.5474830524649805\n" + ] + } + ], + "source": [ + "mse = model.evaluate(X_test, y_test)\n", + "\n", + "# Show rmse to see how model performs on the test set\n", + "rmse = np.sqrt(mse)\n", + "print(f'Root Mean Squared Error: {rmse}')" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "py38", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.8.18" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/model_v3_yshape.ipynb b/model_v3_yshape.ipynb new file mode 100644 index 0000000..e901e48 --- /dev/null +++ b/model_v3_yshape.ipynb @@ -0,0 +1,628 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [], + "source": [ + "import h5py\n", + "import numpy as np\n", + "from datetime import datetime\n" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [], + "source": [ + "with h5py.File('./data/TrainingData.h5', 'r') as f:\n", + " # Access the trip dataset and their corresponding timestamps\n", + " traffic_data = f['trip'][()]\n", + " dates = f['timeslot'][()]" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [], + "source": [ + "formatted_dates = []\n", + "\n", + "for date_string in dates:\n", + " formatted_date = datetime.strptime(date_string.decode(), '%Y%m%d%H%M')\n", + "\n", + " year = formatted_date.year\n", + " month = formatted_date.month\n", + " day = formatted_date.day\n", + " hour = formatted_date.hour\n", + " minute = formatted_date.minute\n", + "\n", + " formatted_dates.append(np.array([year, month, day, hour, minute]))\n", + "\n", + "formatted_dates = np.array(formatted_dates).reshape(1488, 5, 1)" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [], + "source": [ + "test_size = 240\n", + "\n", + "train_traffic_data = traffic_data[:-test_size]\n", + "test_traffic_data = traffic_data[-test_size:]\n", + "\n", + "train_formatted_dates = formatted_dates[:-test_size]\n", + "test_formatted_dates = formatted_dates[-test_size:]" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [], + "source": [ + "X_train, X_test = train_formatted_dates, test_formatted_dates\n", + "y_train, y_test = train_traffic_data, test_traffic_data" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": {}, + "outputs": [], + "source": [ + "import pandas as pd\n", + "import numpy as np\n", + "\n" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
Join_CountTARGET_FIDBlockIDBikeLane_milesAADTSpeedLimitAvgSpeedPop2019Pop_DensityShape_LengthShape_AreaStationNum
0011NaN32638.666667NaNNaN0.00.0000007840.4902883.787844e+060
1022NaNNaNNaNNaN0.00.0000007840.6864483.787843e+060
23330.80705521234.74193525.015.01049.00.0295947840.8829703.787843e+063
33442.0962215915.12500025.019.01816.00.0302527841.0804773.787844e+063
43550.98432023940.078947NaNNaN1892.00.0226477841.2773273.787843e+063
.......................................
12331241241.9557079050.487805NaNNaN1986.00.0460457840.2809373.787843e+063
12431251251.4404499121.500000NaNNaN1198.00.0397267840.0850723.787843e+063
12521261260.9857048770.901961NaNNaN555.00.0151257839.8905183.787843e+062
12641271270.22859312266.08571425.016.0814.00.0311257839.6966213.787844e+064
12741281281.61994011077.03703725.016.01385.00.0596717839.5019803.787843e+064
\n", + "

128 rows × 12 columns

\n", + "
" + ], + "text/plain": [ + " Join_Count TARGET_FID BlockID BikeLane_miles AADT \\\n", + "0 0 1 1 NaN 32638.666667 \n", + "1 0 2 2 NaN NaN \n", + "2 3 3 3 0.807055 21234.741935 \n", + "3 3 4 4 2.096221 5915.125000 \n", + "4 3 5 5 0.984320 23940.078947 \n", + ".. ... ... ... ... ... \n", + "123 3 124 124 1.955707 9050.487805 \n", + "124 3 125 125 1.440449 9121.500000 \n", + "125 2 126 126 0.985704 8770.901961 \n", + "126 4 127 127 0.228593 12266.085714 \n", + "127 4 128 128 1.619940 11077.037037 \n", + "\n", + " SpeedLimit AvgSpeed Pop2019 Pop_Density Shape_Length Shape_Area \\\n", + "0 NaN NaN 0.0 0.000000 7840.490288 3.787844e+06 \n", + "1 NaN NaN 0.0 0.000000 7840.686448 3.787843e+06 \n", + "2 25.0 15.0 1049.0 0.029594 7840.882970 3.787843e+06 \n", + "3 25.0 19.0 1816.0 0.030252 7841.080477 3.787844e+06 \n", + "4 NaN NaN 1892.0 0.022647 7841.277327 3.787843e+06 \n", + ".. ... ... ... ... ... ... \n", + "123 NaN NaN 1986.0 0.046045 7840.280937 3.787843e+06 \n", + "124 NaN NaN 1198.0 0.039726 7840.085072 3.787843e+06 \n", + "125 NaN NaN 555.0 0.015125 7839.890518 3.787843e+06 \n", + "126 25.0 16.0 814.0 0.031125 7839.696621 3.787844e+06 \n", + "127 25.0 16.0 1385.0 0.059671 7839.501980 3.787843e+06 \n", + "\n", + " StationNum \n", + "0 0 \n", + "1 0 \n", + "2 3 \n", + "3 3 \n", + "4 3 \n", + ".. ... \n", + "123 3 \n", + "124 3 \n", + "125 2 \n", + "126 4 \n", + "127 4 \n", + "\n", + "[128 rows x 12 columns]" + ] + }, + "execution_count": 8, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "spatio_data_file = \"./data/SpatialFeatures.csv\"\n", + "raw_spatio_feature = pd.read_csv(spatio_data_file)\n", + "raw_spatio_feature" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": {}, + "outputs": [], + "source": [ + "bikeLane_matrix = raw_spatio_feature[\"BikeLane_miles\"]\n", + "bikeLane_matrix = bikeLane_matrix.fillna(0).to_numpy()\n", + "bikeLane_matrix = bikeLane_matrix/bikeLane_matrix.max()\n", + "bikeLane_matrix_board = bikeLane_matrix[np.newaxis,:] * np.ones((1248,1))" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": {}, + "outputs": [], + "source": [ + "import keras\n", + "from keras import layers\n", + "from keras import models\n", + "\n", + "spatio_feature = None\n", + "\n", + "input_shape = (5,1)\n", + "\n", + "left_inputs = layers.Input(shape = (input_shape))\n", + "\n", + "x = layers.LSTM(128, activation = \"tanh\")(left_inputs)\n", + "\n", + "x = layers.Dense(2*16*8, activation = \"linear\")(x)\n", + "\n", + "right_inputs = layers.Input(shape = (input_shape))\n", + "\n", + "y = layers.LSTM(128,activation= \"tanh\")(right_inputs)\n", + "\n", + "y = layers.Dense(2*16*8,activation= \"relu\")(y)\n", + "\n", + "x = layers.concatenate([x,y])\n", + "\n", + "x = layers.Dense(2*16*8,activation= \"relu\") (x)\n", + "\n", + "output = layers.Reshape((2,16,8))(x)\n", + "\n", + "model = models.Model([left_inputs,right_inputs],outputs = output)\n", + "\n", + "\n", + "\n" + ] + }, + { + "cell_type": "code", + "execution_count": 18, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Model: \"model_2\"\n", + "__________________________________________________________________________________________________\n", + " Layer (type) Output Shape Param # Connected to \n", + "==================================================================================================\n", + " input_5 (InputLayer) [(None, 5, 1)] 0 [] \n", + " \n", + " input_6 (InputLayer) [(None, 5, 1)] 0 [] \n", + " \n", + " lstm_4 (LSTM) (None, 128) 66560 ['input_5[0][0]'] \n", + " \n", + " lstm_5 (LSTM) (None, 128) 66560 ['input_6[0][0]'] \n", + " \n", + " dense_6 (Dense) (None, 256) 33024 ['lstm_4[0][0]'] \n", + " \n", + " dense_7 (Dense) (None, 256) 33024 ['lstm_5[0][0]'] \n", + " \n", + " concatenate_2 (Concatenate (None, 512) 0 ['dense_6[0][0]', \n", + " ) 'dense_7[0][0]'] \n", + " \n", + " dense_8 (Dense) (None, 256) 131328 ['concatenate_2[0][0]'] \n", + " \n", + " reshape_2 (Reshape) (None, 2, 16, 8) 0 ['dense_8[0][0]'] \n", + " \n", + "==================================================================================================\n", + "Total params: 330496 (1.26 MB)\n", + "Trainable params: 330496 (1.26 MB)\n", + "Non-trainable params: 0 (0.00 Byte)\n", + "__________________________________________________________________________________________________\n" + ] + } + ], + "source": [ + "model.summary()" + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 1/50\n", + "39/39 [==============================] - 2s 15ms/step - loss: 54.8777 - val_loss: 51.2985\n", + "Epoch 2/50\n", + "39/39 [==============================] - 0s 4ms/step - loss: 55.1405 - val_loss: 54.7360\n", + "Epoch 3/50\n", + "39/39 [==============================] - 0s 4ms/step - loss: 55.2071 - val_loss: 52.4979\n", + "Epoch 4/50\n", + "39/39 [==============================] - 0s 4ms/step - loss: 53.2430 - val_loss: 64.0301\n", + "Epoch 5/50\n", + "39/39 [==============================] - 0s 4ms/step - loss: 53.3346 - val_loss: 49.7368\n", + "Epoch 6/50\n", + "39/39 [==============================] - 0s 4ms/step - loss: 53.5821 - val_loss: 53.5882\n", + "Epoch 7/50\n", + "39/39 [==============================] - 0s 4ms/step - loss: 54.0866 - val_loss: 57.8746\n", + "Epoch 8/50\n", + "39/39 [==============================] - 0s 4ms/step - loss: 55.6869 - val_loss: 64.1826\n", + "Epoch 9/50\n", + "39/39 [==============================] - 0s 4ms/step - loss: 53.7663 - val_loss: 61.7465\n", + "Epoch 10/50\n", + "39/39 [==============================] - 0s 4ms/step - loss: 54.7494 - val_loss: 65.6936\n", + "Epoch 11/50\n", + "39/39 [==============================] - 0s 4ms/step - loss: 53.1544 - val_loss: 52.5802\n", + "Epoch 12/50\n", + "39/39 [==============================] - 0s 4ms/step - loss: 55.2133 - val_loss: 56.6710\n", + "Epoch 13/50\n", + "39/39 [==============================] - 0s 4ms/step - loss: 54.6228 - val_loss: 55.5211\n", + "Epoch 14/50\n", + "39/39 [==============================] - 0s 4ms/step - loss: 52.1401 - val_loss: 58.5715\n", + "Epoch 15/50\n", + "39/39 [==============================] - 0s 4ms/step - loss: 52.5612 - val_loss: 58.7202\n", + "Epoch 16/50\n", + "39/39 [==============================] - 0s 4ms/step - loss: 53.4948 - val_loss: 59.2302\n", + "Epoch 17/50\n", + "39/39 [==============================] - 0s 4ms/step - loss: 52.5986 - val_loss: 48.9652\n", + "Epoch 18/50\n", + "39/39 [==============================] - 0s 4ms/step - loss: 51.9470 - val_loss: 64.2186\n", + "Epoch 19/50\n", + "39/39 [==============================] - 0s 4ms/step - loss: 55.1345 - val_loss: 53.9188\n", + "Epoch 20/50\n", + "39/39 [==============================] - 0s 4ms/step - loss: 52.8832 - val_loss: 66.7527\n", + "Epoch 21/50\n", + "39/39 [==============================] - 0s 4ms/step - loss: 53.5199 - val_loss: 48.4578\n", + "Epoch 22/50\n", + "39/39 [==============================] - 0s 4ms/step - loss: 53.8766 - val_loss: 51.3250\n", + "Epoch 23/50\n", + "39/39 [==============================] - 0s 4ms/step - loss: 50.4563 - val_loss: 60.5626\n", + "Epoch 24/50\n", + "39/39 [==============================] - 0s 4ms/step - loss: 51.8139 - val_loss: 52.1807\n", + "Epoch 25/50\n", + "39/39 [==============================] - 0s 4ms/step - loss: 49.4824 - val_loss: 60.1553\n", + "Epoch 26/50\n", + "39/39 [==============================] - 0s 4ms/step - loss: 49.2602 - val_loss: 60.9033\n", + "Epoch 27/50\n", + "39/39 [==============================] - 0s 4ms/step - loss: 51.0772 - val_loss: 58.1736\n", + "Epoch 28/50\n", + "39/39 [==============================] - 0s 4ms/step - loss: 49.2613 - val_loss: 58.5493\n", + "Epoch 29/50\n", + "39/39 [==============================] - 0s 4ms/step - loss: 49.6795 - val_loss: 65.7093\n", + "Epoch 30/50\n", + "39/39 [==============================] - 0s 4ms/step - loss: 50.2725 - val_loss: 58.2873\n", + "Epoch 31/50\n", + "39/39 [==============================] - 0s 4ms/step - loss: 52.4984 - val_loss: 65.8380\n", + "Epoch 32/50\n", + "39/39 [==============================] - 0s 4ms/step - loss: 52.5961 - val_loss: 63.5864\n", + "Epoch 33/50\n", + "39/39 [==============================] - 0s 4ms/step - loss: 49.4923 - val_loss: 51.8561\n", + "Epoch 34/50\n", + "39/39 [==============================] - 0s 4ms/step - loss: 51.5506 - val_loss: 60.6100\n", + "Epoch 35/50\n", + "39/39 [==============================] - 0s 4ms/step - loss: 48.5454 - val_loss: 70.8238\n", + "Epoch 36/50\n", + "39/39 [==============================] - 0s 4ms/step - loss: 49.0989 - val_loss: 67.8033\n", + "Epoch 37/50\n", + "39/39 [==============================] - 0s 4ms/step - loss: 48.3473 - val_loss: 50.0989\n", + "Epoch 38/50\n", + "39/39 [==============================] - 0s 4ms/step - loss: 48.2508 - val_loss: 54.6217\n", + "Epoch 39/50\n", + "39/39 [==============================] - 0s 4ms/step - loss: 48.6460 - val_loss: 65.7264\n", + "Epoch 40/50\n", + "39/39 [==============================] - 0s 4ms/step - loss: 48.6715 - val_loss: 66.6947\n", + "Epoch 41/50\n", + "39/39 [==============================] - 0s 4ms/step - loss: 49.4361 - val_loss: 50.9359\n", + "Epoch 42/50\n", + "39/39 [==============================] - 0s 4ms/step - loss: 47.1807 - val_loss: 55.0176\n", + "Epoch 43/50\n", + "39/39 [==============================] - 0s 4ms/step - loss: 51.3290 - val_loss: 45.2042\n", + "Epoch 44/50\n", + "39/39 [==============================] - 0s 4ms/step - loss: 48.1886 - val_loss: 48.6589\n", + "Epoch 45/50\n", + "39/39 [==============================] - 0s 4ms/step - loss: 47.7480 - val_loss: 54.7440\n", + "Epoch 46/50\n", + "39/39 [==============================] - 0s 4ms/step - loss: 47.5081 - val_loss: 56.8295\n", + "Epoch 47/50\n", + "39/39 [==============================] - 0s 4ms/step - loss: 46.0584 - val_loss: 50.8201\n", + "Epoch 48/50\n", + "39/39 [==============================] - 0s 4ms/step - loss: 45.7069 - val_loss: 52.5394\n", + "Epoch 49/50\n", + "39/39 [==============================] - 0s 4ms/step - loss: 46.6425 - val_loss: 52.1247\n", + "Epoch 50/50\n", + "39/39 [==============================] - 0s 4ms/step - loss: 47.2073 - val_loss: 51.9383\n" + ] + }, + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 15, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "model.compile(optimizer='adam', loss='mse')\n", + "model.fit([X_train,X_train], y_train, epochs=50, batch_size=32, validation_data=([X_test,X_test], y_test))" + ] + }, + { + "cell_type": "code", + "execution_count": 17, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "8/8 [==============================] - 0s 1ms/step - loss: 51.9383\n", + "Root Mean Squared Error: 7.206825348515386\n" + ] + } + ], + "source": [ + "mse = model.evaluate([X_test,X_test], y_test)\n", + "\n", + "# Show rmse to see how model performs on the test set\n", + "rmse = np.sqrt(mse)\n", + "print(f'Root Mean Squared Error: {rmse}')" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "py38", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.8.18" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/model_v4_static_feature.ipynb b/model_v4_static_feature.ipynb new file mode 100644 index 0000000..28769ad --- /dev/null +++ b/model_v4_static_feature.ipynb @@ -0,0 +1,634 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [], + "source": [ + "import h5py\n", + "import numpy as np\n", + "from datetime import datetime\n" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [], + "source": [ + "with h5py.File('./data/TrainingData.h5', 'r') as f:\n", + " # Access the trip dataset and their corresponding timestamps\n", + " traffic_data = f['trip'][()]\n", + " dates = f['timeslot'][()]" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [], + "source": [ + "formatted_dates = []\n", + "\n", + "for date_string in dates:\n", + " formatted_date = datetime.strptime(date_string.decode(), '%Y%m%d%H%M')\n", + "\n", + " year = formatted_date.year\n", + " month = formatted_date.month\n", + " day = formatted_date.day\n", + " hour = formatted_date.hour\n", + " minute = formatted_date.minute\n", + "\n", + " formatted_dates.append(np.array([year, month, day, hour, minute]))\n", + "\n", + "formatted_dates = np.array(formatted_dates).reshape(1488, 5, 1)" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [], + "source": [ + "test_size = 240\n", + "\n", + "train_traffic_data = traffic_data[:-test_size]\n", + "test_traffic_data = traffic_data[-test_size:]\n", + "\n", + "train_formatted_dates = formatted_dates[:-test_size]\n", + "test_formatted_dates = formatted_dates[-test_size:]" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [], + "source": [ + "X_train, X_test = train_formatted_dates, test_formatted_dates\n", + "y_train, y_test = train_traffic_data, test_traffic_data" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": {}, + "outputs": [], + "source": [ + "import pandas as pd\n", + "import numpy as np\n", + "\n" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
Join_CountTARGET_FIDBlockIDBikeLane_milesAADTSpeedLimitAvgSpeedPop2019Pop_DensityShape_LengthShape_AreaStationNum
0011NaN32638.666667NaNNaN0.00.0000007840.4902883.787844e+060
1022NaNNaNNaNNaN0.00.0000007840.6864483.787843e+060
23330.80705521234.74193525.015.01049.00.0295947840.8829703.787843e+063
33442.0962215915.12500025.019.01816.00.0302527841.0804773.787844e+063
43550.98432023940.078947NaNNaN1892.00.0226477841.2773273.787843e+063
.......................................
12331241241.9557079050.487805NaNNaN1986.00.0460457840.2809373.787843e+063
12431251251.4404499121.500000NaNNaN1198.00.0397267840.0850723.787843e+063
12521261260.9857048770.901961NaNNaN555.00.0151257839.8905183.787843e+062
12641271270.22859312266.08571425.016.0814.00.0311257839.6966213.787844e+064
12741281281.61994011077.03703725.016.01385.00.0596717839.5019803.787843e+064
\n", + "

128 rows × 12 columns

\n", + "
" + ], + "text/plain": [ + " Join_Count TARGET_FID BlockID BikeLane_miles AADT \\\n", + "0 0 1 1 NaN 32638.666667 \n", + "1 0 2 2 NaN NaN \n", + "2 3 3 3 0.807055 21234.741935 \n", + "3 3 4 4 2.096221 5915.125000 \n", + "4 3 5 5 0.984320 23940.078947 \n", + ".. ... ... ... ... ... \n", + "123 3 124 124 1.955707 9050.487805 \n", + "124 3 125 125 1.440449 9121.500000 \n", + "125 2 126 126 0.985704 8770.901961 \n", + "126 4 127 127 0.228593 12266.085714 \n", + "127 4 128 128 1.619940 11077.037037 \n", + "\n", + " SpeedLimit AvgSpeed Pop2019 Pop_Density Shape_Length Shape_Area \\\n", + "0 NaN NaN 0.0 0.000000 7840.490288 3.787844e+06 \n", + "1 NaN NaN 0.0 0.000000 7840.686448 3.787843e+06 \n", + "2 25.0 15.0 1049.0 0.029594 7840.882970 3.787843e+06 \n", + "3 25.0 19.0 1816.0 0.030252 7841.080477 3.787844e+06 \n", + "4 NaN NaN 1892.0 0.022647 7841.277327 3.787843e+06 \n", + ".. ... ... ... ... ... ... \n", + "123 NaN NaN 1986.0 0.046045 7840.280937 3.787843e+06 \n", + "124 NaN NaN 1198.0 0.039726 7840.085072 3.787843e+06 \n", + "125 NaN NaN 555.0 0.015125 7839.890518 3.787843e+06 \n", + "126 25.0 16.0 814.0 0.031125 7839.696621 3.787844e+06 \n", + "127 25.0 16.0 1385.0 0.059671 7839.501980 3.787843e+06 \n", + "\n", + " StationNum \n", + "0 0 \n", + "1 0 \n", + "2 3 \n", + "3 3 \n", + "4 3 \n", + ".. ... \n", + "123 3 \n", + "124 3 \n", + "125 2 \n", + "126 4 \n", + "127 4 \n", + "\n", + "[128 rows x 12 columns]" + ] + }, + "execution_count": 8, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "spatio_data_file = \"./data/SpatialFeatures.csv\"\n", + "raw_spatio_feature = pd.read_csv(spatio_data_file)\n", + "raw_spatio_feature" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": 22, + "metadata": {}, + "outputs": [], + "source": [ + "bikeLane_matrix = raw_spatio_feature[\"BikeLane_miles\"]\n", + "bikeLane_matrix = bikeLane_matrix.fillna(0).to_numpy()\n", + "bikeLane_matrix = bikeLane_matrix/bikeLane_matrix.max()\n", + "bikeLane_matrix_board = bikeLane_matrix[np.newaxis,:] * np.ones((1248,1))\n", + "\n", + "\n", + "static_input = bikeLane_matrix_board\n", + "static_input_test = bikeLane_matrix[np.newaxis,:] * np.ones((240,1))" + ] + }, + { + "cell_type": "code", + "execution_count": 32, + "metadata": {}, + "outputs": [], + "source": [ + "import keras\n", + "from keras import layers\n", + "from keras import models\n", + "\n", + "spatio_feature = None\n", + "\n", + "input_shape = (5,1)\n", + "\n", + "static_input_shape = (128)\n", + "\n", + "left_inputs = layers.Input(shape = (input_shape))\n", + "\n", + "x = layers.LSTM(128, activation = \"tanh\")(left_inputs)\n", + "\n", + "# x = layers.Dense(16*8, activation = \"linear\")(x)\n", + "\n", + "right_inputs = layers.Input(shape = (static_input_shape))\n", + "\n", + "y = right_inputs\n", + "\n", + "\n", + "x = layers.concatenate([x,y])\n", + "\n", + "x = layers.Dense(2*16*8,activation= \"relu\") (x)\n", + "\n", + "output = layers.Reshape((2,16,8))(x)\n", + "\n", + "model = models.Model([left_inputs,right_inputs],outputs = output)\n", + "\n", + "\n", + "\n" + ] + }, + { + "cell_type": "code", + "execution_count": 33, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Model: \"model_2\"\n", + "__________________________________________________________________________________________________\n", + " Layer (type) Output Shape Param # Connected to \n", + "==================================================================================================\n", + " input_9 (InputLayer) [(None, 5, 1)] 0 [] \n", + " \n", + " lstm_4 (LSTM) (None, 128) 66560 ['input_9[0][0]'] \n", + " \n", + " input_10 (InputLayer) [(None, 128)] 0 [] \n", + " \n", + " concatenate_4 (Concatenate (None, 256) 0 ['lstm_4[0][0]', \n", + " ) 'input_10[0][0]'] \n", + " \n", + " dense_6 (Dense) (None, 256) 65792 ['concatenate_4[0][0]'] \n", + " \n", + " reshape_2 (Reshape) (None, 2, 16, 8) 0 ['dense_6[0][0]'] \n", + " \n", + "==================================================================================================\n", + "Total params: 132352 (517.00 KB)\n", + "Trainable params: 132352 (517.00 KB)\n", + "Non-trainable params: 0 (0.00 Byte)\n", + "__________________________________________________________________________________________________\n" + ] + } + ], + "source": [ + "model.summary()" + ] + }, + { + "cell_type": "code", + "execution_count": 34, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 1/50\n", + "39/39 [==============================] - 1s 7ms/step - loss: 195.3423 - val_loss: 122.7748\n", + "Epoch 2/50\n", + "39/39 [==============================] - 0s 2ms/step - loss: 159.8013 - val_loss: 111.0790\n", + "Epoch 3/50\n", + "39/39 [==============================] - 0s 2ms/step - loss: 149.2726 - val_loss: 109.4974\n", + "Epoch 4/50\n", + "39/39 [==============================] - 0s 2ms/step - loss: 146.6860 - val_loss: 109.9132\n", + "Epoch 5/50\n", + "39/39 [==============================] - 0s 2ms/step - loss: 145.9674 - val_loss: 110.0577\n", + "Epoch 6/50\n", + "39/39 [==============================] - 0s 2ms/step - loss: 145.7595 - val_loss: 110.2798\n", + "Epoch 7/50\n", + "39/39 [==============================] - 0s 2ms/step - loss: 145.6669 - val_loss: 110.4378\n", + "Epoch 8/50\n", + "39/39 [==============================] - 0s 2ms/step - loss: 145.5251 - val_loss: 110.3182\n", + "Epoch 9/50\n", + "39/39 [==============================] - 0s 2ms/step - loss: 145.5142 - val_loss: 110.0210\n", + "Epoch 10/50\n", + "39/39 [==============================] - 0s 2ms/step - loss: 145.2310 - val_loss: 109.9615\n", + "Epoch 11/50\n", + "39/39 [==============================] - 0s 2ms/step - loss: 143.9531 - val_loss: 108.3879\n", + "Epoch 12/50\n", + "39/39 [==============================] - 0s 2ms/step - loss: 141.4673 - val_loss: 106.4769\n", + "Epoch 13/50\n", + "39/39 [==============================] - 0s 2ms/step - loss: 138.7005 - val_loss: 102.2574\n", + "Epoch 14/50\n", + "39/39 [==============================] - 0s 2ms/step - loss: 131.1469 - val_loss: 96.1004\n", + "Epoch 15/50\n", + "39/39 [==============================] - 0s 2ms/step - loss: 119.1949 - val_loss: 87.1408\n", + "Epoch 16/50\n", + "39/39 [==============================] - 0s 2ms/step - loss: 109.1737 - val_loss: 82.5326\n", + "Epoch 17/50\n", + "39/39 [==============================] - 0s 2ms/step - loss: 102.8606 - val_loss: 80.7252\n", + "Epoch 18/50\n", + "39/39 [==============================] - 0s 2ms/step - loss: 100.3107 - val_loss: 78.7766\n", + "Epoch 19/50\n", + "39/39 [==============================] - 0s 2ms/step - loss: 99.4495 - val_loss: 79.5350\n", + "Epoch 20/50\n", + "39/39 [==============================] - 0s 2ms/step - loss: 98.5605 - val_loss: 78.4435\n", + "Epoch 21/50\n", + "39/39 [==============================] - 0s 2ms/step - loss: 97.5860 - val_loss: 81.1774\n", + "Epoch 22/50\n", + "39/39 [==============================] - 0s 2ms/step - loss: 96.2666 - val_loss: 79.1634\n", + "Epoch 23/50\n", + "39/39 [==============================] - 0s 2ms/step - loss: 94.7172 - val_loss: 78.6962\n", + "Epoch 24/50\n", + "39/39 [==============================] - 0s 2ms/step - loss: 92.0947 - val_loss: 77.0280\n", + "Epoch 25/50\n", + "39/39 [==============================] - 0s 2ms/step - loss: 91.2972 - val_loss: 76.0381\n", + "Epoch 26/50\n", + "39/39 [==============================] - 0s 2ms/step - loss: 90.9750 - val_loss: 76.7729\n", + "Epoch 27/50\n", + "39/39 [==============================] - 0s 2ms/step - loss: 89.8379 - val_loss: 76.8481\n", + "Epoch 28/50\n", + "39/39 [==============================] - 0s 2ms/step - loss: 89.7722 - val_loss: 77.1863\n", + "Epoch 29/50\n", + "39/39 [==============================] - 0s 2ms/step - loss: 88.6945 - val_loss: 76.4976\n", + "Epoch 30/50\n", + "39/39 [==============================] - 0s 2ms/step - loss: 87.9703 - val_loss: 75.7619\n", + "Epoch 31/50\n", + "39/39 [==============================] - 0s 2ms/step - loss: 87.8983 - val_loss: 76.3760\n", + "Epoch 32/50\n", + "39/39 [==============================] - 0s 2ms/step - loss: 86.7892 - val_loss: 75.5612\n", + "Epoch 33/50\n", + "39/39 [==============================] - 0s 2ms/step - loss: 87.2548 - val_loss: 75.8207\n", + "Epoch 34/50\n", + "39/39 [==============================] - 0s 2ms/step - loss: 86.6262 - val_loss: 74.3852\n", + "Epoch 35/50\n", + "39/39 [==============================] - 0s 2ms/step - loss: 83.0383 - val_loss: 71.6389\n", + "Epoch 36/50\n", + "39/39 [==============================] - 0s 2ms/step - loss: 81.3606 - val_loss: 72.0317\n", + "Epoch 37/50\n", + "39/39 [==============================] - 0s 2ms/step - loss: 80.9233 - val_loss: 72.5051\n", + "Epoch 38/50\n", + "39/39 [==============================] - 0s 2ms/step - loss: 80.5564 - val_loss: 73.2485\n", + "Epoch 39/50\n", + "39/39 [==============================] - 0s 2ms/step - loss: 79.3356 - val_loss: 70.0708\n", + "Epoch 40/50\n", + "39/39 [==============================] - 0s 2ms/step - loss: 79.0890 - val_loss: 69.8045\n", + "Epoch 41/50\n", + "39/39 [==============================] - 0s 2ms/step - loss: 78.2170 - val_loss: 69.6172\n", + "Epoch 42/50\n", + "39/39 [==============================] - 0s 2ms/step - loss: 77.9804 - val_loss: 69.9331\n", + "Epoch 43/50\n", + "39/39 [==============================] - 0s 2ms/step - loss: 77.2316 - val_loss: 69.1138\n", + "Epoch 44/50\n", + "39/39 [==============================] - 0s 2ms/step - loss: 76.6667 - val_loss: 67.2575\n", + "Epoch 45/50\n", + "39/39 [==============================] - 0s 2ms/step - loss: 76.3032 - val_loss: 69.4175\n", + "Epoch 46/50\n", + "39/39 [==============================] - 0s 2ms/step - loss: 75.8204 - val_loss: 66.3227\n", + "Epoch 47/50\n", + "39/39 [==============================] - 0s 2ms/step - loss: 75.5402 - val_loss: 67.3108\n", + "Epoch 48/50\n", + "39/39 [==============================] - 0s 2ms/step - loss: 74.5297 - val_loss: 66.1790\n", + "Epoch 49/50\n", + "39/39 [==============================] - 0s 2ms/step - loss: 74.2953 - val_loss: 65.7092\n", + "Epoch 50/50\n", + "39/39 [==============================] - 0s 2ms/step - loss: 73.6489 - val_loss: 66.4811\n" + ] + }, + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 34, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "model.compile(optimizer='adam', loss='mse')\n", + "model.fit([X_train,static_input], y_train, epochs=50, batch_size=32, validation_data=([X_test,static_input_test], y_test))" + ] + }, + { + "cell_type": "code", + "execution_count": 35, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "8/8 [==============================] - 0s 1ms/step - loss: 66.4811\n", + "Root Mean Squared Error: 8.153597228592622\n" + ] + } + ], + "source": [ + "mse = model.evaluate([X_test,static_input_test], y_test)\n", + "\n", + "# Show rmse to see how model performs on the test set\n", + "rmse = np.sqrt(mse)\n", + "print(f'Root Mean Squared Error: {rmse}')" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "py38", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.8.18" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +}