{ "cells": [ { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [], "source": [ "import pandas as pd \n", "from datetime import datetime \n", "from datetime import date\n", "import matplotlib.pyplot as plt\n", "import numpy as np\n", "import pandas as pd\n", "from keras.models import Sequential\n", "from keras.layers import LSTM, Dense\n", "from sklearn.model_selection import train_test_split\n", "from sklearn.preprocessing import MinMaxScaler,StandardScaler\n", "from keras.callbacks import ModelCheckpoint\n", "import tensorflow as tf\n", "import joblib\n", "from datetime import datetime" ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [], "source": [ "merged = pd.read_csv(r'../data/long_merge.csv')" ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [], "source": [ "zones = [72, 71, 63, 62, 60, 59, 58,57, 50, 49, 44, 43, 35, 34, 33, 32, 31, 30, 29, 28, ]\n", "rtus = [2]\n", "cols = []\n", "\n", "for zone in zones:\n", " for column in merged.columns:\n", " if f\"zone_0{zone}\" in column and 'co2' not in column and \"hw_valve\" not in column and \"cooling_sp\" not in column and \"heating_sp\" not in column:\n", " cols.append(column)\n", "\n", "for zone in zones:\n", " for column in merged.columns:\n", " if f\"zone_0{zone}\" in column: \n", " if \"cooling_sp\" in column or \"heating_sp\" in column:\n", " cols.append(column)\n", "# for rtu in rtus:\n", "# for column in merged.columns:\n", "# if f\"rtu_00{rtu}_fltrd_sa\" in column:\n", "# cols.append(column)\n", "cols =['date'] + cols + ['air_temp_set_1',\n", " 'air_temp_set_2',\n", " 'dew_point_temperature_set_1d',\n", " 'relative_humidity_set_1',\n", " 'solar_radiation_set_1']\n", "input_dataset = merged[cols]" ] }, { "cell_type": "code", "execution_count": 13, "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "C:\\Users\\arbal\\AppData\\Local\\Temp\\ipykernel_12772\\1855433847.py:1: SettingWithCopyWarning: \n", "A value is trying to be set on a copy of a slice from a DataFrame.\n", "Try using .loc[row_indexer,col_indexer] = value instead\n", "\n", "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", " input_dataset['date'] = pd.to_datetime(input_dataset['date'], format = \"%Y-%m-%d %H:%M:%S\")\n" ] } ], "source": [ "input_dataset['date'] = pd.to_datetime(input_dataset['date'], format = \"%Y-%m-%d %H:%M:%S\")\n", "df_filtered = input_dataset[ (input_dataset.date.dt.date >date(2019, 3, 1)) & (input_dataset.date.dt.date< date(2021, 1, 1))]\n", "\n", "if df_filtered.isna().any().any():\n", " print(\"There are NA values in the DataFrame columns.\")" ] }, { "cell_type": "code", "execution_count": 14, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "[]" ] }, "execution_count": 14, "metadata": {}, "output_type": "execute_result" } ], "source": [ "testdataset_df = df_filtered[(df_filtered.date.dt.date >date(2020, 3, 1)) & (df_filtered.date.dt.date date(2019, 3, 1)) & (df_filtered.date.dt.date date(2020, 7, 1)) & (df_filtered.date.dt.date " ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "%matplotlib inline\n", "var = 0\n", "\n", "df = pd.DataFrame([testdataset_df.index[31:],test_predict1_unscaled[:,var], y_test_unscaled[:,var]] ).T\n", "fig, ax = plt.subplots(figsize=(10,8))\n", "df.plot(x = 0, y=1, ax = ax, label = 'Predicted')\n", "df.plot(x = 0, y=2, ax = ax, label = 'Actual')\n", "\n", "anomalies = df.where(df[1]-df[2]>0.38)[0]\n", "df['anomalies'] = anomalies\n", "\n", "df_new = df.dropna()\n", "\n", "df_new.plot.scatter(x='anomalies', y=1, c='r', ax = ax, label = 'Anomalies')\n", "\n", "# ax.scatter(anomalies,test_predict1[anomalies,var], color='black',marker =\"o\",s=100 )\n", "\n", "\n", "ax.set_title('Testing Data - Predicted vs Actual [Zone 72 Temperature]', fontsize=20)\n", "ax.set_xlabel('Time', fontsize=15)\n", "ax.set_ylabel('Value', fontsize = 15)\n", "ax.legend(fontsize = 15)\n", "fig.tight_layout()" ] }, { "cell_type": "code", "execution_count": 42, "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "d:\\anaconda3\\envs\\smartbuilding\\Lib\\site-packages\\pandas\\core\\indexes\\base.py:7588: FutureWarning: Dtype inference on a pandas object (Series, Index, ExtensionArray) is deprecated. The Index constructor will keep the original dtype in the future. Call `infer_objects` on the result to get the old behavior.\n", " return Index(sequences[0], name=names)\n" ] }, { "data": { "text/plain": [ "Text(0, 0.5, 'MSE')" ] }, "execution_count": 42, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAA1QAAAKgCAYAAACcFTzmAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjguMywgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/H5lhTAAAACXBIWXMAAA9hAAAPYQGoP6dpAACK80lEQVR4nO3dd3wUZeLH8e8mhEAg9C4giIgUQUVUUATkxANFVOwVy3liRVRO9GxnwfPUH1YQBVHBdgfYQASlS5Hee0uAhE4CCenP7w/Ikk12k+0zu/m8X6+8ILOzs88+OzuZ7zxlHMYYIwAAAACAz2KsLgAAAAAARCoCFQAAAAD4iUAFAAAAAH4iUAEAAACAnwhUAAAAAOAnAhUAAAAA+IlABQAAAAB+IlABAAAAgJ8IVAAAAADgJwIVAESRsWPHyuFwyOFwaNasWSUeN8bozDPPlMPhUPfu3cNePl/k5ubq448/VqdOnVSrVi0lJCTo9NNPV79+/TRp0iSrixdys2bN8vg5FlX0M3f3U9bzAQCBqWB1AQAAwZeYmKjRo0eXCE2zZ8/W1q1blZiYaE3BfHDnnXdq4sSJGjRokF5++WXFx8dr27Ztmjp1qn799Vddd911VhfRVj777DOdffbZJZa3adPGgtIAQPlBoAKAKHTzzTdr/Pjx+vDDD1WtWjXn8tGjR6tz585KT0+3sHRl2759u7799lu98MILevnll53Le/bsqb/97W8qKCiwsHSlM8YoKytLlStXDuvrtmvXThdccIFPzymtrMePH1elSpXkcDj8LlNmZqYSEhL8fj4ARAK6/AFAFLr11lslSV9//bVzWVpamiZMmKB7773X7XNycnL06quv6uyzz1Z8fLzq1q2re+65R/v373dZ79tvv1WvXr3UsGFDVa5cWa1bt9YzzzyjjIwMl/UGDBigqlWrasuWLerTp4+qVq2qJk2a6Mknn1R2dnap5T948KAkqWHDhm4fj4lx/fO1YcMG/fWvf1VCQoLq1KmjBx98UD/99FOJLm/NmjXTgAEDSmyve/fuLq15WVlZevLJJ3XuueeqevXqqlWrljp37qwffvihxHMdDoceeeQRjRw5Uq1bt1Z8fLw+//xzSdLmzZt12223qV69eoqPj1fr1q314YcfltiGu/IfPXq01Dryh6eyFnYbnDZtmu69917VrVtXCQkJys7OVkFBgd58803nflGvXj3ddddd2rVrl8u2u3fvrnbt2mnOnDnq0qWLEhISPO5rABBNaKECgChUrVo13XDDDRozZoz+/ve/SzoRrmJiYnTzzTdr+PDhLusXFBSoX79+mjt3roYMGaIuXbpo586devHFF9W9e3ctWbLE2YqxefNm9enTR4MGDVKVKlW0YcMG/fvf/9aff/6pGTNmuGw3NzdX11xzje677z49+eSTmjNnjl555RVVr15dL7zwgsfyt27dWjVq1NDLL7+smJgY9erVS82aNXO77t69e9WtWzfFxcXpo48+Uv369TV+/Hg98sgjftdfdna2Dh06pKeeekqnnXaacnJy9Ntvv+n666/XZ599prvuustl/e+//15z587VCy+8oAYNGqhevXpat26dunTpoqZNm+rtt99WgwYN9Ouvv+qxxx7TgQMH9OKLLwa1/Pn5+crLy3NZ5nA4FBsbW2ZZFy9eLEm69957ddVVV+nLL79URkaG4uLiNHDgQI0aNUqPPPKIrr76au3YsUPPP/+8Zs2apWXLlqlOnTrObaekpOiOO+7QkCFD9Prrr5cIvgAQlQwAIGp89tlnRpJZvHixmTlzppFk1qxZY4wxplOnTmbAgAHGGGPatm1runXr5nze119/bSSZCRMmuGxv8eLFRpL56KOP3L5eQUGByc3NNbNnzzaSzMqVK52P3X333UaS+e6771ye06dPH9OqVasy38vkyZNNnTp1jCQjydSuXdvceOON5scff3RZ7x//+IdxOBxmxYoVLsuvuOIKI8nMnDnTuez00083d999d4nX6tatm0t9FJeXl2dyc3PNfffdZ8477zyXxySZ6tWrm0OHDrksv/LKK03jxo1NWlqay/JHHnnEVKpUybm+L+V3p/Azd/cTGxvrVVkLt3HXXXe5LF+/fr2RZB566CGX5YsWLTKSzLPPPutc1q1bNyPJ/P7776WWFwCiDZeOACBKdevWTS1atNCYMWO0evVqLV682GMXrJ9//lk1atRQ3759lZeX5/w599xz1aBBA5duc9u2bdNtt92mBg0aKDY2VnFxcerWrZskaf369S7bdTgc6tu3r8uy9u3ba+fOnWWWv0+fPkpKStKkSZP01FNPqW3btvr+++91zTXXuLTezJw5U23btlWHDh1cnn/bbbeV+Rql+e9//6tLLrlEVatWVYUKFRQXF6fRo0eXeI+SdPnll6tmzZrO37OysvT777/ruuuuU0JCgkud9unTR1lZWVq4cGFQy//FF19o8eLFLj+LFi0qs6xF9e/f3+X3mTNnSlKJbpIXXnihWrdurd9//91lec2aNXX55Zf7VG4AiHR0+QOAKOVwOHTPPffovffeU1ZWls466yx17drV7bp79+7VkSNHVLFiRbePHzhwQJJ07Ngxde3aVZUqVdKrr76qs846SwkJCUpOTtb111+v48ePuzwvISFBlSpVclkWHx+vrKwsr95D5cqVde211+raa6+VJCUlJal379768MMPNXDgQLVt21YHDx5U8+bNSzy3QYMGXr2GOxMnTtRNN92kG2+8UU8//bQaNGigChUqaMSIERozZkyJ9YuP9Tp48KDy8vL0/vvv6/3333f7GoV1Gqzyt27d2qtJKTyNS3P3WGlj2Ro1alQiGJe2bQCIVgQqAIhiAwYM0AsvvKCRI0fqtdde87henTp1VLt2bU2dOtXt44XTrM+YMUN79uzRrFmznK1SknTkyJGgltuTpk2b6oEHHtCgQYO0du1atW3bVrVr11ZqamqJdd0tq1SpktsJMQ4cOOAyFmjcuHFq3ry5vv32W5dZ7jxNplF8JryaNWsqNjZWd955px5++GG3zykMUb6UPxhKm7Wv+GO1a9eWdGJsVOPGjV0e27Nnj0udlbVtAIhWBCoAiGKnnXaann76aW3YsEF33323x/WuvvpqffPNN8rPz9dFF13kcb3CE+b4+HiX5R9//HFwCnzS0aNH5XA4VLVq1RKPFXa5a9SokSSpR48eevPNN7Vy5UqXbnNfffVViec2a9ZMq1atclm2adMmbdy40SUcOBwOVaxY0SUgpKamup3lz52EhAT16NFDy5cvV/v27T22/Pla/nAr7L43btw4derUybl88eLFWr9+vZ577jmrigYAtkGgAoAo98Ybb5S5zi233KLx48erT58+evzxx3XhhRcqLi5Ou3bt0syZM9WvXz9dd9116tKli2rWrKkHH3xQL774ouLi4jR+/HitXLkyqGXeuHGjrrzySt1yyy3q1q2bGjZsqMOHD2vy5MkaNWqUunfvri5dukiSBg0apDFjxuiqq67Sq6++6pwlb8OGDSW2e+edd+qOO+7QQw89pP79+2vnzp168803VbduXZf1rr76ak2cOFEPPfSQbrjhBiUnJ+uVV15Rw4YNtXnzZq/ew7vvvqtLL71UXbt21cCBA9WsWTMdPXpUW7Zs0U8//eScEdGX8pdmzZo1JWb5k6QWLVqUeH/eatWqlR544AG9//77iomJUe/evZ2z/DVp0kRPPPGEX9sFgGhCoAIAKDY2Vj/++KPeffddffnllxo2bJgqVKigxo0bq1u3bjrnnHMknegCNnnyZD355JO64447VKVKFfXr10/ffvutzj///KCV58wzz9TgwYM1Y8YM/fDDD9q/f7/i4uLUsmVLvfrqqxo8eLBzSu4GDRpo9uzZevzxxzVw4EAlJCTouuuu0wcffKB+/fq5bPe2227Tnj17NHLkSH322Wdq166dRowY4XLzYEm65557tG/fPo0cOVJjxozRGWecoWeeeUa7du0qsa4nbdq00bJly/TKK6/on//8p/bt26caNWqoZcuW6tOnj3M9X8pfmnvuucft8k8++UT333+/19spbsSIEWrRooVGjx6tDz/8UNWrV9df//pXDRs2zNklEADKM4cxxlhdCAAAgm3WrFnq0aOHZs6c6XLTXgAAgolp0wEAAADATwQqAAAAAPATXf4AAAAAwE+0UAEAAACAnwhUAAAAAOAnAhUAAAAA+In7UJ1UUFCgPXv2KDExUQ6Hw+riAAAAALCIMUZHjx5Vo0aNnPc99IRAddKePXvUpEkTq4sBAAAAwCaSk5PVuHHjUtchUJ2UmJgo6USlVatWzeLSAAAAALBKenq6mjRp4swIpSFQnVTYza9atWoEKgAAAABeDQViUgoAAAAA8BOBCgAAAAD8RKACAAAAAD8xhgoAAACIAvn5+crNzbW6GBGjYsWKZU6J7g0CFQAAABDBjDFKTU3VkSNHrC5KRImJiVHz5s1VsWLFgLZDoAIAAAAiWGGYqlevnhISEryama68Kygo0J49e5SSkqKmTZsGVGcEKgAAACBC5efnO8NU7dq1rS5ORKlbt6727NmjvLw8xcXF+b0dJqUAAAAAIlThmKmEhASLSxJ5Crv65efnB7QdAhUAAAAQ4ejm57tg1RmBCgAAAAD8RKACAAAAAD8RqAAAAADATwQqAAAAAPATgQoAAABA2HXv3l2PPvqoBg0apJo1a6p+/foaNWqUMjIydM899ygxMVEtWrTQL7/8Ikk6fPiwbr/9dtWtW1eVK1dWy5Yt9dlnnzm3t3v3bt18882qWbOmateurX79+mnHjh0hfx8EKgAAACCKGGOUmZNnyY8xxqeyfv7556pTp47+/PNPPfrooxo4cKBuvPFGdenSRcuWLdOVV16pO++8U5mZmXr++ee1bt06/fLLL1q/fr1GjBihOnXqSJIyMzPVo0cPVa1aVXPmzNG8efNUtWpV/fWvf1VOTk4oqtnJYXx911EqPT1d1atXV1pamqpVq2Z1cQAAAIAyZWVlafv27WrevLkqVaokScrMyVObF361pDzr/nWlEipW8Grd7t27Kz8/X3PnzpV04n5Q1atX1/XXX68vvvhCkpSamqqGDRtqwYIFev3111WnTh2NGTOmxLbGjBmjN998U+vXr3dOh56Tk6MaNWro+++/V69evUo8x13dFfIlG3j3bgEAAAAgyNq3b+/8f2xsrGrXrq1zzjnHuax+/fqSpH379mngwIHq37+/li1bpl69eunaa69Vly5dJElLly7Vli1blJiY6LL9rKwsbd26NaTvgUAFAAAARJHKcbFa968rLXttX8TFxbn87nA4XJYVtjYVFBSod+/e2rlzpyZPnqzffvtNPXv21MMPP6y33npLBQUF6tixo8aPH1/iNerWrevHO/EegQoAAACIIg6Hw+tud5Gmbt26GjBggAYMGKCuXbvq6aef1ltvvaXzzz9f3377rerVqxf24TtMSgEAAADA9l544QX98MMP2rJli9auXauff/5ZrVu3liTdfvvtqlOnjvr166e5c+dq+/btmj17th5//HHt2rUrpOWyZaAaMWKE2rdvr2rVqqlatWrq3Lmzc7pEd2bNmiWHw1HiZ8OGDWEsNQC7M8YoJ6/A6mIAAAA/VKxYUUOHDlX79u112WWXKTY2Vt98840kKSEhQXPmzFHTpk11/fXXq3Xr1rr33nt1/PjxkLdY2XKWv59++kmxsbE688wzJZ2YTvE///mPli9frrZt25ZYf9asWerRo4c2btzoUmF169ZVbKx3/TiZ5Q+Ifg+PX6Zp61I1/5meqpsYb3VxAAAIWGkz1aF0UT3LX9++fV1+f+211zRixAgtXLjQbaAqVK9ePdWoUSPEpQMQqSavTpEk/W/pLg3s3sLi0gAAgGhgyy5/ReXn5+ubb75RRkaGOnfuXOq65513nho2bKiePXtq5syZYSohAAAAgPLKli1UkrR69Wp17txZWVlZqlq1qiZNmqQ2bdq4Xbdhw4YaNWqUOnbsqOzsbH355Zfq2bOnZs2apcsuu8ztc7Kzs5Wdne38PT09PSTvA4D9nJyBFQAAIGC2DVStWrXSihUrdOTIEU2YMEF33323Zs+e7TZUtWrVSq1atXL+3rlzZyUnJ+utt97yGKiGDRuml19+OWTlBwAAABD9bNvlr2LFijrzzDN1wQUXaNiwYerQoYPeffddr59/8cUXa/PmzR4fHzp0qNLS0pw/ycnJwSg2gAhAAxUAAAgW27ZQFWeMcemiV5bly5erYcOGHh+Pj49XfDyzfAEAACDyFRRwWxBfBWuyc1sGqmeffVa9e/dWkyZNdPToUX3zzTeaNWuWpk6dKulE69Lu3bv1xRdfSJKGDx+uZs2aqW3btsrJydG4ceM0YcIETZgwwcq3AcCmGEMFAIgWFStWVExMjPbs2aO6deuqYsWKcvCHrkzGGO3fv18Oh0NxcXEBbcuWgWrv3r268847lZKSourVq6t9+/aaOnWqrrjiCklSSkqKkpKSnOvn5OToqaee0u7du1W5cmW1bdtWkydPVp8+fax6CwAAAEDIxcTEqHnz5kpJSdGePXusLk5EcTgcaty4sdf3rfW4HTve2NcK3NgXiH7NnpksSXquT2v97bIzLC4NAADBY4xRXl6e8vPzrS5KxIiLi/MYpiL+xr4AAAAAvFfYdS3Q7mvwnW1n+QOAUKFrOQAACBYCFQAAAAD4iUAFAAAAAH4iUAEAAACAnwhUAMod7s8BAACChUAFAAAAAH4iUAEod2ifAgAAwUKgAgAAAAA/EagAlDsMoQIAAMFCoAIAAAAAPxGoAJQ7NFABAIBgIVABAAAAgJ8IVADKHe5DBQAAgoVABQAAAAB+IlABKHdooAIAAMFCoAIAAAAAPxGoAJQ7NFABAIBgIVABAAAAgJ8IVADKHwZRAQCAICFQAQAAAICfCFQAyp3UtONWFwEAAEQJAhWAcuf75XusLgIAAIgSBCoAAAAA8BOBCgAAAAD8RKACUO5cdEYtq4sAAACiBIEKQLnT8fSaVhcBAABECQIVgHLHGKtLAAAAogWBCgAAAAD8RKACUO44HFaXAAAARAsCFQAAAAD4iUAFAAAAAH4iUAEodxyizx8AAAgOAhWAcseIaf4AAEBwEKgAAAAAwE8EKgAAAADwE4EKQLnDGCoAABAsBCoAAAAA8BOBCgAAAAD8RKACAAAAAD8RqAAAAADATwQqAAAAAPATgQoAAAAA/ESgAlDuOJg1HQAABAmBCgAAAAD8RKACUO4YY3UJAABAtCBQAQAAAICfCFQAyh3GUAEAgGAhUAEAAACAnwhUAAAAAOAnAhUA21mZfESj521XQUFoZo+gxx8AAAiWClYXAACK6/fhH5Kkmglxuv78xkHfPpP8AQCAYKGFCoBtbd53zOoiAAAAlIpABQAAAAB+IlABKHcYQwUAAIKFQAUAAAAAfiJQAQAAAICfCFQAAAAA4CcCFQAAAAD4yZaBasSIEWrfvr2qVaumatWqqXPnzvrll19Kfc7s2bPVsWNHVapUSWeccYZGjhwZptICCJW96VlWFwEAAKBUtgxUjRs31htvvKElS5ZoyZIluvzyy9WvXz+tXbvW7frbt29Xnz591LVrVy1fvlzPPvusHnvsMU2YMCHMJQcQTBOX7ba6CAAAAKWqYHUB3Onbt6/L76+99ppGjBihhQsXqm3btiXWHzlypJo2barhw4dLklq3bq0lS5borbfeUv/+/cNRZAARxMG86QAAIEhs2UJVVH5+vr755htlZGSoc+fObtdZsGCBevXq5bLsyiuv1JIlS5SbmxuOYgIAAAAoh2zZQiVJq1evVufOnZWVlaWqVatq0qRJatOmjdt1U1NTVb9+fZdl9evXV15eng4cOKCGDRuWeE52drays7Odv6enpwf3DQAAAACIerZtoWrVqpVWrFihhQsXauDAgbr77ru1bt06j+s7ivXhMca4XV5o2LBhql69uvOnSZMmwSs8AAAAgHLBtoGqYsWKOvPMM3XBBRdo2LBh6tChg95991236zZo0ECpqakuy/bt26cKFSqodu3abp8zdOhQpaWlOX+Sk5OD/h4AAAAARDfbdvkrzhjj0kWvqM6dO+unn35yWTZt2jRdcMEFiouLc/uc+Ph4xcfHB72cAAAAAMoPW7ZQPfvss5o7d6527Nih1atX67nnntOsWbN0++23SzrRunTXXXc513/wwQe1c+dODR48WOvXr9eYMWM0evRoPfXUU1a9BQBemL/1gJ7+70qlHWfyGAAAEJls2UK1d+9e3XnnnUpJSVH16tXVvn17TZ06VVdccYUkKSUlRUlJSc71mzdvrilTpuiJJ57Qhx9+qEaNGum9995jynTA5m77ZJEkqWKFGL12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S5borbfeUv/+/UNdZMAWsvPynf8/kplrYUmsZ2igAwAAYWDLFqri0tLSJEm1atXyuM6CBQvUq1cvl2VXXnmllixZotzckieW2dnZSk9Pd/kBIp0jKHdxiky+vHPCFgAACBbbBypjjAYPHqxLL71U7dq187heamqq6tev77Ksfv36ysvL04EDB0qsP2zYMFWvXt3506RJk6CXHQg313s42Ts1pJXzFjQAABAdbB+oHnnkEa1atUpff/11mes6it0R1Jy8DF18uSQNHTpUaWlpzp/k5OTgFBiwCbu3wuSHuIA2f/sAACBK2HIMVaFHH31UP/74o+bMmaPGjRuXum6DBg2Umprqsmzfvn2qUKGCateuXWL9+Ph4xcfHB7W8gNWKXjrYdzTbsnIEIicvOFGowO6JEgAARAVbtlAZY/TII49o4sSJmjFjhpo3b17mczp37qzp06e7LJs2bZouuOACxcXFhaqogG1NWZ1idRH88um8bUHZTvKhzLJXAgAACJAtA9XDDz+scePG6auvvlJiYqJSU1OVmpqq48ePO9cZOnSo7rrrLufvDz74oHbu3KnBgwdr/fr1GjNmjEaPHq2nnnrKircAWKJom4ybnq4RYdE2pnsHAACRw5aBasSIEUpLS1P37t3VsGFD58+3337rXCclJUVJSUnO35s3b64pU6Zo1qxZOvfcc/XKK6/ovffeY8p0lCtFe7nZvcebCXEBY2MiNFECAICIYssxVN6caI0dO7bEsm7dumnZsmUhKBEQGUyRNiqb5yll5xW4XR6slrWKsSeuF83csE8v/LhGj/ZoGZwNAwAAFGHLQAXAP3ZvlSoqv8B9YYMVqGJObuiesYslSUMmrHI+ZmwfNwEAQKSwZZc/AP6pXDHW+f9qlcr3ZCyROoYMAABEFgIVEEXiiowbiq8QmV9vh4KThAhUAAAgHCLzjAtA1ApWEApWMAMAACgNgQqIIowMAgAACC8CFQBb8bddqXjLFhNPAACAcCBQAVEkkmb588TB4CcAABBBCFQAgqZryzperxvs8OfL9qIheAIAAHsgUAGwFdqnAABAJPEpUN17770aM2aM28d+/PFHrVixwu1jL774ojp27Ohz4QD4pqxxQwUebqZrKyQqAAAQQXwKVGPHjtW8efPcPnbttdfqvffec/tYUlKSx7AFIHjGLUzy+NjSnYd17r+m6dvFntcJJyaNAAAA0YAuf0C0KtbS89D4pUrPytM/JqwOy8vXS4z363k0UAEAgEhCoAIQEq0aJPr1PH9n+SsxbToNYAAAIAwIVAAsQeABAADRgEAFwFb87fL3/fLdQS0HAACANwhUAGzF3/v6Lt5x2OX30lrAaBwDAADBQqACyom96dlWF8EFoQYAAEQDnwPV559/rtjY2BI/DofD42NffPFFKMoO4KTlSYdLLIvU2fIcEVtyAABQHvkcqIwxfv0ACJ3Jq1JKLPvZzbJI4G+XPwAAACtU8GXlgoKCUJUDAIKKyzgAACAcGEMFRIFIDA+0XAMAgGhAoAJsLL8gckNHi7pV/Xqevzf2LbGdoGwFAACgdEENVNnZ2Ro2bJguvfRSnX322br88sv14YcfKj8/P5gvA5QLMzfsU5sXpuqHFWXfXyn9eG4YSlS2velZzv+3rF96oAp1VIzcKAoAACKJT4Hqq6++UkJCgp599tkSj2VnZ6tHjx765z//qfnz52vTpk2aNWuWHnvsMV177bXBKi9QbtwzdrGy8wr0+Dcrylz3v0t3hb5AXti091jA2whLyxLdDQEAQJD4FKhmzJih7Oxs3XfffSUee+edd7Rw4ULFxMToySef1E8//aT/+7//U61atTRlyhR9/fXXQSs0gOjFLH8AACCS+DTL3+LFi9WqVSu1aNGixGOjRo2Sw+HQP/7xD7366qvO5V26dNFFF12kcePG6dZbbw28xAAAAABgEz61UKWmpqpt27Yllm/btk07d+6UJD300EMuj3Xq1EnnnXeeVqxY4X8pAZSqXmK81UUImmC1UDGLIAAACAefAtXhw4cVGxtbYvn8+fMlSWeffbYaNWpU4vEWLVro4MGDfhYRQFk6NKlhdRF85invOJifDwAARBCfAlX16tW1ffv2EsvnzZsn6URrlCeVK1f2sWgAvLX9QIbVRfADLUgAACDy+RSozj//fC1ZskTLly93LsvMzNSkSZPkcDjUs2dPt8/bvHmzTjvttMBKCsBjN7aYKGrUCVaXv+O53K4BAACEnk+B6v7775cxRldccYVeeuklffDBB+rRo4f279+vmjVr6vrrry/xnL1792r16tVq06ZN0AoNlFdzNx9wuzwmiqbGC9Y7+ceEVUHaEgAAgGc+zfJ34403avLkyfriiy/0yiuvSDpxxdzhcOi9995TlSpVSjxn9OjRKigoUK9evYJTYqAcKvyeHczIdvt4bBlNVJE0QUNBkIqalVvg8bHIqQ0AAGB3PgUqSRo7dqz69u2rSZMmaf/+/WrcuLHuvfdeXXLJJW7X37Ztm/r166c+ffoEXFigvMrIyVfVeM9f17JaqNKO5wa7SCGzenea1UUAAADwms+BSpL69++v/v37e7Xup59+6s9LACiiYmzpvXNjInAQVQQ1mgEAAHjk0xgqANaoUEZgisA85bHbXcPqlcJaDgAAgEAQqIAIUNhlz9M9mmLL6PIXSa1B7U6rbnURAAAAvOZTl78zzjjD7xdyOBzaunWr388HyrM9acdVs0pFj49H0yx/AAAAkcSnQLVjxw45HA6/ZgxzcMIH+G1Z0hG1beS55SaGtmYAAABL+DUpRceOHXXHHXeoX79+qly5crDLBKCY579fozsvPt3j42VNmx5JouedAACA8sCnQPXNN99o/Pjxmjp1qgYPHqwXXnhB/fv31+23367LL7+cVijAIqW1Xkn2vO+SleO6ImlMGQAAsDefOgrddNNN+uGHH5SSkqL3339fbdu21dixY9WrVy81btxYTz/9tFasWBGiogLwdM3izLpVw1uQELrojNpWFwEAAMBrfo28qFWrlh566CHNnz9f27Zt00svvaRq1arp7bffVseOHdWuXTv9+9//VnJycrDLC5RrGdn5bpdHYuOw8dBuVqtKXJhLAgAA4L+Ah7I3a9ZMzz//vNavX69Fixbp0Ucf1cGDB/Xss8+qU6dOwSgjgJMOHst2u5zutgAAANYI6txgp59+us444ww1atRIxhgVFBQEc/NAuRfjYfKJsuak8GdmTgAAAJTNr1n+isrMzNTEiRM1fvx4/f7778rPz1f16tV1//3366677gpGGQGUgQYqAAAAa/gVqAoKCvTrr79q3Lhx+vHHH5WZmam4uDhdffXVuuOOO3T11VerYkXPNyEF4B9PN/B1ROBk454azWhMAwAAkcSnQLVo0SKNHz9e3377rfbv3y+Hw6FLLrlEd9xxh2666SbVqFEjRMUEIHluiaKFyr2sXPeTeAAAAASLT4Gqc+fOcjgcatOmjZ544gndfvvtatKkSajKBqAYT2OlypqUorw2+szauN/t8r3pWWEuCQAAiFZ+TUqxdetW/etf/1KrVq2UkJDg1U+VKlWCXXag3PHUta+sSSnsKDxd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FJC13eeKmrhst9vlS3YcLrEsxiEN+2WDJOnNqRtDWq7iCgMSQQkAAEQDWwaqjIwMdejQQR988IFX62/fvl19+vRR165dtXz5cj377LN67LHHNGHChBCXFOVVqLOAI4iz8LnbVDC3DwAAUJ5VsLoA7vTu3Vu9e/f2ev2RI0eqadOmGj58uCSpdevWWrJkid566y31798/RKVEeVa0dcXu2cRdeIoJQZl9bXHyeswVY60AAICN2bKFylcLFixQr169XJZdeeWVWrJkiXJzc90+Jzs7W+np6S4/QDRyl51iLEyBhfHI05iv4hIq2vK6DwAAgKQoCVSpqamqX7++y7L69esrLy9PBw4ccPucYcOGqXr16s6fJk2ahKOoiBqR02ri7p5TVgYqJy+rsGJsVBymAABAlIqaM5Xi3ZoKp2b2NFZk6NChSktLc/4kJyeHvIyITna/D5W7STNiQ9Hnz0d0+QMAANEgKvrSNGjQQKmpqS7L9u3bpwoVKqh27dpunxMfH6/4+PhwFA9RyHUMlfXhpDRus1MoxlB5GXyCNbsfswQCAAA7iIoWqs6dO2v69Okuy6ZNm6YLLrhAcXFxFpUK0azoubzN85TbAhbv8peSdlySlHwoMyxFkk61Ipe9nvvlD41fFsTSAAAA+MeWgerYsWNasWKFVqxYIenEtOgrVqxQUlKSpBPd9e666y7n+g8++KB27typwYMHa/369RozZoxGjx6tp556yoriA7biroWq+LLOw2ZIkgZ89mcYShQcMzbss7oIAAAA9uzyt2TJEvXo0cP5++DBgyVJd999t8aOHauUlBRnuJKk5s2ba8qUKXriiSf04YcfqlGjRnrvvfeYMh0h423rir+C2erlyyx/W/dnBO+FPSjsGlhAlz0AABAFbBmounfvXuoJ69ixY0ss69atm5YtowsQws/uPf7chSdvy+xL5vH9PlThHXMFAAAQCrbs8gfYXSSd47trjLJyIo3CgERQAgAA0YBABfhhfcqpG0HbfVIKd9Om22DWdO06fNzqIgAAAASMQAX4YW96dki37y4E+b0tty1UQds8AABAuUagAgJm73Syce9Rq4vgoqyefrdd1DQs5QAAAAgGAhUQILu39hzJzLW6CG7Vqer+xtoNqlVy+d3bySsAAACsQKACyiFPXQrDObbKDuO4AAAAAkWgAgIUilywZk9aCLZ6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2aNevXqpR48eWrFihdXFKdfYpwPH/mwN9t3Ase/aB/tzcLBPh1+077sEqiD74IMP1KhRI/Xt21dr1661ujgRa8iQITr99NOVkJCg9evXq2vXrlYXqdxinw4c+7M12HcDx75rH+zPwcE+HX7lYt81CIqCggIzefJk07NnT/PWW2+Z888/39xwww0mPz/f6qJFlJycHPPII48Yh8NhvvnmG+fyvXv3Wliq8ol9OnDsz9Zg3w0c+659sD8HB/t0+JWnfbeC1YEuWjgcDtWvX1933nmn+vfvr06dOql79+769ddf1bt3b6uLFxGMMYqLi1PXrl21evVqHThwQBs2bNDQoUN14MABxcTE6Pbbb9eAAQNUsWJFq4sb9dinA8P+bB323cCw79oL+3Pg2KetUZ72XYcxUdqZMcTS09O1bt06NWnSRKeddprbdW6++WZt3rxZs2fPVmJiYphLGBlycnKUn5+vypUrKz8/X7GxscrLy9MTTzyh//3vf8rNzdUdd9yhM844Q2vXrtXnn3+u119/XQMHDlTlypWtLn5UYZ8OHPuzNdh3A8e+ax/sz8HBPh1+5XrftbJ5LFK9/vrrplq1aqZdu3amWrVqZvjw4WbXrl3GGGPy8vKcTZlbt241lStXNu+9956VxbWtN954w5x11llm6tSpzmV5eXnGGGMWLFhg7r77bvPjjz+6POexxx4zHTp0MKtXrw5rWaMd+3Tg2J+twb4bOPZd+2B/Dg726fAr7/sugcpHU6ZMMa1btzaTJk0y27ZtM6+99ppp27atuffee53rFBQUOP//z3/+09SvX98kJycbY4zJyMgwx44dC3u57eTgwYPmwQcfNO3btzfVqlUz119/vdm/f78xxrXuVq1aZbKysowxxvlFTE1NNQ6HwyxatCj8BY9S7NOBYX+2DvtuYNh37YX9OXDs09Zg3yVQ+eyxxx4z5513nsuy999/37Rq1cqMGjXKGHPqKogxxhw7dsycfvrp5rHHHjNffPGFufTSS813330X1jLbzbZt28yQIUPM5MmTzdy5c43D4TBff/2186BW9EtXqHDZ119/berVq2dWrlwZ1jJHM/bpwLA/W4d9NzDsu/bC/hw49mlrsO8SqHySn59vBg4caG655RbnlQ1jjNmzZ4/5+9//bjp06GCOHj3qXLfQiy++aBwOh6lYsaIZOnRo2MttN3l5eWbnzp3O32+66SbTvn17s337drfrFx7s1q9fb3r16mX+9re/haOY5QL7dODYn63Bvhs49l37YH8ODvbp8GPfPYFA5aXCL92wYcNMkyZNSnw5f/zxR3PBBRc4k7gxJxL4ww8/bBwOh7nvvvvM4cOHw1hi+yus04MHD5q4uDgzbNgwly+jMSeagV9++WUzYMAAk5CQYG6//XaTnp5uRXGjDvt0cLE/hw/7bnCx71qL/Tn42KfDg333FG7s66WCggJJ0qBBg5SWlqbx48e7PN69e3fFxMTo4MGDzmUHDhxQYmKi5s6dq08//VQ1atQIZ5FtyRSZVNLhcCgvL0+1atXSc889p3feeUfr1693WTchIUE1a9bUsWPHNHv2bI0bNy66ZoWxEPt04NifQysrK8vtcvZd73mqQ/bd8Nu3b59LvRdif/aNp3pknw6dJUuWOI8lReuZfbcIi4Kc7SQnJ5vx48eb+fPnO9NyYfLOzc11Wfett94yiYmJZvHixS7Lzz33XPPQQw+Fpbx25W09FvalLdqn9rTTTjMPPPCAOXTokPn111/N2LFjjTEmKm8AFw579uwxN9xwg/n222+NMa51zT7tHW/rkP05uLZt22bat29vnn/++RKPse96x9s6ZN8NvW3btpm+ffuaAQMGmDVr1rg8xv7sPW/rkX06eLZu3WquueYa43A4zOeff+7yGPuuq3IfqAoKCsxjjz1mEhMTTbdu3UyVKlXMPffcY/bs2VNivSFDhpgvv/zSGGNMx44dTc+ePc3kyZONMcYsXbrUdOjQwUybNi3s78EOfK3HcePGOQ9khQe9iRMnmtjYWHPOOecYh8NhPvzww7C/j2jyyiuvGIfDYS6++GKTkZFhjHH948E+XTZv65D9OTgKCgrM3//+d1OhQgVzww03OGfncrce+657vtYh+25oFF5I/Pzzz03NmjXNTTfdZBYvXmxSU1NdHi/8P/uze/7UI/t04AoKCszAgQNNTEyMueaaa0yNGjXMhAkTjDGcR3hSrgPV9u3bTffu3c0ll1xiFixYYLKyssyoUaNMu3btzG+//eZcb+zYsaZWrVrm3HPPNcuWLTPGGLNu3Tpz3XXXmYoVK5pevXqZhIQEc8sttzhPusoTf+px1apVLtvYtWuXGTJkiHE4HOaWW25xTqUJ//Xu3dvccsst5rLLLjMvvPCCMebUgZB92jve1iH7c+A2b95satasadq2bevcJ91h3/XMnzpk3w2d/Px889e//tW88847zmXF98nPPvuM/bkMvtYj+3RgJk2aZCpXrmwuvPBCs3DhQmOMMZ07dzb333+/MeZUiOVY7KrcBaqiVzM2b95shg8fbjZs2OBctm/fPtOhQwfnLDHHjx83L7/8shkxYoTzSkfhNtLS0sy0adPMBx98YObNmxfGd2G9YNRjoezsbDNo0CBTq1YtM3PmzLCUP5oUnwa2sBn+3nvvNZMmTTJDhw41rVu3NuvWrTPGGJOenm5effVV89FHH7FPnxSMOizE/uy9ovW+Y8cO07ZtW/P3v//dGGPMH3/8YQYPHmxee+0188svvzhniXrxxRc5HhcRjDosxL4bmOLHkd9//920bNnS5Obmmj/++MNcc8015sorrzQPP/ywWbBggTHGmJdeeoljcTHBqMdC7NPeKVrno0aNcrZGGWNMZmamueOOO8z111/vDEbHjh0zr7zyCsfiIhzGuBnZF6WOHz+umJgYxcfHSzoxWDcrK8s5IG7v3r264447tGfPHl188cXq16+frrnmGgtLbE+hqMe9e/eqfv36oS561Cn+WRhj5HA4JEnt27fXN998o8zMTA0ZMkTnnHOO/vOf/2jz5s06++yzFRsba2XRbSMUdcj+XLbi9V5QUKDvv/9eN9xwg3r16qUNGzboggsu0JYtW7R//35dccUVGjt2rLWFtplQ1CH7rn+KfxaStGjRIl111VX69NNP9dprr+kvf/mLKlWqpBkzZmj16tVat26dGjRoYGGp7ScU9cg+XTp3x5GYmBNz1uXn5ys2NlZPPPGEZsyYoZUrVzr/RhZdDyo/k1I888wz5vzzzzd/+ctfzLvvvmvS0tJcHt+0aZOpVKmS6d27txk7dqy5/vrrzVlnnWVee+01YwwDFwtRj/bh6bPIz883u3btchn3884775g6deoYh8Nh3n33XZOdnW1l0W2DOrSGp3o/dOiQueuuu8wll1xiVq5c6ZzmeNSoUaZVq1bmo48+MsZwHDGGOrQTT5/FggULTM+ePU2nTp3M/fff76zz9PR0065dO3PPPfcYY0yJVpXyinoMv+J1XjhtfGEdF/47efJkU61aNZd7fMFV1Aeq7Oxsc8MNN5g2bdqYb775xtx1112mTZs25qqrriqx7ooVK5z/z8vLM08+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WrFihWnQoIE5dOiQc1l6eroZMmSISUxMNN26dTM33nijqVy5svnwww+NMeVvoB31aB98FoGjDq1BvQeOOrQPPovgoB7DjzqPPBWsCnITJkzQoEGDFB8fr9zcXN199916+OGHVb9+fUkn7uxcOKhuxowZatGihWrWrKmcnBxVrFhRiYmJ+ve//61OnTppzZo12rt3r5YtW6azzz5bUvkZaEc92gefReCoQ2tQ74GjDu2DzyI4qMfwo84jmBUpbvHixebss882w4cPNytXrjQfffSRqVu3rhk4cKA5ePCgMcaY/Px8k5uba4wx5rrrrjMPP/ywFUW1NerRPvgsAkcdWoN6Dxx1aB98FsFBPYYfdR7ZwhqoCpsaR4wYYRo3buwcSGfMibnyL774YvPKK684l+Xn55uCggLTokUL8/PPPxtjjNm4caO55ZZbTFJSUjiLbivUo33wWQSOOrQG9R446tA++CyCg3oMP+o8OoR1UorCpsbt27frrLPOUoUKp3ocDhgwQB07dtQvv/yitWvXSjoxj/7ixYuVkJCg888/X4MGDVL79u118OBB1atXL5xFtxXq0T74LAJHHVqDeg8cdWgffBbBQT2GH3UeHUIaqKZPn67HHntM7777rv7880/n8ksuuUTz589XamqqJCk/P19VqlRRv3795HA4NG3aNOe6U6ZM0Zo1a9SqVStNnz5df/zxh6ZNm6b4+PhQFt1WqEf74LMIHHVoDeo9cNShffBZBAf1GH7UeXQKSaBKSUlR3759dccdd+jQoUMaPXq0evXq5dxxevXqpWbNmunf//63pFPp/IorrlBMTIy2bNni3FZcXJzq1KmjsWPHau3aterYsWMoimxL1KN98FkEjjq0BvUeOOrQPvgsgoN6DD/qPMoFuw9hRkaGufvuu83NN99stm3b5lzeqVMnM2DAAGOMMXl5eeaLL74wMTEx5o8//nB5/u233266d+/u/H3fvn3BLmJEoB7tg88icNShNaj3wFGH9sFnERzUY/hR59Ev6C1UCQkJio+P14ABA9S8eXPl5eVJkq6++mqtX79ekhQbG6ubbrpJ/fr10/3336/Zs2fLGKPU1FRt3rxZd9xxh3N7devWDXYRIwL1aB98FoGjDq1BvQeOOrQPPovgoB7DjzqPfg5jTt6GOYhyc3MVFxcn6cRdnh0Oh+68805VrlxZo0aNci7LyspS7969tW7dOp177rlas2aNmjZtqu+++05NmjQJdrEiDvVoH3wWgaMOrUG9B446tA8+i+CgHsOPOo9uIQlU7lx22WW69957NWDAABljVFBQoNjYWO3du1erVq3S4sWL1axZM912223hKE7Eoh7tg88icNShNaj3wFGH9sFnERzUY/hR59EjLIFq27Zt6tKliyZPnuwcOFd4V2d4j3q0Dz6LwFGH1qDeA0cd2gefRXBQj+FHnUeXkE6bXpjV5s2bp6pVqzp3mJdfflmPP/649u3bF8qXjxrUo33wWQSOOrQG9R446tA++CyCg3oMP+o8OlUoexX/FU75+Oeff6p///6aPn26HnjgAWVmZurLL7/kBmReoh7tg88icNShNaj3wFGH9sFnERzUY/hR51EqyLMGlnD8+HFz5plnGofDYeLj480bb7wR6peMStSjffBZBI46tAb1Hjjq0D74LIKDegw/6jz6hGUM1RVXXKGWLVvqnXfeUaVKlUL9clGLerQPPovAUYfWoN4DRx3aB59FcFCP4UedR5ewBKr8/HzFxsaG+mWiHvVoH3wWgaMOrUG9B446tA8+i+CgHsOPOo8uYZs2HQAAAACiTUhn+QMAAACAaEagAgAAAAA/EagAAAAAwE8EKgAAAADwE4EKAAAAAPxEoAIAAAAAPxGoAAARw+Fw+PTTrFkzSVL37t3lcDi0Y8cOS8sPAIg+FawuAAAA3rr77rtLLJs3b562bt2qDh066Nxzz3V5rE6dOmEqGQCgvOLGvgCAiDZgwAB9/vnnevHFF/XSSy+5XScpKUmZmZlq0aKF4uLiwltAAEBUo4UKABD1mjZtanURAABRijFUAICo52kMVeE4q7y8PL3yyis688wzVblyZbVu3VqfffaZc70ZM2aoR48eqlatmmrWrKm77rpLBw8edPtaOTk5evfdd9WpUyclJiaqSpUquvDCCzV69GjRKQQAog8tVACAcu+mm27Sb7/9ps6dO6tFixaaPXu27r33XklSYmKibr31VnXo0EFXXHGFFi1apC+//FLbt2/XnDlz5HA4nNvJyMhQ7969NXfuXNWpU0eXXnqpYmJitGDBAt1///1avHixRo4cadXbBACEAIEKAFCu7dy5U4mJiVq3bp0aN24sSZo5c6Yuv/xyPffcc8rJydE333yj/v37S5LS09PVpUsXzZs3T7NmzVKPHj2c23r66ac1d+5c3Xnnnfroo49UtWpVSdL+/fvVt29fffzxx+rbt6+uuuqq8L9RAEBI0OUPAFDuvffee84wJUk9evTQ+eefr5SUFF111VXOMCVJ1apV0wMPPCBJmj17tnP5vn379Omnn6p58+b65JNPnGFKkurWrauPP/5Ykpz/AgCiA4EKAFCuVaxYUd26dSux/IwzzpAkXXHFFSUea9GihSQpJSXFuWz27NnKzc3VX//6V8XHx5d4TocOHZSYmKjFixcHq+gAABsgUAEAyrUGDRooJqbkn8MqVapIkk477TSPj2VnZzuXFU54MWLECI83Gj569KgOHDgQgncBALAKY6gAAOVa0Ukl/Hm8UH5+viTpvPPOU/v27QMuFwAgMhCoAAAIgsIxWN27d9c777xjcWkAAOFClz8AAIKgR48eio2N1c8//+xsrQIARD8CFQAAQXDaaadpwIAB2rx5s+688063Y6Xmz5+vKVOmWFA6AECo0OUPAIAgee+997Rt2zZ9/fXX+vnnn3XuueeqUaNGSk1N1ZYtW7R79249/vjj6tOnj9VFBQAECYEKAIAgSUhI0LRp0/T555/ryy+/1KpVq7Ro0SLVq1dPLVq00OOPP65bb73V6mICAILIYYwxVhcCAAAAACIRY6gAAAAAwE8EKgAAAADwE4EKAAAAAPxEoAIAAAAAPxGoAAAAAMBPBCoAAAAA8BOBCgAAAAD8RKACAAAAAD8RqAAAAADATwQqAAAAAPATgQoAAAAA/ESgAgAAAAA/EagAAAAAwE//D8C27E75IrtnAAAAAElFTkSuQmCC", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "fig, ax = plt.subplots(figsize=(10,8))\n", "df['residual'] = df[1] - df[2]\n", "df['mse'] = (df[1] - df[2])**2\n", "df.plot(x = 0, y='mse', figsize=(10,8), title = 'Mean Squared Error', ax = ax)\n", "ax.set_xlabel('Time', fontsize=15)\n", "ax.set_ylabel('MSE', fontsize = 15)\n" ] }, { "cell_type": "code", "execution_count": 27, "metadata": {}, "outputs": [ { "ename": "KeyboardInterrupt", "evalue": "", "output_type": "error", "traceback": [ "\u001b[1;31m---------------------------------------------------------------------------\u001b[0m", "\u001b[1;31mKeyboardInterrupt\u001b[0m Traceback (most recent call last)", "Cell \u001b[1;32mIn[27], line 2\u001b[0m\n\u001b[0;32m 1\u001b[0m get_ipython()\u001b[38;5;241m.\u001b[39mrun_line_magic(\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mmatplotlib\u001b[39m\u001b[38;5;124m'\u001b[39m, \u001b[38;5;124m'\u001b[39m\u001b[38;5;124mqt\u001b[39m\u001b[38;5;124m'\u001b[39m)\n\u001b[1;32m----> 2\u001b[0m test_predict2 \u001b[38;5;241m=\u001b[39m \u001b[43mmodel\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mpredict\u001b[49m\u001b[43m(\u001b[49m\u001b[43mX_train\u001b[49m\u001b[43m)\u001b[49m\n", "File \u001b[1;32md:\\anaconda3\\envs\\smartbuilding\\Lib\\site-packages\\keras\\src\\utils\\traceback_utils.py:117\u001b[0m, in \u001b[0;36mfilter_traceback..error_handler\u001b[1;34m(*args, **kwargs)\u001b[0m\n\u001b[0;32m 115\u001b[0m filtered_tb \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;01mNone\u001b[39;00m\n\u001b[0;32m 116\u001b[0m \u001b[38;5;28;01mtry\u001b[39;00m:\n\u001b[1;32m--> 117\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[43mfn\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 118\u001b[0m \u001b[38;5;28;01mexcept\u001b[39;00m \u001b[38;5;167;01mException\u001b[39;00m \u001b[38;5;28;01mas\u001b[39;00m e:\n\u001b[0;32m 119\u001b[0m filtered_tb \u001b[38;5;241m=\u001b[39m _process_traceback_frames(e\u001b[38;5;241m.\u001b[39m__traceback__)\n", "File \u001b[1;32md:\\anaconda3\\envs\\smartbuilding\\Lib\\site-packages\\keras\\src\\backend\\tensorflow\\trainer.py:442\u001b[0m, in \u001b[0;36mTensorFlowTrainer.predict\u001b[1;34m(self, x, batch_size, verbose, steps, callbacks)\u001b[0m\n\u001b[0;32m 437\u001b[0m \u001b[38;5;129m@traceback_utils\u001b[39m\u001b[38;5;241m.\u001b[39mfilter_traceback\n\u001b[0;32m 438\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21mpredict\u001b[39m(\n\u001b[0;32m 439\u001b[0m \u001b[38;5;28mself\u001b[39m, x, batch_size\u001b[38;5;241m=\u001b[39m\u001b[38;5;28;01mNone\u001b[39;00m, verbose\u001b[38;5;241m=\u001b[39m\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mauto\u001b[39m\u001b[38;5;124m\"\u001b[39m, steps\u001b[38;5;241m=\u001b[39m\u001b[38;5;28;01mNone\u001b[39;00m, callbacks\u001b[38;5;241m=\u001b[39m\u001b[38;5;28;01mNone\u001b[39;00m\n\u001b[0;32m 440\u001b[0m ):\n\u001b[0;32m 441\u001b[0m \u001b[38;5;66;03m# Create an iterator that yields batches of input data.\u001b[39;00m\n\u001b[1;32m--> 442\u001b[0m epoch_iterator \u001b[38;5;241m=\u001b[39m \u001b[43mTFEpochIterator\u001b[49m\u001b[43m(\u001b[49m\n\u001b[0;32m 443\u001b[0m \u001b[43m \u001b[49m\u001b[43mx\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mx\u001b[49m\u001b[43m,\u001b[49m\n\u001b[0;32m 444\u001b[0m \u001b[43m \u001b[49m\u001b[43mbatch_size\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mbatch_size\u001b[49m\u001b[43m,\u001b[49m\n\u001b[0;32m 445\u001b[0m \u001b[43m \u001b[49m\u001b[43msteps_per_epoch\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43msteps\u001b[49m\u001b[43m,\u001b[49m\n\u001b[0;32m 446\u001b[0m \u001b[43m \u001b[49m\u001b[43mshuffle\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;28;43;01mFalse\u001b[39;49;00m\u001b[43m,\u001b[49m\n\u001b[0;32m 447\u001b[0m \u001b[43m \u001b[49m\u001b[43mdistribute_strategy\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mdistribute_strategy\u001b[49m\u001b[43m,\u001b[49m\n\u001b[0;32m 448\u001b[0m \u001b[43m \u001b[49m\u001b[43msteps_per_execution\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43msteps_per_execution\u001b[49m\u001b[43m,\u001b[49m\n\u001b[0;32m 449\u001b[0m \u001b[43m \u001b[49m\u001b[43m)\u001b[49m\n\u001b[0;32m 451\u001b[0m \u001b[38;5;66;03m# Container that configures and calls callbacks.\u001b[39;00m\n\u001b[0;32m 452\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m \u001b[38;5;28misinstance\u001b[39m(callbacks, callbacks_module\u001b[38;5;241m.\u001b[39mCallbackList):\n", "File \u001b[1;32md:\\anaconda3\\envs\\smartbuilding\\Lib\\site-packages\\keras\\src\\backend\\tensorflow\\trainer.py:625\u001b[0m, in \u001b[0;36mTFEpochIterator.__init__\u001b[1;34m(self, distribute_strategy, *args, **kwargs)\u001b[0m\n\u001b[0;32m 623\u001b[0m \u001b[38;5;28msuper\u001b[39m()\u001b[38;5;241m.\u001b[39m\u001b[38;5;21m__init__\u001b[39m(\u001b[38;5;241m*\u001b[39margs, \u001b[38;5;241m*\u001b[39m\u001b[38;5;241m*\u001b[39mkwargs)\n\u001b[0;32m 624\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_distribute_strategy \u001b[38;5;241m=\u001b[39m distribute_strategy\n\u001b[1;32m--> 625\u001b[0m dataset \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_get_iterator\u001b[49m\u001b[43m(\u001b[49m\u001b[43m)\u001b[49m\n\u001b[0;32m 626\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m \u001b[38;5;28misinstance\u001b[39m(dataset, tf\u001b[38;5;241m.\u001b[39mdistribute\u001b[38;5;241m.\u001b[39mDistributedDataset):\n\u001b[0;32m 627\u001b[0m dataset \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_distribute_strategy\u001b[38;5;241m.\u001b[39mexperimental_distribute_dataset(\n\u001b[0;32m 628\u001b[0m dataset\n\u001b[0;32m 629\u001b[0m )\n", "File \u001b[1;32md:\\anaconda3\\envs\\smartbuilding\\Lib\\site-packages\\keras\\src\\backend\\tensorflow\\trainer.py:634\u001b[0m, in \u001b[0;36mTFEpochIterator._get_iterator\u001b[1;34m(self)\u001b[0m\n\u001b[0;32m 633\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21m_get_iterator\u001b[39m(\u001b[38;5;28mself\u001b[39m):\n\u001b[1;32m--> 634\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mdata_adapter\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mget_tf_dataset\u001b[49m\u001b[43m(\u001b[49m\u001b[43m)\u001b[49m\n", "File \u001b[1;32md:\\anaconda3\\envs\\smartbuilding\\Lib\\site-packages\\keras\\src\\trainers\\data_adapters\\array_data_adapter.py:236\u001b[0m, in \u001b[0;36mArrayDataAdapter.get_tf_dataset\u001b[1;34m(self)\u001b[0m\n\u001b[0;32m 233\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m shuffle \u001b[38;5;241m==\u001b[39m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mbatch\u001b[39m\u001b[38;5;124m\"\u001b[39m:\n\u001b[0;32m 234\u001b[0m indices_dataset \u001b[38;5;241m=\u001b[39m indices_dataset\u001b[38;5;241m.\u001b[39mmap(tf\u001b[38;5;241m.\u001b[39mrandom\u001b[38;5;241m.\u001b[39mshuffle)\n\u001b[1;32m--> 236\u001b[0m dataset \u001b[38;5;241m=\u001b[39m \u001b[43mslice_inputs\u001b[49m\u001b[43m(\u001b[49m\u001b[43mindices_dataset\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[43m_inputs\u001b[49m\u001b[43m)\u001b[49m\n\u001b[0;32m 238\u001b[0m options \u001b[38;5;241m=\u001b[39m tf\u001b[38;5;241m.\u001b[39mdata\u001b[38;5;241m.\u001b[39mOptions()\n\u001b[0;32m 239\u001b[0m options\u001b[38;5;241m.\u001b[39mexperimental_distribute\u001b[38;5;241m.\u001b[39mauto_shard_policy \u001b[38;5;241m=\u001b[39m (\n\u001b[0;32m 240\u001b[0m tf\u001b[38;5;241m.\u001b[39mdata\u001b[38;5;241m.\u001b[39mexperimental\u001b[38;5;241m.\u001b[39mAutoShardPolicy\u001b[38;5;241m.\u001b[39mDATA\n\u001b[0;32m 241\u001b[0m )\n", "File \u001b[1;32md:\\anaconda3\\envs\\smartbuilding\\Lib\\site-packages\\keras\\src\\trainers\\data_adapters\\array_data_adapter.py:197\u001b[0m, in \u001b[0;36mArrayDataAdapter.get_tf_dataset..slice_inputs\u001b[1;34m(indices_dataset, inputs)\u001b[0m\n\u001b[0;32m 191\u001b[0m inputs \u001b[38;5;241m=\u001b[39m array_slicing\u001b[38;5;241m.\u001b[39mconvert_to_sliceable(\n\u001b[0;32m 192\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_inputs, target_backend\u001b[38;5;241m=\u001b[39m\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mtensorflow\u001b[39m\u001b[38;5;124m\"\u001b[39m\n\u001b[0;32m 193\u001b[0m )\n\u001b[0;32m 194\u001b[0m inputs \u001b[38;5;241m=\u001b[39m tree\u001b[38;5;241m.\u001b[39mlists_to_tuples(inputs)\n\u001b[0;32m 196\u001b[0m dataset \u001b[38;5;241m=\u001b[39m tf\u001b[38;5;241m.\u001b[39mdata\u001b[38;5;241m.\u001b[39mDataset\u001b[38;5;241m.\u001b[39mzip(\n\u001b[1;32m--> 197\u001b[0m (indices_dataset, \u001b[43mtf\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mdata\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mDataset\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mfrom_tensors\u001b[49m\u001b[43m(\u001b[49m\u001b[43minputs\u001b[49m\u001b[43m)\u001b[49m\u001b[38;5;241m.\u001b[39mrepeat())\n\u001b[0;32m 198\u001b[0m )\n\u001b[0;32m 200\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21mgrab_batch\u001b[39m(i, data):\n\u001b[0;32m 202\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21mgrab_one\u001b[39m(x):\n", "File \u001b[1;32md:\\anaconda3\\envs\\smartbuilding\\Lib\\site-packages\\tensorflow\\python\\data\\ops\\dataset_ops.py:741\u001b[0m, in \u001b[0;36mDatasetV2.from_tensors\u001b[1;34m(tensors, name)\u001b[0m\n\u001b[0;32m 737\u001b[0m \u001b[38;5;66;03m# Loaded lazily due to a circular dependency (dataset_ops ->\u001b[39;00m\n\u001b[0;32m 738\u001b[0m \u001b[38;5;66;03m# from_tensors_op -> dataset_ops).\u001b[39;00m\n\u001b[0;32m 739\u001b[0m \u001b[38;5;66;03m# pylint: disable=g-import-not-at-top,protected-access\u001b[39;00m\n\u001b[0;32m 740\u001b[0m \u001b[38;5;28;01mfrom\u001b[39;00m \u001b[38;5;21;01mtensorflow\u001b[39;00m\u001b[38;5;21;01m.\u001b[39;00m\u001b[38;5;21;01mpython\u001b[39;00m\u001b[38;5;21;01m.\u001b[39;00m\u001b[38;5;21;01mdata\u001b[39;00m\u001b[38;5;21;01m.\u001b[39;00m\u001b[38;5;21;01mops\u001b[39;00m \u001b[38;5;28;01mimport\u001b[39;00m from_tensors_op\n\u001b[1;32m--> 741\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[43mfrom_tensors_op\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_from_tensors\u001b[49m\u001b[43m(\u001b[49m\u001b[43mtensors\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mname\u001b[49m\u001b[43m)\u001b[49m\n", "File \u001b[1;32md:\\anaconda3\\envs\\smartbuilding\\Lib\\site-packages\\tensorflow\\python\\data\\ops\\from_tensors_op.py:23\u001b[0m, in \u001b[0;36m_from_tensors\u001b[1;34m(tensors, name)\u001b[0m\n\u001b[0;32m 22\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21m_from_tensors\u001b[39m(tensors, name): \u001b[38;5;66;03m# pylint: disable=unused-private-name\u001b[39;00m\n\u001b[1;32m---> 23\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[43m_TensorDataset\u001b[49m\u001b[43m(\u001b[49m\u001b[43mtensors\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mname\u001b[49m\u001b[43m)\u001b[49m\n", "File \u001b[1;32md:\\anaconda3\\envs\\smartbuilding\\Lib\\site-packages\\tensorflow\\python\\data\\ops\\from_tensors_op.py:31\u001b[0m, in \u001b[0;36m_TensorDataset.__init__\u001b[1;34m(self, element, name)\u001b[0m\n\u001b[0;32m 29\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21m__init__\u001b[39m(\u001b[38;5;28mself\u001b[39m, element, name\u001b[38;5;241m=\u001b[39m\u001b[38;5;28;01mNone\u001b[39;00m):\n\u001b[0;32m 30\u001b[0m \u001b[38;5;250m \u001b[39m\u001b[38;5;124;03m\"\"\"See `tf.data.Dataset.from_tensors` for details.\"\"\"\u001b[39;00m\n\u001b[1;32m---> 31\u001b[0m element \u001b[38;5;241m=\u001b[39m \u001b[43mstructure\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mnormalize_element\u001b[49m\u001b[43m(\u001b[49m\u001b[43melement\u001b[49m\u001b[43m)\u001b[49m\n\u001b[0;32m 32\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_structure \u001b[38;5;241m=\u001b[39m structure\u001b[38;5;241m.\u001b[39mtype_spec_from_value(element)\n\u001b[0;32m 33\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_tensors \u001b[38;5;241m=\u001b[39m structure\u001b[38;5;241m.\u001b[39mto_tensor_list(\u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_structure, element)\n", "File \u001b[1;32md:\\anaconda3\\envs\\smartbuilding\\Lib\\site-packages\\tensorflow\\python\\data\\util\\structure.py:134\u001b[0m, in \u001b[0;36mnormalize_element\u001b[1;34m(element, element_signature)\u001b[0m\n\u001b[0;32m 131\u001b[0m \u001b[38;5;28;01melse\u001b[39;00m:\n\u001b[0;32m 132\u001b[0m dtype \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mgetattr\u001b[39m(spec, \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mdtype\u001b[39m\u001b[38;5;124m\"\u001b[39m, \u001b[38;5;28;01mNone\u001b[39;00m)\n\u001b[0;32m 133\u001b[0m normalized_components\u001b[38;5;241m.\u001b[39mappend(\n\u001b[1;32m--> 134\u001b[0m \u001b[43mops\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mconvert_to_tensor\u001b[49m\u001b[43m(\u001b[49m\u001b[43mt\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mname\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[38;5;124;43mcomponent_\u001b[39;49m\u001b[38;5;132;43;01m%d\u001b[39;49;00m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[43m \u001b[49m\u001b[38;5;241;43m%\u001b[39;49m\u001b[43m \u001b[49m\u001b[43mi\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mdtype\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mdtype\u001b[49m\u001b[43m)\u001b[49m)\n\u001b[0;32m 135\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m nest\u001b[38;5;241m.\u001b[39mpack_sequence_as(pack_as, normalized_components)\n", "File \u001b[1;32md:\\anaconda3\\envs\\smartbuilding\\Lib\\site-packages\\tensorflow\\python\\profiler\\trace.py:183\u001b[0m, in \u001b[0;36mtrace_wrapper..inner_wrapper..wrapped\u001b[1;34m(*args, **kwargs)\u001b[0m\n\u001b[0;32m 181\u001b[0m \u001b[38;5;28;01mwith\u001b[39;00m Trace(trace_name, \u001b[38;5;241m*\u001b[39m\u001b[38;5;241m*\u001b[39mtrace_kwargs):\n\u001b[0;32m 182\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m func(\u001b[38;5;241m*\u001b[39margs, \u001b[38;5;241m*\u001b[39m\u001b[38;5;241m*\u001b[39mkwargs)\n\u001b[1;32m--> 183\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[43mfunc\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", "File \u001b[1;32md:\\anaconda3\\envs\\smartbuilding\\Lib\\site-packages\\tensorflow\\python\\framework\\ops.py:713\u001b[0m, in \u001b[0;36mconvert_to_tensor\u001b[1;34m(value, dtype, name, as_ref, preferred_dtype, dtype_hint, ctx, accepted_result_types)\u001b[0m\n\u001b[0;32m 711\u001b[0m \u001b[38;5;66;03m# TODO(b/142518781): Fix all call-sites and remove redundant arg\u001b[39;00m\n\u001b[0;32m 712\u001b[0m preferred_dtype \u001b[38;5;241m=\u001b[39m preferred_dtype \u001b[38;5;129;01mor\u001b[39;00m dtype_hint\n\u001b[1;32m--> 713\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[43mtensor_conversion_registry\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mconvert\u001b[49m\u001b[43m(\u001b[49m\n\u001b[0;32m 714\u001b[0m \u001b[43m \u001b[49m\u001b[43mvalue\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mdtype\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mname\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mas_ref\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mpreferred_dtype\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43maccepted_result_types\u001b[49m\n\u001b[0;32m 715\u001b[0m \u001b[43m\u001b[49m\u001b[43m)\u001b[49m\n", "File \u001b[1;32md:\\anaconda3\\envs\\smartbuilding\\Lib\\site-packages\\tensorflow\\python\\framework\\tensor_conversion_registry.py:234\u001b[0m, in \u001b[0;36mconvert\u001b[1;34m(value, dtype, name, as_ref, preferred_dtype, accepted_result_types)\u001b[0m\n\u001b[0;32m 225\u001b[0m \u001b[38;5;28;01mraise\u001b[39;00m \u001b[38;5;167;01mRuntimeError\u001b[39;00m(\n\u001b[0;32m 226\u001b[0m _add_error_prefix(\n\u001b[0;32m 227\u001b[0m \u001b[38;5;124mf\u001b[39m\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mConversion function \u001b[39m\u001b[38;5;132;01m{\u001b[39;00mconversion_func\u001b[38;5;132;01m!r}\u001b[39;00m\u001b[38;5;124m for type \u001b[39m\u001b[38;5;124m\"\u001b[39m\n\u001b[1;32m (...)\u001b[0m\n\u001b[0;32m 230\u001b[0m \u001b[38;5;124mf\u001b[39m\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mactual = \u001b[39m\u001b[38;5;132;01m{\u001b[39;00mret\u001b[38;5;241m.\u001b[39mdtype\u001b[38;5;241m.\u001b[39mbase_dtype\u001b[38;5;241m.\u001b[39mname\u001b[38;5;132;01m}\u001b[39;00m\u001b[38;5;124m\"\u001b[39m,\n\u001b[0;32m 231\u001b[0m name\u001b[38;5;241m=\u001b[39mname))\n\u001b[0;32m 233\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m ret \u001b[38;5;129;01mis\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m:\n\u001b[1;32m--> 234\u001b[0m ret \u001b[38;5;241m=\u001b[39m \u001b[43mconversion_func\u001b[49m\u001b[43m(\u001b[49m\u001b[43mvalue\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mdtype\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mdtype\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mname\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mname\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mas_ref\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mas_ref\u001b[49m\u001b[43m)\u001b[49m\n\u001b[0;32m 236\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m ret \u001b[38;5;129;01mis\u001b[39;00m \u001b[38;5;28mNotImplemented\u001b[39m:\n\u001b[0;32m 237\u001b[0m \u001b[38;5;28;01mcontinue\u001b[39;00m\n", "File \u001b[1;32md:\\anaconda3\\envs\\smartbuilding\\Lib\\site-packages\\tensorflow\\python\\framework\\constant_tensor_conversion.py:29\u001b[0m, in \u001b[0;36m_constant_tensor_conversion_function\u001b[1;34m(v, dtype, name, as_ref)\u001b[0m\n\u001b[0;32m 26\u001b[0m \u001b[38;5;28;01mfrom\u001b[39;00m \u001b[38;5;21;01mtensorflow\u001b[39;00m\u001b[38;5;21;01m.\u001b[39;00m\u001b[38;5;21;01mpython\u001b[39;00m\u001b[38;5;21;01m.\u001b[39;00m\u001b[38;5;21;01mframework\u001b[39;00m \u001b[38;5;28;01mimport\u001b[39;00m constant_op \u001b[38;5;66;03m# pylint: disable=g-import-not-at-top\u001b[39;00m\n\u001b[0;32m 28\u001b[0m _ \u001b[38;5;241m=\u001b[39m as_ref\n\u001b[1;32m---> 29\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[43mconstant_op\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mconstant\u001b[49m\u001b[43m(\u001b[49m\u001b[43mv\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mdtype\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mdtype\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mname\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mname\u001b[49m\u001b[43m)\u001b[49m\n", "File \u001b[1;32md:\\anaconda3\\envs\\smartbuilding\\Lib\\site-packages\\tensorflow\\python\\ops\\weak_tensor_ops.py:142\u001b[0m, in \u001b[0;36mweak_tensor_binary_op_wrapper..wrapper\u001b[1;34m(*args, **kwargs)\u001b[0m\n\u001b[0;32m 140\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21mwrapper\u001b[39m(\u001b[38;5;241m*\u001b[39margs, \u001b[38;5;241m*\u001b[39m\u001b[38;5;241m*\u001b[39mkwargs):\n\u001b[0;32m 141\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m ops\u001b[38;5;241m.\u001b[39mis_auto_dtype_conversion_enabled():\n\u001b[1;32m--> 142\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[43mop\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 143\u001b[0m bound_arguments \u001b[38;5;241m=\u001b[39m signature\u001b[38;5;241m.\u001b[39mbind(\u001b[38;5;241m*\u001b[39margs, \u001b[38;5;241m*\u001b[39m\u001b[38;5;241m*\u001b[39mkwargs)\n\u001b[0;32m 144\u001b[0m bound_arguments\u001b[38;5;241m.\u001b[39mapply_defaults()\n", "File \u001b[1;32md:\\anaconda3\\envs\\smartbuilding\\Lib\\site-packages\\tensorflow\\python\\framework\\constant_op.py:276\u001b[0m, in \u001b[0;36mconstant\u001b[1;34m(value, dtype, shape, name)\u001b[0m\n\u001b[0;32m 177\u001b[0m \u001b[38;5;129m@tf_export\u001b[39m(\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mconstant\u001b[39m\u001b[38;5;124m\"\u001b[39m, v1\u001b[38;5;241m=\u001b[39m[])\n\u001b[0;32m 178\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21mconstant\u001b[39m(\n\u001b[0;32m 179\u001b[0m value, dtype\u001b[38;5;241m=\u001b[39m\u001b[38;5;28;01mNone\u001b[39;00m, shape\u001b[38;5;241m=\u001b[39m\u001b[38;5;28;01mNone\u001b[39;00m, name\u001b[38;5;241m=\u001b[39m\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mConst\u001b[39m\u001b[38;5;124m\"\u001b[39m\n\u001b[0;32m 180\u001b[0m ) \u001b[38;5;241m-\u001b[39m\u001b[38;5;241m>\u001b[39m Union[ops\u001b[38;5;241m.\u001b[39mOperation, ops\u001b[38;5;241m.\u001b[39m_EagerTensorBase]:\n\u001b[0;32m 181\u001b[0m \u001b[38;5;250m \u001b[39m\u001b[38;5;124;03m\"\"\"Creates a constant tensor from a tensor-like object.\u001b[39;00m\n\u001b[0;32m 182\u001b[0m \n\u001b[0;32m 183\u001b[0m \u001b[38;5;124;03m Note: All eager `tf.Tensor` values are immutable (in contrast to\u001b[39;00m\n\u001b[1;32m (...)\u001b[0m\n\u001b[0;32m 274\u001b[0m \u001b[38;5;124;03m ValueError: if called on a symbolic tensor.\u001b[39;00m\n\u001b[0;32m 275\u001b[0m \u001b[38;5;124;03m \"\"\"\u001b[39;00m\n\u001b[1;32m--> 276\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[43m_constant_impl\u001b[49m\u001b[43m(\u001b[49m\u001b[43mvalue\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mdtype\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mshape\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mname\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mverify_shape\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;28;43;01mFalse\u001b[39;49;00m\u001b[43m,\u001b[49m\n\u001b[0;32m 277\u001b[0m \u001b[43m \u001b[49m\u001b[43mallow_broadcast\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;28;43;01mTrue\u001b[39;49;00m\u001b[43m)\u001b[49m\n", "File \u001b[1;32md:\\anaconda3\\envs\\smartbuilding\\Lib\\site-packages\\tensorflow\\python\\framework\\constant_op.py:289\u001b[0m, in \u001b[0;36m_constant_impl\u001b[1;34m(value, dtype, shape, name, verify_shape, allow_broadcast)\u001b[0m\n\u001b[0;32m 287\u001b[0m \u001b[38;5;28;01mwith\u001b[39;00m trace\u001b[38;5;241m.\u001b[39mTrace(\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mtf.constant\u001b[39m\u001b[38;5;124m\"\u001b[39m):\n\u001b[0;32m 288\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m _constant_eager_impl(ctx, value, dtype, shape, verify_shape)\n\u001b[1;32m--> 289\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[43m_constant_eager_impl\u001b[49m\u001b[43m(\u001b[49m\u001b[43mctx\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mvalue\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mdtype\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mshape\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mverify_shape\u001b[49m\u001b[43m)\u001b[49m\n\u001b[0;32m 291\u001b[0m const_tensor \u001b[38;5;241m=\u001b[39m ops\u001b[38;5;241m.\u001b[39m_create_graph_constant( \u001b[38;5;66;03m# pylint: disable=protected-access\u001b[39;00m\n\u001b[0;32m 292\u001b[0m value, dtype, shape, name, verify_shape, allow_broadcast\n\u001b[0;32m 293\u001b[0m )\n\u001b[0;32m 294\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m const_tensor\n", "File \u001b[1;32md:\\anaconda3\\envs\\smartbuilding\\Lib\\site-packages\\tensorflow\\python\\framework\\constant_op.py:301\u001b[0m, in \u001b[0;36m_constant_eager_impl\u001b[1;34m(ctx, value, dtype, shape, verify_shape)\u001b[0m\n\u001b[0;32m 297\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21m_constant_eager_impl\u001b[39m(\n\u001b[0;32m 298\u001b[0m ctx, value, dtype, shape, verify_shape\n\u001b[0;32m 299\u001b[0m ) \u001b[38;5;241m-\u001b[39m\u001b[38;5;241m>\u001b[39m ops\u001b[38;5;241m.\u001b[39m_EagerTensorBase:\n\u001b[0;32m 300\u001b[0m \u001b[38;5;250m \u001b[39m\u001b[38;5;124;03m\"\"\"Creates a constant on the current device.\"\"\"\u001b[39;00m\n\u001b[1;32m--> 301\u001b[0m t \u001b[38;5;241m=\u001b[39m \u001b[43mconvert_to_eager_tensor\u001b[49m\u001b[43m(\u001b[49m\u001b[43mvalue\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mctx\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mdtype\u001b[49m\u001b[43m)\u001b[49m\n\u001b[0;32m 302\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m shape \u001b[38;5;129;01mis\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m:\n\u001b[0;32m 303\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m t\n", "File \u001b[1;32md:\\anaconda3\\envs\\smartbuilding\\Lib\\site-packages\\tensorflow\\python\\framework\\constant_op.py:96\u001b[0m, in \u001b[0;36mconvert_to_eager_tensor\u001b[1;34m(value, ctx, dtype)\u001b[0m\n\u001b[0;32m 76\u001b[0m \u001b[38;5;250m\u001b[39m\u001b[38;5;124;03m\"\"\"Converts the given `value` to an `EagerTensor`.\u001b[39;00m\n\u001b[0;32m 77\u001b[0m \n\u001b[0;32m 78\u001b[0m \u001b[38;5;124;03mNote that this function could return cached copies of created constants for\u001b[39;00m\n\u001b[1;32m (...)\u001b[0m\n\u001b[0;32m 90\u001b[0m \u001b[38;5;124;03m TypeError: if `dtype` is not compatible with the type of t.\u001b[39;00m\n\u001b[0;32m 91\u001b[0m \u001b[38;5;124;03m\"\"\"\u001b[39;00m\n\u001b[0;32m 92\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;28misinstance\u001b[39m(value, np\u001b[38;5;241m.\u001b[39mndarray):\n\u001b[0;32m 93\u001b[0m \u001b[38;5;66;03m# Make a copy explicitly because the EagerTensor might share the underlying\u001b[39;00m\n\u001b[0;32m 94\u001b[0m \u001b[38;5;66;03m# memory with the input array. Without this copy, users will be able to\u001b[39;00m\n\u001b[0;32m 95\u001b[0m \u001b[38;5;66;03m# modify the EagerTensor after its creation by changing the input array.\u001b[39;00m\n\u001b[1;32m---> 96\u001b[0m value \u001b[38;5;241m=\u001b[39m value\u001b[38;5;241m.\u001b[39mcopy()\n\u001b[0;32m 97\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;28misinstance\u001b[39m(value, ops\u001b[38;5;241m.\u001b[39mEagerTensor):\n\u001b[0;32m 98\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m dtype \u001b[38;5;129;01mis\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m \u001b[38;5;129;01mand\u001b[39;00m value\u001b[38;5;241m.\u001b[39mdtype \u001b[38;5;241m!=\u001b[39m dtype:\n", "\u001b[1;31mKeyboardInterrupt\u001b[0m: " ] } ], "source": [ "%matplotlib qt\n", "test_predict2 = model.predict(X_train)\n", "\n" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "plt.figure()\n", "var = 0\n", "plt.plot(y_train[:,var], label='Original Training Data', color='blue')\n", "plt.plot(test_predict2[:,var], label='Predicted Training Data', color='red',alpha=0.8)\n", "anomalies = np.where(abs(test_predict2[:,var] - y_train[:,var]) > 0.38)\n", "plt.scatter(anomalies,test_predict2[anomalies,var], color='black',marker =\"o\",s=100 )\n", "\n", "\n", "plt.title('Training Data - Predicted vs Actual')\n", "plt.xlabel('Time')\n", "plt.ylabel('Value')\n", "plt.legend()\n", "plt.show()" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "from sklearn.mixture import GaussianMixture\n", "import numpy as np\n", "import matplotlib.pyplot as plt\n", "from sklearn.decomposition import PCA\n", "\n", "\n", "# Generating random data for demonstration\n", "np.random.seed(0)\n", "X = test_predict1 - y_test\n", "\n", "\n", "pca = PCA(n_components=2)\n", "X = pca.fit_transform(X)\n", "\n", "\n", "# Creating the GMM instance with desired number of clusters\n", "gmm = GaussianMixture(n_components=2)\n", "\n", "# Fitting the model to the data\n", "gmm.fit(X)\n", "\n", "# Getting the cluster labels\n", "labels = gmm.predict(X)\n", "\n", "# Plotting the data points with colors representing different clusters\n", "plt.scatter(X[:, 0], X[:, 1], c=labels, cmap='viridis', alpha=0.5)\n", "plt.title('GMM Clustering')\n", "plt.xlabel('Feature 1')\n", "plt.ylabel('Feature 2')\n", "plt.show()\n" ] }, { "cell_type": "code", "execution_count": 37, "metadata": {}, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAnYAAAHWCAYAAAD6oMSKAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjguMywgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/H5lhTAAAACXBIWXMAAA9hAAAPYQGoP6dpAAC1mklEQVR4nOzdd3gc1fXw8e+d2aZVL5Zl2bLl3k0zxRiwaQFCJxA6AZI3ISGVJKSRBOeX0NJIQkkIAUJogdAJHWKqARtsY9ybbLmol5W0fea+f4wsW5ZkS/KuVuV8nkdg7c7MPbsr7R7dcq7SWmuEEEIIIcSAZ6Q6ACGEEEIIkRiS2AkhhBBCDBKS2AkhhBBCDBKS2AkhhBBCDBKS2AkhhBBCDBKS2AkhhBBCDBKS2AkhhBBCDBKS2AkhhBBCDBKS2AkhhBBCDBKS2AkhOvXAAw+glGLJkiXtbq+pqWH27NlkZGTw2muvAXDjjTeilMIwDDZt2tThWi0tLWRlZaGU4sorr+yL8JOusrKSH//4x8ycOZOMjAx8Ph8TJ07kO9/5DuvXr287btdzkywvvvgiN954Y9KuP3/+fObPn5+06wshEsuV6gCEEAPHtm3bOPnkk6msrOT111/nqKOOand/RkYG999/P//3f//X7vYnnniCWCyG2+3uy3CT5qOPPuKMM85Aa803v/lN5syZg8fjYe3atTz00EMcccQR1NfX90ksL774InfeeWfSkru77rorKdcVQiSHJHZCiG5Zv349J510ErFYjLfeeouZM2d2OObCCy/kn//8JwsWLMAwdg8I/OMf/+Dcc8/lueee68uQkyIQCHD22Wfj8/l4//33GTVqVNt98+fP52tf+xr/+c9/UhhhYgSDQfx+P9OmTUt1KEKIHpChWCHEfi1btoxjjjkGl8vFu+++22lSB3D11VdTXl7eNkQLsG7dOt59912uvvrqTs8JBAL84Ac/YOzYsXg8HkaOHMl3v/tdWlpa2h135513ctxxx1FYWEh6ejozZ87ktttuIxaLtTtu/vz5zJgxg8WLF3Psscfi9/sZN24ct9xyC7Zttx1n2za//vWvmTx5MmlpaeTk5DBr1iz+9Kc/7fO5+Pvf/05FRQW33XZbu6RuT+eff/4+r6GU6rSHrbS0tN1QdTAYbHtufD4feXl5zJ49m0cffRSAK6+8kjvvvLPtmru+ysrKANBac9ddd3HwwQeTlpZGbm4u559/fofh8l3P2dtvv83RRx+N3+9ve732HootKytDKcXvfvc7/vCHPzB27FgyMjKYM2cOH3zwQafP16RJk/B6vUybNo1HHnmEK6+8ktLS0n0+R0KI3pEeOyHEPr377rvceOONlJSU8OqrrzJixIguj504cSLHHnss9913H6eccgoA9913H6WlpZx44okdjg8Gg8ybN49t27bx05/+lFmzZrFy5Up+8YtfsGLFCl5//fW2+WkbN27kkksuaUsAly9fzm9+8xvWrFnDfffd1+66FRUVXHrppXz/+9/nl7/8JU8//TQ/+clPKC4u5oorrgDgtttu48Ybb+SGG27guOOOIxaLsWbNGhoaGvb5fLz66quYpsmZZ57Zk6exV6677jr+9a9/8etf/5pDDjmElpYWPvvsM2prawH4+c9/TktLC//5z39YtGhR23m7XqOvfe1rPPDAA3z729/m1ltvpa6ujl/96lccffTRLF++nOHDh7eds3PnTi677DKuv/56brrppnY9rp258847mTJlCrfffntbLJ///OfZvHkz2dnZANxzzz187Wtf4wtf+AJ//OMfaWxsZMGCBUQikUQ+TUKIPWkhhOjE/fffrwEN6OzsbF1VVdXlsb/85S81oKurq/X999+vvV6vrq2t1fF4XI8YMULfeOONWmut09PT9Ze+9KW2826++WZtGIZevHhxu+v95z//0YB+8cUXO23Psiwdi8X0gw8+qE3T1HV1dW33zZs3TwP6ww8/bHfOtGnT9CmnnNL2/RlnnKEPPvjgbj8fu0yZMkUXFRV1+/hdz82eAP3LX/6yw7Fjxoxp9/zMmDFDn3POOfu8/rXXXtvh+lprvWjRIg3o3//+9+1uLy8v12lpafr6669vu23Xc/bGG290uM68efP0vHnz2r7fvHmzBvTMmTN1PB5vu/2jjz7SgH700Ue11s5rVFRUpI888sh219uyZYt2u916zJgx+3xcQojekaFYIcQ+nXXWWTQ2NvLd734Xy7L2e/wFF1yAx+Ph4Ycf5sUXX6SioqLLlbAvvPACM2bM4OCDDyYej7d9nXLKKSilWLhwYduxS5cu5ayzziI/Px/TNHG73VxxxRVYlsW6devaXbeoqIgjjjii3W2zZs1iy5Ytbd8fccQRLF++nG984xu88sorBAKB7j8p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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "from sklearn.cluster import KMeans\n", "import numpy as np\n", "import matplotlib.pyplot as plt\n", "from sklearn.decomposition import PCA\n", "\n", "# Generating random data for demonstration\n", "np.random.seed(0)\n", "X = (test_predict1 - y_test)\n", "\n", "k = 2\n", "\n", "pca = PCA(n_components=2)\n", "X = pca.fit_transform(X)\n", "\n", "kmeans = KMeans(n_clusters=k)\n", "\n", "kmeans.fit(X)\n", "\n", "\n", "\n", "# Getting the cluster centers and labels\n", "centroids = kmeans.cluster_centers_\n", "# centroids = pca.transform(centroids)\n", "labels = kmeans.labels_\n", "\n", "# Plotting the data points and cluster centers\n", "plt.scatter(X[:, 0], X[:, 1], c=labels, cmap='viridis', alpha=0.5)\n", "plt.scatter(centroids[:, 0], centroids[:, 1], marker='x', c='red', s=200, linewidths=2)\n", "plt.text(centroids[0,0]+0.2, centroids[0,1]+0.5, 'Normal', fontsize=12, color='red')\n", "plt.text(centroids[1,0]+0.5, centroids[1,1]+0.2, 'Anomaly', fontsize=12, color='red')\n", "plt.title('KMeans Clustering')\n", "plt.xlabel('Feature 1')\n", "plt.ylabel('Feature 2')\n", "plt.tight_layout()\n" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "k = 60\n", "X= test_predict1 - y_test\n", "processed_data = []\n", "feat_df = pd.DataFrame(columns=[\"mean\",\"std\",])\n", "for i in range(0,len(X), 60):\n", " mean = X[i:i+k].mean(axis = 0)\n", " std = X[i:i+k].std(axis = 0)\n", " max = X[i:i+k].max(axis = 0)\n", " min = X[i:i+k].min(axis = 0)\n", " iqr = np.percentile(X[i:i+k], 75, axis=0) - np.percentile(X[i:i+k], 25,axis=0)\n", " data = np.concatenate([mean, std, max, min, iqr])\n", " processed_data.append([data])\n", "processed_data = np.concatenate(processed_data,axis=0) " ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "X = processed_data\n", "\n", "kmeans = KMeans(n_clusters=2, algorithm='elkan', max_iter=1000, n_init = 5)\n", "\n", "kmeans.fit(X)\n", "\n", "pca = PCA(n_components=2)\n", "X = pca.fit_transform(X)\n", "\n", "\n", "# Getting the cluster centers and labels\n", "centroids = kmeans.cluster_centers_\n", "centroids = pca.transform(centroids)\n", "labels = kmeans.labels_\n", "\n", "# Plotting the data points and cluster centers\n", "plt.scatter(X[:, 0], X[:, 1], c=labels, cmap='viridis', alpha=0.5)\n", "plt.scatter(centroids[:, 0], centroids[:, 1], marker='x', c='red', s=200, linewidths=2)\n", "plt.title('KMeans Clustering')\n", "plt.xlabel('Feature 1')\n", "plt.ylabel('Feature 2')\n", "plt.show()\n" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "from sklearn.mixture import GaussianMixture\n", "import numpy as np\n", "import matplotlib.pyplot as plt\n", "from sklearn.decomposition import PCA\n", "\n", "# Generating random data for demonstration\n", "np.random.seed(0)\n", "X = processed_data\n", "\n", "# Creating the GMM instance with desired number of clusters\n", "gmm = GaussianMixture(n_components=2, init_params='k-means++')\n", "\n", "# Fitting the model to the data\n", "gmm.fit(X)\n", "labels = gmm.predict(X)\n", "\n", "\n", "pca = PCA(n_components=2)\n", "X = pca.fit_transform(X)\n", "\n", "\n", "# Getting the cluster labels\n", "\n", "# Plotting the data points with colors representing different clusters\n", "plt.scatter(X[:, 0], X[:, 1], c=labels, cmap='viridis', alpha=0.5)\n", "plt.title('GMM Clustering')\n", "plt.xlabel('Feature 1')\n", "plt.ylabel('Feature 2')\n", "plt.show()\n", "\n" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "from sklearn.cluster import KMeans\n", "import numpy as np\n", "import matplotlib.pyplot as plt\n", "# Generating random data for demonstration\n", "np.random.seed(0)\n", "X = test_predict1 - y_test \n", "\n", "kmeans = KMeans(n_clusters=2)\n", "\n", "kmeans.fit(X)\n", "\n", "\n", "pca = PCA(n_components=2)\n", "X = pca.fit_transform(X)\n", "\n", "\n", "\n", "# Getting the cluster centers and labels\n", "centroids = kmeans.cluster_centers_\n", "centroids = pca.transform(centroids)\n", "labels = kmeans.labels_\n", "\n", "# Plotting the data points and cluster centers\n", "plt.figure()\n", "plt.scatter(X[:, 0], X[:, 1], c=labels, cmap='viridis', alpha=0.5)\n", "plt.scatter(centroids[:, 0], centroids[:, 1], marker='x', c='red', s=200, linewidths=2)\n", "plt.text(centroids[0,0], centroids[0,1], 'Normal', fontsize=12, color='red')\n", "plt.text(centroids[1,0], centroids[1,1], 'Anomaly', fontsize=12, color='red')\n", "plt.title('KMeans Clustering')\n", "plt.xlabel('Feature 1')\n", "plt.ylabel('Feature 2')\n", "plt.show()\n" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "329763" ] }, "execution_count": 26, "metadata": {}, "output_type": "execute_result" } ], "source": [ "sum(labels==0)" ] } ], "metadata": { "kernelspec": { "display_name": "tensorflow", "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.11.8" } }, "nbformat": 4, "nbformat_minor": 2 }