diff --git a/POET_Training.ipynb b/POET_Training.ipynb index 65767b4..22262c4 100644 --- a/POET_Training.ipynb +++ b/POET_Training.ipynb @@ -34,8 +34,8 @@ "name": "stderr", "output_type": "stream", "text": [ - "2025-02-11 15:40:37.253319: I tensorflow/core/util/port.cc:153] oneDNN custom operations are on. You may see slightly different numerical results due to floating-point round-off errors from different computation orders. To turn them off, set the environment variable `TF_ENABLE_ONEDNN_OPTS=0`.\n", - "2025-02-11 15:40:37.275142: I tensorflow/core/platform/cpu_feature_guard.cc:210] This TensorFlow binary is optimized to use available CPU instructions in performance-critical operations.\n", + "2025-01-23 14:37:53.766781: I tensorflow/core/util/port.cc:153] oneDNN custom operations are on. You may see slightly different numerical results due to floating-point round-off errors from different computation orders. To turn them off, set the environment variable `TF_ENABLE_ONEDNN_OPTS=0`.\n", + "2025-01-23 14:37:53.786741: I tensorflow/core/platform/cpu_feature_guard.cc:210] This TensorFlow binary is optimized to use available CPU instructions in performance-critical operations.\n", "To enable the following instructions: SSE4.1 SSE4.2 AVX AVX2 AVX_VNNI FMA, in other operations, rebuild TensorFlow with the appropriate compiler flags.\n" ] }, @@ -43,7 +43,7 @@ "name": "stdout", "output_type": "stream", "text": [ - "Running Keras in version 3.6.0\n" + "Running Keras in version 3.8.0\n" ] } ], @@ -65,9 +65,20 @@ "import os\n", "from preprocessing import *\n", "from sklearn import set_config\n", + "from importlib import reload\n", "set_config(transform_output = \"pandas\")" ] }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [], + "source": [ + "%load_ext autoreload\n", + "%autoreload 2" + ] + }, { "cell_type": "markdown", "metadata": {}, @@ -77,7 +88,7 @@ }, { "cell_type": "code", - "execution_count": 85, + "execution_count": 40, "metadata": {}, "outputs": [], "source": [ @@ -114,17 +125,17 @@ }, { "cell_type": "code", - "execution_count": 86, + "execution_count": 41, "metadata": {}, "outputs": [ { "data": { "text/html": [ - "
Model: \"sequential_4\"\n",
+       "
Model: \"sequential_2\"\n",
        "
\n" ], "text/plain": [ - "\u001b[1mModel: \"sequential_4\"\u001b[0m\n" + "\u001b[1mModel: \"sequential_2\"\u001b[0m\n" ] }, "metadata": {}, @@ -136,11 +147,11 @@ "
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━┓\n",
        "┃ Layer (type)                     Output Shape                  Param # ┃\n",
        "┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━┩\n",
-       "│ dense_17 (Dense)                │ (None, 128)            │         1,664 │\n",
+       "│ dense_7 (Dense)                 │ (None, 128)            │         1,664 │\n",
        "├─────────────────────────────────┼────────────────────────┼───────────────┤\n",
-       "│ dense_18 (Dense)                │ (None, 128)            │        16,512 │\n",
+       "│ dense_8 (Dense)                 │ (None, 128)            │        16,512 │\n",
        "├─────────────────────────────────┼────────────────────────┼───────────────┤\n",
-       "│ dense_19 (Dense)                │ (None, 12)             │         1,548 │\n",
+       "│ dense_9 (Dense)                 │ (None, 12)             │         1,548 │\n",
        "└─────────────────────────────────┴────────────────────────┴───────────────┘\n",
        "
\n" ], @@ -148,11 +159,11 @@ "┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━┓\n", "┃\u001b[1m \u001b[0m\u001b[1mLayer (type) \u001b[0m\u001b[1m \u001b[0m┃\u001b[1m \u001b[0m\u001b[1mOutput Shape \u001b[0m\u001b[1m \u001b[0m┃\u001b[1m \u001b[0m\u001b[1m Param #\u001b[0m\u001b[1m \u001b[0m┃\n", "┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━┩\n", - "│ dense_17 (\u001b[38;5;33mDense\u001b[0m) │ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m128\u001b[0m) │ \u001b[38;5;34m1,664\u001b[0m │\n", + "│ dense_7 (\u001b[38;5;33mDense\u001b[0m) │ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m128\u001b[0m) │ \u001b[38;5;34m1,664\u001b[0m │\n", "├─────────────────────────────────┼────────────────────────┼───────────────┤\n", - "│ dense_18 (\u001b[38;5;33mDense\u001b[0m) │ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m128\u001b[0m) │ \u001b[38;5;34m16,512\u001b[0m │\n", + "│ dense_8 (\u001b[38;5;33mDense\u001b[0m) │ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m128\u001b[0m) │ \u001b[38;5;34m16,512\u001b[0m │\n", "├─────────────────────────────────┼────────────────────────┼───────────────┤\n", - "│ dense_19 (\u001b[38;5;33mDense\u001b[0m) │ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m12\u001b[0m) │ \u001b[38;5;34m1,548\u001b[0m │\n", + "│ dense_9 (\u001b[38;5;33mDense\u001b[0m) │ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m12\u001b[0m) │ \u001b[38;5;34m1,548\u001b[0m │\n", "└─────────────────────────────────┴────────────────────────┴───────────────┘\n" ] }, @@ -321,7 +332,7 @@ }, { "cell_type": "code", - "execution_count": 88, + "execution_count": 5, "metadata": {}, "outputs": [ { @@ -439,7 +450,7 @@ }, { "cell_type": "code", - "execution_count": 89, + "execution_count": 6, "metadata": {}, "outputs": [], "source": [ @@ -463,7 +474,7 @@ }, { "cell_type": "code", - "execution_count": 90, + "execution_count": 7, "metadata": {}, "outputs": [], "source": [ @@ -509,7 +520,7 @@ }, { "cell_type": "code", - "execution_count": 91, + "execution_count": 59, "metadata": {}, "outputs": [], "source": [ @@ -519,8 +530,8 @@ "design = data_file[\"design\"]\n", "results = data_file[\"result\"]\n", "\n", - "df_design = pd.DataFrame(np.array(design[\"data\"]).transpose(), columns = design[\"names\"].asstr())\n", - "df_results = pd.DataFrame(np.array(results[\"data\"]).transpose(), columns = results[\"names\"].asstr())\n", + "df_design = pd.DataFrame(np.array(design[\"data\"]).transpose(), columns = np.array(design[\"names\"].asstr()))\n", + "df_results = pd.DataFrame(np.array(results[\"data\"]).transpose(), columns = np.array(results[\"names\"].asstr()))\n", "\n", "data_file.close()" ] @@ -543,14 +554,14 @@ }, { "cell_type": "code", - "execution_count": 92, + "execution_count": 9, "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ - "/home/signer/bin/miniconda3/envs/training/lib/python3.11/site-packages/sklearn/base.py:1473: ConvergenceWarning: Number of distinct clusters (1) found smaller than n_clusters (2). Possibly due to duplicate points in X.\n", + "/Users/hannessigner/miniforge3/envs/ai/lib/python3.12/site-packages/sklearn/base.py:1474: ConvergenceWarning: Number of distinct clusters (1) found smaller than n_clusters (2). Possibly due to duplicate points in X.\n", " return fit_method(estimator, *args, **kwargs)\n" ] }, @@ -564,7 +575,7 @@ } ], "source": [ - "X_train, X_val, X_test, y_train, y_val, y_test, scaler_X, scaler_y = preprocessing_training(df_design, df_results, func_dict_in, func_dict_out, \"off\", 'individual', 0.1)" + "X_train, X_val, X_test, y_train, y_val, y_test, scaler_X, scaler_y = preprocessing_training(df_design, df_results, func_dict_in, func_dict_out, \"over\", 'individual', 0.1)" ] }, { @@ -576,7 +587,7 @@ }, { "cell_type": "code", - "execution_count": 93, + "execution_count": 164, "metadata": {}, "outputs": [], "source": [ @@ -599,108 +610,54 @@ }, { "cell_type": "code", - "execution_count": 117, - "metadata": {}, - "outputs": [], - "source": [ - "# measure time\n", - "def model_training(model):\n", - " start = time.time()\n", - " callback = keras.callbacks.EarlyStopping(monitor='loss', patience=3)\n", - " history = model.fit(X_train.iloc[:, X_train.columns != \"Class\"], \n", - " y_train.iloc[:, y_train.columns != \"Class\"], \n", - " batch_size = batch_size, \n", - " epochs = 40, \n", - " validation_data = (X_val.iloc[:, X_val.columns != \"Class\"], y_val.iloc[:, y_val.columns != \"Class\"]),\n", - " callbacks = [callback])\n", - "\n", - " end = time.time()\n", - "\n", - " print(\"Training took {} seconds\".format(end - start))" - ] - }, - { - "cell_type": "code", - "execution_count": 118, + "execution_count": 42, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "Epoch 1/40\n", - "\u001b[1m3960/3960\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m6s\u001b[0m 2ms/step - loss: 1.8876e-06 - val_loss: 1.8770e-06\n", - "Epoch 2/40\n", - "\u001b[1m3960/3960\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m7s\u001b[0m 2ms/step - loss: 1.9907e-06 - val_loss: 1.8834e-06\n", - "Epoch 3/40\n", - "\u001b[1m3960/3960\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m7s\u001b[0m 2ms/step - loss: 1.6876e-06 - val_loss: 1.8772e-06\n", - "Epoch 4/40\n", - "\u001b[1m3960/3960\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m7s\u001b[0m 2ms/step - loss: 1.5167e-06 - val_loss: 1.8927e-06\n", - "Epoch 5/40\n", - "\u001b[1m3960/3960\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m7s\u001b[0m 2ms/step - loss: 2.0424e-06 - val_loss: 1.8783e-06\n", - "Epoch 6/40\n", - "\u001b[1m3960/3960\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m6s\u001b[0m 2ms/step - loss: 1.5759e-06 - val_loss: 1.8775e-06\n", - "Epoch 7/40\n", - "\u001b[1m3960/3960\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m7s\u001b[0m 2ms/step - loss: 1.7919e-06 - val_loss: 1.8742e-06\n", - "Epoch 8/40\n", - "\u001b[1m3960/3960\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m7s\u001b[0m 2ms/step - loss: 1.9016e-06 - val_loss: 1.8740e-06\n", - "Epoch 9/40\n", - "\u001b[1m3960/3960\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m7s\u001b[0m 2ms/step - loss: 1.7540e-06 - val_loss: 1.8810e-06\n", - "Epoch 10/40\n", - "\u001b[1m3960/3960\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m7s\u001b[0m 2ms/step - loss: 1.9548e-06 - val_loss: 1.8773e-06\n", - "Epoch 11/40\n", - "\u001b[1m3960/3960\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m7s\u001b[0m 2ms/step - loss: 2.0289e-06 - val_loss: 1.8712e-06\n", - "Epoch 12/40\n", - "\u001b[1m3960/3960\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m7s\u001b[0m 2ms/step - loss: 1.6964e-06 - val_loss: 1.8717e-06\n", - "Epoch 13/40\n", - "\u001b[1m3960/3960\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m7s\u001b[0m 2ms/step - loss: 2.1222e-06 - val_loss: 1.8696e-06\n", - "Epoch 14/40\n", - "\u001b[1m3960/3960\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m7s\u001b[0m 2ms/step - loss: 1.9142e-06 - val_loss: 1.8694e-06\n", - "Epoch 15/40\n", - "\u001b[1m3960/3960\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m7s\u001b[0m 2ms/step - loss: 1.6718e-06 - val_loss: 1.8697e-06\n", - "Epoch 16/40\n", - "\u001b[1m3960/3960\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m7s\u001b[0m 2ms/step - loss: 1.5208e-06 - val_loss: 1.8694e-06\n", - "Epoch 17/40\n", - "\u001b[1m3960/3960\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m7s\u001b[0m 2ms/step - loss: 1.8481e-06 - val_loss: 1.8691e-06\n", - "Epoch 18/40\n", - "\u001b[1m3960/3960\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m7s\u001b[0m 2ms/step - loss: 1.6943e-06 - val_loss: 1.8693e-06\n", - "Epoch 19/40\n", - "\u001b[1m3960/3960\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m7s\u001b[0m 2ms/step - loss: 1.8389e-06 - val_loss: 1.8690e-06\n", - "Epoch 20/40\n", - "\u001b[1m3960/3960\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m7s\u001b[0m 2ms/step - loss: 1.9054e-06 - val_loss: 1.8691e-06\n", - "Epoch 21/40\n", - "\u001b[1m3960/3960\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m7s\u001b[0m 2ms/step - loss: 1.6646e-06 - val_loss: 1.8702e-06\n", - "Epoch 22/40\n", - "\u001b[1m3960/3960\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m7s\u001b[0m 2ms/step - loss: 1.8724e-06 - val_loss: 1.8692e-06\n", - "Epoch 23/40\n", - "\u001b[1m3960/3960\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m7s\u001b[0m 2ms/step - loss: 1.7165e-06 - val_loss: 1.8690e-06\n", - "Epoch 24/40\n", - "\u001b[1m3960/3960\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m7s\u001b[0m 2ms/step - loss: 1.8717e-06 - val_loss: 1.8690e-06\n", - "Epoch 25/40\n", - "\u001b[1m3960/3960\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m7s\u001b[0m 2ms/step - loss: 1.8996e-06 - val_loss: 1.8690e-06\n", - "Epoch 26/40\n", - "\u001b[1m3960/3960\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m7s\u001b[0m 2ms/step - loss: 1.8146e-06 - val_loss: 1.8691e-06\n", - "Epoch 27/40\n", - "\u001b[1m3960/3960\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m7s\u001b[0m 2ms/step - loss: 1.9670e-06 - val_loss: 1.8689e-06\n", - "Epoch 28/40\n", - "\u001b[1m3960/3960\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m7s\u001b[0m 2ms/step - loss: 1.7449e-06 - val_loss: 1.8690e-06\n", - "Epoch 29/40\n", - "\u001b[1m3960/3960\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m7s\u001b[0m 2ms/step - loss: 2.0738e-06 - val_loss: 1.8690e-06\n", - "Epoch 30/40\n", - "\u001b[1m3960/3960\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m8s\u001b[0m 2ms/step - loss: 1.5405e-06 - val_loss: 1.8690e-06\n", - "Epoch 31/40\n", - "\u001b[1m3960/3960\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m7s\u001b[0m 2ms/step - loss: 1.6470e-06 - val_loss: 1.8692e-06\n", - "Epoch 32/40\n", - "\u001b[1m3960/3960\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m7s\u001b[0m 2ms/step - loss: 1.7679e-06 - val_loss: 1.8690e-06\n", - "Epoch 33/40\n", - "\u001b[1m3960/3960\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m7s\u001b[0m 2ms/step - loss: 1.7011e-06 - val_loss: 1.8690e-06\n", - "Epoch 34/40\n", - "\u001b[1m3960/3960\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m7s\u001b[0m 2ms/step - loss: 2.0628e-06 - val_loss: 1.8690e-06\n", - "Epoch 35/40\n", - "\u001b[1m3960/3960\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m7s\u001b[0m 2ms/step - loss: 1.7559e-06 - val_loss: 1.8690e-06\n", - "Epoch 36/40\n", - "\u001b[1m3960/3960\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m7s\u001b[0m 2ms/step - loss: 1.8712e-06 - val_loss: 1.8690e-06\n", - "Training took 245.66379165649414 seconds\n" + "Epoch 1/20\n", + "\u001b[1m7823/7823\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m14s\u001b[0m 2ms/step - loss: 0.0018 - val_loss: 3.6601e-05\n", + "Epoch 2/20\n", + "\u001b[1m7823/7823\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m13s\u001b[0m 2ms/step - loss: 3.6899e-05 - val_loss: 3.6822e-05\n", + "Epoch 3/20\n", + "\u001b[1m7823/7823\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m13s\u001b[0m 2ms/step - loss: 3.5005e-05 - val_loss: 3.5655e-05\n", + "Epoch 4/20\n", + "\u001b[1m7823/7823\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m13s\u001b[0m 2ms/step - loss: 3.4032e-05 - val_loss: 3.3455e-05\n", + "Epoch 5/20\n", + "\u001b[1m7823/7823\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m14s\u001b[0m 2ms/step - loss: 3.3279e-05 - val_loss: 3.3064e-05\n", + "Epoch 6/20\n", + "\u001b[1m7823/7823\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m14s\u001b[0m 2ms/step - loss: 3.3023e-05 - val_loss: 3.3338e-05\n", + "Epoch 7/20\n", + "\u001b[1m7823/7823\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m14s\u001b[0m 2ms/step - loss: 3.2532e-05 - val_loss: 3.2765e-05\n", + "Epoch 8/20\n", + "\u001b[1m7823/7823\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m13s\u001b[0m 2ms/step - loss: 3.2749e-05 - val_loss: 3.2730e-05\n", + "Epoch 9/20\n", + "\u001b[1m7823/7823\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m13s\u001b[0m 2ms/step - loss: 3.2961e-05 - val_loss: 3.2593e-05\n", + "Epoch 10/20\n", + "\u001b[1m7823/7823\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m14s\u001b[0m 2ms/step - loss: 3.2573e-05 - val_loss: 3.2576e-05\n", + "Epoch 11/20\n", + "\u001b[1m7823/7823\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m13s\u001b[0m 2ms/step - loss: 3.2442e-05 - val_loss: 3.2507e-05\n", + "Epoch 12/20\n", + "\u001b[1m7823/7823\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m14s\u001b[0m 2ms/step - loss: 3.2135e-05 - val_loss: 3.2548e-05\n", + "Epoch 13/20\n", + "\u001b[1m7823/7823\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m14s\u001b[0m 2ms/step - loss: 3.2451e-05 - val_loss: 3.2482e-05\n", + "Epoch 14/20\n", + "\u001b[1m7823/7823\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m14s\u001b[0m 2ms/step - loss: 3.2296e-05 - val_loss: 3.2475e-05\n", + "Epoch 15/20\n", + "\u001b[1m7823/7823\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m14s\u001b[0m 2ms/step - loss: 3.2081e-05 - val_loss: 3.2470e-05\n", + "Epoch 16/20\n", + "\u001b[1m7823/7823\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m14s\u001b[0m 2ms/step - loss: 3.2440e-05 - val_loss: 3.2471e-05\n", + "Epoch 17/20\n", + "\u001b[1m7823/7823\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m14s\u001b[0m 2ms/step - loss: 3.2050e-05 - val_loss: 3.2460e-05\n", + "Epoch 18/20\n", + "\u001b[1m7823/7823\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m14s\u001b[0m 2ms/step - loss: 3.2444e-05 - val_loss: 3.2452e-05\n", + "Epoch 19/20\n", + "\u001b[1m7823/7823\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m15s\u001b[0m 2ms/step - loss: 3.2259e-05 - val_loss: 3.2452e-05\n", + "Epoch 20/20\n", + "\u001b[1m7823/7823\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m15s\u001b[0m 2ms/step - loss: 3.2442e-05 - val_loss: 3.2448e-05\n", + "Training took 276.5459449291229 seconds\n" ] } ], @@ -710,19 +667,19 @@ }, { "cell_type": "code", - "execution_count": 102, + "execution_count": 69, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "\u001b[1m1/1\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 14ms/step\n" + "\u001b[1m32/32\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 1ms/step \n" ] }, { "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAAAlQAAAHFCAYAAAA0SmdSAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjAsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvlHJYcgAAAAlwSFlzAAAPYQAAD2EBqD+naQAAQlhJREFUeJzt3Xl4VOX5xvF7JpmshAESskGEaJGAQNkqEBdQVm1MtVVUbBClUAuIYSmKVQlaiVALLlQWa0EtFWwVq6gpqSg/kQCREimrVVEQEoIQJoCQ9f39QXOaIQuBAwwD3891zWXmPc/7nufMkM7dM2cmDmOMEQAAAE6b09cNAAAA+DsCFQAAgE0EKgAAAJsIVAAAADYRqAAAAGwiUAEAANhEoAIAALCJQAUAAGATgQoAAMAmAhVwChYuXCiHw+F1a968ufr06aNly5adlX1+/PHHGjx4sFq0aKGgoCC53W4lJydrzpw5OnLkyFnZpy+tXr1aGRkZOnjw4FlZ/y9/+YueeeaZWrc5HA5lZGSclf1eKBwOh8aMGWPd37NnjzIyMpSXl+e7pk7SR0ZGhhwOx7lvChcVAhVwGhYsWKCcnBytXr1a8+fPV0BAgG666Sa98847Z3Q/U6ZM0bXXXqvdu3friSeeUHZ2thYvXqy+ffsqIyNDjzzyyBnd3/lg9erVmjp1qk8CVU5Ojn7xi1+clf1eqPbs2aOpU6eeF4Gqrj5+8YtfKCcn59w3hYtKoK8bAPxRhw4d1L17d+v+oEGD1LRpU7322mu66aabzsg+/vrXv+rxxx/X8OHD9eKLL3r9P+wbbrhBkyZN4kVC0tGjRxUaGnpG1urZs+cZWceflZWVyeFwKDDQty8PR48eVUhIyBk5s9SyZUu1bNnyDHQF1I0zVMAZEBISoqCgILlcLq/xqVOnqkePHmrWrJkaN26srl276qWXXlJD/ib5448/rqZNm+q5556r9UUlIiJCAwYMsO4fO3ZMkydPVmJiooKCgtSiRQuNHj26xpme1q1bKyUlRVlZWeratatCQ0OVlJSkP/3pTzX2sXv3bo0cOVIJCQkKCgpSfHy8br31Vu3du9eqKS4u1sSJE732m56eXuPtyKq3il599VW1a9dOYWFh+uEPf+j1VmlGRoZ+/etfS5ISExOtt1U/+ugjr97ffPNNdenSRSEhIZo6daok6Q9/+IOuvfZaRUdHKzw8XB07dtSMGTNUVlZmrd+nTx+9++67+uabb7zetq3e44lv+W3atEk/+clP1LRpU4WEhKhz5856+eWXvWo++ugjORwOvfbaa/rNb36j+Ph4NW7cWP369dP27dtrPK61WbVqlfr27auIiAiFhYUpOTlZ7777rrX9s88+k8Ph0EsvvVRj7vvvvy+Hw6G3337bGvvPf/6jIUOGKDo6WsHBwWrXrp3+8Ic/1Nr3q6++qgkTJqhFixYKDg7WF1980aCeP/roI/3oRz+SJN1zzz3W41n9Mfz000+VmpqqZs2aKSQkRF26dNHrr7/utU7VW+nLly/Xvffeq+bNmyssLEwlJSX64osvdM8996hNmzYKCwtTixYtdNNNN+nf//53g/uo7S2/yspKzZgxQ0lJSQoODlZ0dLSGDh2qb7/91quuT58+6tChg3Jzc3XNNdcoLCxMl156qZ566ilVVlZ6rffb3/5Wbdu2VWhoqJo0aaJOnTrp2WefbdBjiQuAAdBgCxYsMJLMmjVrTFlZmSktLTW7du0yY8eONU6n02RlZXnVDxs2zLz00ksmOzvbZGdnmyeeeMKEhoaaqVOn1rufPXv2GEnm9ttvb1BflZWVZuDAgSYwMNA8+uijZvny5ebpp5824eHhpkuXLubYsWNWbatWrUzLli1N+/btzSuvvGL+8Y9/mNtuu81IMitXrrTqvv32WxMXF2eioqLMzJkzzT//+U+zZMkSc++995qtW7caY4w5cuSI6dy5s1fNs88+a9xut7n++utNZWWltZ4k07p1a3PllVea119/3bz33numT58+JjAw0Hz55ZfGGGN27dpl7r//fiPJvPnmmyYnJ8fk5OQYj8dj9R4XF2cuvfRS86c//cl8+OGHZt26dcYYY8aNG2fmzJljsrKyzIoVK8ysWbNMVFSUueeee6weNm/ebK666ioTGxtrrZ2Tk+PV45QpU6z727ZtMxEREeayyy4zr7zyinn33XfNnXfeaSSZ6dOnW3UffvihdXx33XWXeffdd81rr71mLrnkEtOmTRtTXl5e7/P30UcfGZfLZbp162aWLFli3nrrLTNgwADjcDjM4sWLrbouXbqYq666qsb8wYMHm+joaFNWVmYdp9vtNh07djSvvPKKWb58uZkwYYJxOp0mIyOjRt8tWrQwt956q3n77bfNsmXLzP79++vs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i091b7zxho4cOWJtPxU33HCDPvzww3o/pZaSkqIvv/xSkZGR1hm76rfWrVuf8n4bclbnRFUvxFVzpeNh8sUXX6x1/Yau3bdvX61YscIKNlVeeeUVhYWFnZGvWQgPD1ePHj305ptvevVVWVmpP//5z2rZsqXXW5wDBgxQixYttGDBAi1YsEAhISG68847re1hYWG67rrrtGHDBnXq1KnW56W2My6nq67nq23btmrTpo0+++yzWnvo3r2719u/dXE4HF7PqyS9++672r17d4P6qM31118vqebvS25urrZu3Xpavy/VNWnSRLfeeqtGjx6tAwcO6Ouvv7a1HvwDZ6iA07Bp0yaVl5dLOv72wZtvvqns7Gzdcsst1v/7//GPf6yZM2dqyJAhGjlypPbv36+nn366xotDXW677TY9+uijeuKJJ7Rt2zYNHz5cl112mb7//nutXbtW8+bN0+23364BAwaof//+GjhwoB588EEVFxfrqquu0saNGzVlyhR16dJFaWlpp3yMjz/+uN5//31de+21evjhh9WxY0cdPHhQWVlZGj9+vJKSkpSenq433nhD1157rcaNG6dOnTqpsrJSO3fu1PLlyzVhwgT16NHjlPbbsWNHSdKzzz6ru+++Wy6XS23btq33xbd///4KCgrSnXfeqUmTJunYsWOaM2eOioqKal3/zTff1Jw5c9StWzc5nU6v7xSrbsqUKVq2bJmuu+46PfbYY2rWrJkWLVqkd999VzNmzJDb7T6lY6tLZmam+vfvr+uuu04TJ05UUFCQXnjhBW3atEmvvfaa15mbgIAADR06VDNnzlTjxo3105/+tEYfzz77rK6++mpdc801+tWvfqXWrVvr0KFD+uKLL/TOO+9Y19ydCZdddplCQ0O1aNEitWvXTo0aNVJ8fLzi4+M1b9483XDDDRo4cKCGDRumFi1a6MCBA9q6dav+9a9/6a9//etJ109JSdHChQuVlJSkTp06af369frd735X48xSfX2cqG3btho5cqSef/55OZ1O3XDDDfr666/16KOPKiEhQePGjTvlx+Gmm26yvp+uefPm+uabb/TMM8+oVatWatOmzSmvBz/k00viAT9T26f83G636dy5s5k5c6bX1xMYY8yf/vQn07ZtWxMcHGwuvfRSk5mZaV566aU6P8VWm5UrV5pbb73VxMXFGZfLZRo3bmx69eplfve733l9Yu7o0aPmwQcfNK1atTIul8vExcWZX/3qV6aoqMhrvVatWpkf//jHNfbTu3dv07t3b6+xXbt2mXvvvdfExsYal8tl4uPjzeDBg83evXutmsOHD5tHHnnEtG3b1gQFBVkf1x83bpwpKCiw6nTCp8Oq93P33Xd7jU2ePNnEx8cbp9NpJJkPP/yw3t6NMeadd94xP/zhD01ISIhp0aKF+fWvf23ef/99r/nGHP9U3K233mqaNGliHA6H16e/dMKn/Iwx5t///re56aabjNvtNkFBQeaHP/xhjU+SVX1a7q9//avX+I4dO+r85NmJPv74Y3P99deb8PBwExoaanr27GneeeedWms///xz699fdnZ2rTU7duww9957r2nRooVxuVymefPmJjk52fz2t789ad/1qe15fO2110xSUpJxuVw1HsPPPvvM+loHl8tlYmNjzfXXX2/mzp1r1VT9Xp34aVFjjCkqKjLDhw830dHRJiwszFx99dXm448/rvXfa1191Pa1CRUVFWb69Onm8ssvNy6Xy0RFRZmf//zn1lctVOndu7e54ooravR19913e31a9Pe//71JTk42UVFRJigoyFxyySVm+PDh5uuvv67v4cQFxGFMA75hEAAAAHXiGioAAACbCFQAAAA2EagAAABsIlABAADYRKACAACwiUAFAABgE1/seY5UVlZqz549ioiIOCt/5gEAAJx5xhgdOnRI8fHxcjrrPg9FoDpH9uzZU+Mv1gMAAP+wa9euev9gPIHqHKn6sxm7du1S48aNfdwNAABoiOLiYiUkJJz0b08SqM6Rqrf5GjduTKACAMDPnOxyHS5KBwAAsIlABQAAYBOBCgAAwCYCFQAAgE0EKgAAAJsIVAAAADYRqAAAAGwiUAEAANhEoAIAALCJQAUAAGCT3wWqF154QYmJiQoJCVG3bt308ccf11u/cuVKdevWTSEhIbr00ks1d+7cGjVvvPGG2rdvr+DgYLVv315Lly61vV8AAHDx8KtAtWTJEqWnp+s3v/mNNmzYoGuuuUY33HCDdu7cWWv9jh07dOONN+qaa67Rhg0b9PDDD2vs2LF64403rJqcnBzdfvvtSktL02effaa0tDQNHjxYa9euPe39AgCAi4vDGGN83URD9ejRQ127dtWcOXOssXbt2unmm29WZmZmjfoHH3xQb7/9trZu3WqN3Xffffrss8+Uk5MjSbr99ttVXFys999/36oZNGiQmjZtqtdee+209lub4uJiud1ueTyeM/fHkY3RQc9BlVZU1r653rknWbqegvr+xZzsH5P//GsDAPibyCZNFBIUeEbXbOjr95nd61lUWlqq9evX66GHHvIaHzBggFavXl3rnJycHA0YMMBrbODAgXrppZdUVlYml8ulnJwcjRs3rkbNM888c9r7laSSkhKVlJRY94uLi096jKes7Hs1eab1mV8XAAA/tGrwRl3dvpVP9u03b/l99913qqioUExMjNd4TEyMCgoKap1TUFBQa315ebm+++67emuq1jyd/UpSZmam3G63dUtISGjYgQIAgNPidDh8tm+/OUNVxXHCg2WMqTF2svoTxxuy5qnud/LkyRo/frx1v7i4+MyHKleY9PCeM7smAAB+KtkV5rN9+02gioqKUkBAQI2zQoWFhTXOHlWJjY2ttT4wMFCRkZH11lSteTr7laTg4GAFBwc37OBOl8MhBYWf3X0AAICT8pu3/IKCgtStWzdlZ2d7jWdnZys5ObnWOb169apRv3z5cnXv3l0ul6vemqo1T2e/AADg4uI3Z6gkafz48UpLS1P37t3Vq1cvzZ8/Xzt37tR9990n6fjbbLt379Yrr7wi6fgn+mbPnq3x48drxIgRysnJ0UsvvWR9ek+SHnjgAV177bWaPn26fvKTn+jvf/+7/vnPf2rVqlUN3i8AALi4+VWguv3227V//349/vjjys/PV4cOHfTee++pVavjV/Tn5+d7fTdUYmKi3nvvPY0bN05/+MMfFB8fr+eee04/+9nPrJrk5GQtXrxYjzzyiB599FFddtllWrJkiXr06NHg/QIAgIubX30PlT87K99DBQAAzqqGvn77zTVUAAAA5ysCFQAAgE0EKgAAAJsIVAAAADYRqAAAAGwiUAEAANhEoAIAALCJQAUAAGATgQoAAMAmAhUAAIBNBCoAAACbCFQAAAA2EagAAABsIlABAADYRKACAACwiUAFAABgE4EKAADAJgIVAACATQQqAAAAmwhUAAAANhGoAAAAbCJQAQAA2ESgAgAAsIlABQAAYBOBCgAAwCYCFQAAgE0EKgAAAJsIVAAAADYRqAAAAGwiUAEAANhEoAIAALCJQAUAAGATgQoAAMAmAhUAAIBNBCoAAACbCFQAAAA2EagA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QMuXL1dISIiv27noVVZWqnv37po2bZokqUuXLtq8ebPmzJlDoPKRJUuW6M9//rP+8pe/6IorrlBeXp7S09MVHx+vu+++29ft+SUClZ+KiopSQEBAjbNRhYWFNc5a4dy5//779fbbb+v//u//1LJlS1+3c9Fav369CgsL1a1bN2usoqJC//d//6fZs2erpKREAQEBPuzw4hIXF6f27dt7jbVr105vvPGGjzrCr3/9az300EO64447JEkdO3bUN998o8zMTALVaeIaKj8VFBSkbt26KTs722s8OztbycnJPurq4mWM0ZgxY/Tmm29qxYoVSkxM9HVLF7W+ffvq3//+t/Ly8qxb9+7ddddddykvL48wdY5dddVVNb5G5PPPP1erVq181BG+//57OZ3eESAgIICvTbCBM1R+bPz48UpLS1P37t3Vq1cvzZ8/Xzt37tR9993n69YuOqNHj9Zf/vIX/f3vf1dERIR15tDtdis0NNTH3V18IiIialy/Fh4ersjISK5r84Fx48YpOTlZ06ZN0+DBg7Vu3TrNnz9f8+fP93VrF62bbrpJTz75pC655BJdccUV2rBhg2bOnKl7773X1635Lb42wc+98MILmjFjhvLz89WhQwfNmjWLj+n7QF3XrS1YsEDDhg07t82gVn369OFrE3xo2bJlmjx5sv7zn/8oMTFR48eP14gRI3zd1kXr0KFDevTRR7V06VIVFhYqPj5ed955px577DEFBQX5uj2/RKACAACwiWuoAAAAbCJQAQAA2ESgAgAAsIlABQAAYBOBCgAAwCYCFQAAgE0EKgAAAJsIVABwjrRu3ZovFgUuUAQqABekYcOG6eabb5Z0/FvS09PTz9m+Fy5cqCZNmtQYz83N1ciRI89ZHwDOHf6WHwA0UGlpqa0/y9G8efMz2A2A8wlnqABc0IYNG6aVK1fq2WeflcPhkMPh0Ndffy1J2rJli2688UY1atRIMTExSktL03fffWfN7dOnj8aMGaPx48crKipK/fv3lyTNnDlTHTt2VHh4uBISEjRq1CgdPnxYkvTRRx/pnnvukcfjsfaXkZEhqeZbfjt37tRPfvITNWrUSI0bN9bgwYO1d+9ea3tGRoY6d+6sV199Va1bt5bb7dYdd9yhQ4cOnd0HDcApI1ABuKA9++yz6tWrl0aMGKH8/Hzl5+crISFB+fn56t27tzp37qxPP/1UWVlZ2rt3rwYPHuw1/+WXX1ZgYKA++eQTzZs3T5LkdDr13HPPadOmTXr55Ze1YsUKTZo0SZKUnJysZ555Ro0bN7b2N3HixBp9GWN0880368CBA1q5cqWys7P15Zdf6vbbb/eq+/LLL/XWW29p2bJlWrZsmVauXKmnnnrqLD1aAE4Xb/kBuKC53W4FBQUpLCxMsbGx1vicOXPUtWtXTZs2zRr705/+pISEBH3++ee6/PLLJUk/+MEPNGPGDK81q1+PlZiYqCeeeEK/+tWv9MILLygoKEhut1sOh8Nrfyf65z//qY0bN2rHjh1KSEiQJL366qu64oorlJubqx/96EeSpMrKSi1cuFARERGSpLS0NH3wwQd68skn7T0wAM4ozlABuCitX79eH374oRo1amTdkpKSJB0/K1Sle/fuNeZ++OGH6t+/v1q0aKGIiAgNHTpU+/fv15EjRxq8/61btyohIcEKU5LUvn17NWnSRFu3brXGWrdubYUpSYqLi1NhYeEpHSuAs48zVAAuSpWVlbrppps0ffr0Gtvi4uKsn8PDw722ffPNN7rxxht133336YknnlCzZs20atUqDR8+XGVlZQ3evzFGDofjpOMul8tru8PhUGVlZYP3A+DcIFABuOAFBQWpoqLCa6xr165644031Lp1awUGNvx/Cj/99FOVl5fr97//vZzO4yf5X3/99ZPu70Tt27fXzp07tWvXLuss1ZYtW+TxeNSuXbsG9wPg/MBbfgAueK1bt9batWv19ddf67vvvlNlZaVGjx6tAwcO6M4779S6dev01Vdfafny5br33nvrDUOXXXaZysvL9fzzz+urr77Sq6++qrlz59bY3+HDh/XBBx/ou+++0/fff19jnX79+qlTp06666679K9//Uvr1q3T0KFD1bt371rfZgRwfiNQAbjgTZw4UQEBAWrfvr2aN2+unTt3Kj4+Xp988okqKio0cOBAdejQQQ888IDcbrd15qk2nTt31syZMzV9+nR16NBBixYtUmZmpldNcnKy7rvvPt1+++1q3rx5jYvapeNv3b311ltq2rSprr32WvXr10+XXnqplixZcsaPH8DZ5zDGGF83AQAA4M84QwUAAGATgQoAAMAmAhUAAIBNBCoAAACbCFQAAAA2EagAAABsIlABAADYRKACAACwiUAFAABgE4EKAADAJgIVAACATQQqAAAAm/4fMTXyCTMHn44AAAAASUVORK5CYII=", + "image/png": "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bNkymzZtmvl8PrvmmmuCwogkO++886xdu3Y2Z84cW758uX3++edmZjZ06FB78cUXLSsry7Kysuyxxx6zqKiowPvmRHVUFmbee+89q127tnXs2NHmzZtnCxcutPT0dPN4PDZ37txAv/Iw06JFC7vnnnvsnXfesRdeeMHq1atnV199daBfbm6uRUZGWvfu3W3hwoX23nvv2WuvvWaDBw+uEHzx74UwA+fk5eWZJBswYMBx+916660myXbu3HnMPq1btw7MOpxIaWmpJSQkWNu2ba20tDTQXlRUZI0bN7YuXboE2soDwaRJk4K2MWLECIuMjAx8wLz//vsmycaPH3/M/W7dutXCw8PtnnvuCWovKioyv99vt9xyS6BtyJAhJsn++te/BvXt3bu3tWrVKvD4hx9+MEn28MMPV9hfee0PPfTQcUbjZyUlJbZv3z6LiYkJCl9/+9vfTJKtWLGiwnOODjPlwerosZo3b55Jsueeey7QVj4j9O233wbaDh48aPXr17dhw4Ydt9Znn3220rF56qmnTJItXbrUzMx27dplERER9sADDwT1u+WWWyw+Pt5++uknMzN7/fXXTZLNnz8/qF9OTo5JshkzZgTVHRYWZl9++eVxayx3dJgxM7vooossLS2tQt/MzEyrVauW5eTkBLX//e9/N0n21ltvBdokmc/nsx9//PG4+y8tLbWffvrJHn30UWvQoEFQIDpWHZWFmcsuu8waN25sRUVFgbaSkhJLSUmxpk2bBrZbHmZGjBgRtM1JkyaZJNuxY0fQMX366afHrR//fjgBGOcsM5MkeTyeKtnel19+qe+//16DBw9WrVr/96dTp04d3Xjjjfr444914MCBoOf86le/Cnrcrl07HTp0SPn5+ZKkt99+W5I0cuTIY+73nXfeUUlJiW6//XaVlJQElsjISKWlpVU4idfj8ahfv34V9vvtt9+e0vHeeOONFdr27dunsWPH6oILLlB4eLjCw8NVp04d7d+/X1988cUpbb/c8uXLJf18Bc+Rbr75ZsXExOjdd98Nam/fvr2aNWsWeBwZGalf/OIXJzy+5cuXKyYmRjfddFNQe/l+y/fToEED9evXT7Nnz1ZZWZkkac+ePVq0aJFuv/32wPlZixcvVt26ddWvX7+g16V9+/by+/0VXpd27drpF7/4xYkH5BQtXrxYKSkpat++fVAdPXr0kMfjqVDHNddco3r16lXYzvLly9WtWzf5fD6FhYWpdu3aeuihh7R79+7A+/VU7N+/X6tXr9ZNN90UdGVWWFiYBg8erO3bt+vLL78Mek5lfy+SAq9t+/btFRERobvuukuzZ8/WN998c8p14dxEmIFzGjZsqOjoaOXm5h6335YtWxQdHa369esfs0+zZs30ww8/aP/+/Sfc7+7duyX9fNXG0RISElRWVqY9e/YEtTdo0CDosdfrlfTzyZ+S9MMPPygsLEx+v/+Y+925c6ck6ZJLLlHt2rWDlnnz5mnXrl1B/aOjoxUZGVlhv4cOHTrhMR6psuMcOHCgpk+frt/+9rd65513tGbNGuXk5KhRo0aBYzpVu3fvVnh4uBo1ahTU7vF45Pf7A+Ne7ugxlX4+vhPtf/fu3fL7/RXCbePGjRUeHh60nzvvvFPfffedsrKyJEmvv/66iouLgwLXzp07tXfvXkVERFR4XfLy8iq8LpWNZ1XYuXOnPvvsswo1xMbGysxOqo41a9YoPT1dkvT888/ro48+Uk5OjsaPHy9Jp/Xa7tmzR2Z2zL8XSSd8bY/+ezn//PO1bNkyNW7cWCNHjtT555+v888/X9OmTTvl+nBu4WomOCcsLExXX321lixZou3btwddgVRu+/btWrdunXr16qWwsLBjbqtHjx5aunSp/vGPf2jAgAHH3W/5P7Q7duyosO77779XrVq1Kv0/3uNp1KiRSktLlZeXd8wPu4YNG0qS/v73vyspKemUtn8mjv7QLygo0OLFi/Xwww/r/vvvD7QXFxfrxx9/PO39NGjQQCUlJfrhhx+CAo2ZKS8vT5dccslpb/vo/axevVpmFnRs+fn5KikpCYyz9PP7IiEhQbNmzVKPHj00a9Yspaamqk2bNoE+DRs2VIMGDbRkyZJK9xcbGxv0uKpmCI/WsGFDRUVF6aWXXjrm+hPVMXfuXNWuXVuLFy8OCsILFy487brq1aunWrVqHfPvpbLaTsaVV16pK6+8UqWlpVq7dq3+/Oc/KyMjQ/Hx8Sf8G8a5i5kZOGncuHEyM40YMUKlpaVB60pLS3X33XfLzDRu3Ljjbuc3v/mN/H6/xowZo++++67SPgsWLJAktWrVSuedd57mzJkT+ApL+nk6ff78+ercufMpX77cq1cvSdLMmTOP2adHjx4KDw/X119/rU6dOlW6nKqj/4/3ZHg8HplZ4LnlXnjhhQqvwals/9prr5Ukvfrqq0Ht8+fP1/79+wPrz9S1116rffv2VfiA/stf/hJUh/R/X4UsXLhQH3zwgdauXas777wz6Hl9+/bV7t27VVpaWulr0qpVqyqpu9yxZp/69u2rr7/+Wg0aNKi0jpO5QaHH41F4eHhQ8D948KBeeeWVk67jaDExMUpNTdWCBQuC+peVlenVV19V06ZNz+hrt7CwMKWmpuqZZ56RJK1fv/60twX3MTMDJ11++eWaOnWqMjIydMUVV2jUqFFq1qyZtm7dqmeeeUarV6/W1KlT1aVLl+Nux+fzadGiRerbt686dOigUaNGqXPnzoqIiNDmzZv16quv6p///Kf69++vWrVqadKkSRo0aJD69u2rYcOGqbi4WH/84x+1d+9ePfnkk6d8HFdeeaUGDx6sxx9/XDt37lTfvn3l9Xr1ySefKDo6Wvfcc4+aN2+uRx99VOPHj9c333yjnj17ql69etq5c6fWrFmjmJgYPfLII6e039jYWCUlJWnRokW69tprVb9+fTVs2PC4H3xxcXG66qqr9Mc//jHQNzs7Wy+++KLq1q0b1DclJUWS9Nxzzyk2NlaRkZFKTk6u9Cui7t27q0ePHho7dqwKCwt1+eWX67PPPtPDDz+sDh06aPDgwad0bMdy++2365lnntGQIUO0ZcsWtW3bVh9++KEmTpyo3r17q1u3bkH977zzTj311FMaOHCgoqKidOuttwatHzBggF577TX17t1bo0eP1qWXXqratWtr+/btWrFiha677jrdcMMNVVK7JLVt21Zz587VvHnz1KJFC0VGRqpt27bKyMjQ/PnzddVVV+l3v/ud2rVrp7KyMm3dulVLly7V73//e6Wmph5323369NGUKVM0cOBA3XXXXdq9e7cmT55cIbger47KZGZmqnv37rr66qt13333KSIiQjNmzNDnn3+u119//ZRnq5599lktX75cffr0UbNmzXTo0KHAjNTRrx/+zYTs1GOgCqxatcpuuukmi4+Pt/DwcGvcuLH179+/wn1fTiQvL8/Gjh1rF110kUVHR5vX67ULLrjAhg0bZhs2bAjqu3DhQktNTbXIyEiLiYmxa6+91j766KOgPuVXBJVfrlyu/KqN3NzcQFtpaan96U9/spSUFIuIiDCfz2edO3e2f/zjHxX2e/XVV1tcXJx5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3XXW6gBwdoWHugAAOJHDhw8rIiLitJ/fqFGjKqwGQE3DzAyAajF06FBlZ2dr2rRp8ng88ng82rJliyRp06ZN6t27t+rUqaP4+HgNHjxYu3btCjy3a9euGjVqlO699141bNhQ3bt3lyRNmTJFbdu2VUxMjBITEzVixAjt27dPkvTee+/pjjvuUEFBQWB/EyZMkFTxa6atW7fquuuuU506dRQXF6dbbrlFO3fuDKyfMGGC2rdvr1deeUXNmzeXz+fTgAEDVFRUVL2DBuC0EGYAVItp06apc+fO+o//+A/t2LFDO3bsUGJionbs2KG0tDS1b99ea9eu1ZIlS7Rz507dcsstQc+fPXu2wsPD9dFHH+m///u/JUm1atXS008/rc8//1yzZ8/W8uXLNWbMGElSly5dNHXqVMXFxQX2d99991Woy8x0/fXX68cff1R2draysrL09ddf69Zbbw3q9/XXX2vhwoVavHixFi9erOzsbD355JPVNFoAzgRfMwGoFj6fTxEREYqOjpbf7w+0z5w5UxdffLEmTpwYaHvppZeUmJior776Sr/4xS8kSRdccIEmTZoUtM0jz79JTk7WY489prvvvlszZsxQRESEfD6fPB5P0P6OtmzZMn322WfKzc1VYmKiJOmVV17RRRddpJycHF1yySWSpLKyMr388suKjY2VJA0ePFjvvvuunnjiiTMbGABVjpkZAGfVunXrtGLFCtWpUyewtG7dWtLPsyHlOnXqVOG5K1asUPfu3XXeeecpNjZWt99+u3bv3q39+/ef9P6/+OILJSYmBoKMJLVp00Z169bVF198EWhr3rx5IMhIUpMmTZSfn39Kxwrg7GBmBsBZVVZWpn79+umpp56qsK5JkyaB/46JiQla9+2336p3794aPny4HnvsMdWvX18ffvihfvOb3+inn3466f2bmTwezwnba9euHbTe4/GorKzspPcD4OwhzACoNhERESotLQ1qu/jiizV//nw1b95c4eEn/0/Q2rVrVVJSov/6r/9SrVo/Tyr/9a9/PeH+jtamTRtt3bpV27ZtC8zObNq0SQUFBbrwwgtPuh4ANQdfMwGoNs2bN9fq1au1ZcsW7dq1S2VlZRo5cqR+/PFH3XbbbVqzZo2++eYbLV26VHfeeedxg8j555+vkpIS/fnPf9Y333yjV155Rc8++2yF/e3bt0/vvvuudu3apQMHDlTYTrdu3dSuXTsNGjRI69ev15o1a3T77bcrLS2t0q+2ANR8hBkA1ea+++5TWFiY2rRpo0aNGmnr1q1KSEjQRx99pNLSUvXo0UMpKSkaPXq0fD5fYMalMu3bt9eUKVP01FNPKSUlRa+99poyMzOD+nTp0kXDhw/XrbfeqkaNGlU4gVj6+euihQsXql69errqqqvUrVs3tWjRQvPmzavy4wdwdnjMzEJdBAAAwOliZgYAADiNMAMAAJxGmAEAAE4jzAAAAKcRZgAAgNMIMwAAwGmEGQAA4DTCDAAAcBphBgAAOI0wAwAAnEaYAQAATiPMAAAAp/1/7MgGXoPfaWQAAAAASUVORK5CYII=", "text/plain": [ "
" ] @@ -732,13 +689,14 @@ }, { "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAh8AAAGsCAYAAAB968WXAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjAsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvlHJYcgAAAAlwSFlzAAAPYQAAD2EBqD+naQAAJJVJREFUeJzt3XtU1HXi//HXyGUUZabQEBA0UpMMUVfTUEszNc3KatduhppWa5ul+au8VF+rXYVqa7fditR2Oe3pwh5Tyzorm61CF6+orKSVlpom4KVwIExQeP/+cJ2aQHIA3zD6fJzD+crn8573vOet7Ty/M58BhzHGCAAAwJJmjb0AAABwdiE+AACAVcQHAACwivgAAABWER8AAMAq4gMAAFhFfAAAAKuIDwAAYBXxAQAArCI+AACAVU06Pj788ENde+21iomJkcPh0Ntvv33a73Pv3r26/fbb1bp1a4WFhalHjx7asGFDneebM2eO+vXrp7CwMJ1zzjmndJvFixfrqquuUps2beRwOJSXl1dtzPz58zVo0CC5XC45HA4dOnSo2pji4mKlpKTI7XbL7XYrJSWl2rgpU6aoV69ecjqd6tGjR7U5srOzNWrUKEVHR6tly5bq0aOHXn/99ZOu/ZNPPlFwcHCNc9Vm165dmjhxouLj49WiRQt17NhRs2fPVkVFhV/zAACaviYdH2VlZerevbteeOEFK/dXXFys/v37KyQkRMuWLdPWrVv17LPP1hoN559/vrKzs096vqKiQqNHj9Y999xzyusoKytT//79lZaWdtIxhw8f1vDhwzVr1qyTjrntttuUl5enrKwsZWVlKS8vTykpKT5jjDGaMGGCbr755hrnWLVqlZKSkrRo0SJt3rxZEyZM0NixY/Xuu+9WG+vxeDR27FhdeeWVp/hIf/T555+rqqpK8+bN05YtW/SnP/1JL7/8cq2PDwAQoEyAkGSWLFnic6y8vNw89NBDJiYmxoSFhZk+ffqYlStX1vk+pk+fbgYMGODXbTp06HBK95mRkWHcbrdfc+/cudNIMps2bTrpmJUrVxpJpri42Of41q1bjSSzZs0a77HVq1cbSebzzz+vNs/s2bNN9+7dT2ldV199tbnjjjuqHb/55pvNo48+etK5/v73v5uEhATjdDpNly5dzIsvvljr/Tz99NMmPj7+lNYEAAgcTfqVj19yxx136JNPPlFmZqY2b96s0aNHa/jw4dq+fXud5lu6dKl69+6t0aNHKzIyUj179tSCBQsaeNV2rF69Wm63W3379vUeu/TSS+V2u7Vq1ap6ze3xeBQREeFzLCMjQ1999ZVmz55d420WLFigRx55RHPmzNFnn32muXPn6rHHHtOrr77q1/0AAAJfwMbHV199pTfffFMLFy7UZZddpo4dO+rBBx/UgAEDlJGRUac5d+zYofT0dHXu3Fn//ve/NWnSJN1///36xz/+0cCrP/2KiooUGRlZ7XhkZKSKiorqPO9bb72l9evX64477vAe2759u2bMmKHXX39dwcHBNd7u97//vZ599lndeOONio+P14033qgHHnhA8+bNq3H8V199pb/+9a+aNGlSndcKAGiaan6mCAAbN26UMUYXXnihz/Hy8nK1bt1a0vGLGOPj42ud59577/VeU1JVVaXevXtr7ty5kqSePXtqy5YtSk9P19ixYyVJkyZN0muvvea9/eHDhzVixAgFBQV5j23dulXt27ev/4OsJ4fDUe2YMabG46ciOztb48eP14IFC3TxxRdLkiorK3XbbbfpiSeeqPZ3ccKBAwe0Z88eTZw4UXfddZf3+LFjx+R2u6uNLygo0PDhwzV69GjdeeeddVorAKDpCtj4qKqqUlBQkDZs2ODzxC9JrVq1kiS1a9dOn332Wa3znHvuud4/R0dHq2vXrj7nL7roIi1atMj7/ZNPPqkHH3zQ+/2gQYP01FNP+by9ERMT4/8DamBRUVHat29fteMHDhxQ27Zt/Z4vJydH1157rZ577jlviElSaWmpcnNztWnTJk2ePFnS8b8bY4yCg4P1/vvve0NlwYIFPvskqdrfXUFBga644golJydr/vz5fq8TAND0BWx89OzZU5WVldq/f78uu+yyGseEhIQoISHhlOfs37+/vvjiC59j27ZtU4cOHbzfR0ZG+rydERwcrHbt2qlTp05+PoLTKzk5WR6PR+vWrVOfPn0kSWvXrpXH41G/fv38mis7O1vXXHONnnrqKd19990+51wul/Lz832OvfTSS1qxYoXeeustxcfHq2XLlmrXrp127NihMWPGnPR+9u7dqyuuuEK9evVSRkaGmjUL2HcFAQC1aNLx8f333+vLL7/0fr9z507l5eUpIiJCF154ocaMGaOxY8fq2WefVc+ePXXw4EGtWLFC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AKwiPgAAgFXEBwAAsIr4AAAAVhEfAADAKuIDAABYRXwAAACriA8AAGAV8QEAAKwiPgAAgFXEBwAAsMqv+EhPT1dSUpJcLpdcLpeSk5O1bNky73ljjB5//HHFxMSoRYsWGjRokLZs2dLgiwYAAIHLr/iIjY1VWlqacnNzlZubq8GDB2vUqFHewHj66af13HPP6YUXXtD69esVFRWloUOHqrS09LQsHgAABB6HMcbUZ4KIiAg988wzmjBhgmJiYjR16lRNnz5dklReXq62bdvqqaee0m9/+9tTmq+kpERut1sej0cul6s+SwMAAJb48/xd52s+KisrlZmZqbKyMiUnJ2vnzp0qKirSsGHDvGOcTqcGDhyoVatWnXSe8vJylZSU+HwBAIAzl9/xkZ+fr1atWsnpdGrSpElasmSJunbtqqKiIklS27Ztfca3bdvWe64mqampcrvd3q+4uDh/lwQAAAKI3/HRpUsX5eXlac2aNbrnnns0btw4bd261Xve4XD4jDfGVDv2UzNnzpTH4/F+7dmzx98lAQCAABLs7w1CQ0PVqVMnSVLv3r21fv16Pf/8897rPIqKihQdHe0dv3///mqvhvyU0+mU0+n0dxkAACBA1fvnfBhjVF5ervj4eEVFRWn58uXecxUVFcrJyVG/fv3qezcAAOAM4dcrH7NmzdKIESMUFxen0tJSZWZmKjs7W1lZWXI4HJo6darmzp2rzp07q3Pnzpo7d67CwsJ02223na71AwCAAONXfOzbt08pKSkqLCyU2+1WUlKSsrKyNHToUEnSww8/rB9++EG/+93vVFxcrL59++r9999XeHj4aVk8AAAIPPX+OR8NjZ/zAQBA4LHycz4AAADqgvgAAABWER8AAMAq4gMAAFhFfAAAAKuIDwAAYBXxAQAArCI+AACAVcQHAACwivgAAABWER8AAMAq4gMAAFhFfAAAAKuIDwAAYBXxAQAArCI+AACAVcQHAACwivgAAABWER8AAMAq4gMAAFhFfAAAAKuIDwAAYBXxAQAArCI+AACAVcQHAACwivgAAABWER8AAMAq4gMAAFhFfAAAAKuIDwAAYBXxAQAArCI+AACAVcQHAACwivgAAABWER8AAMAq4gMAAFhFfAAAAKuIDwAAYBXxAQAArCI+AACAVcQHAACwivgAAABWER8AAMAq4gMAAFhFfAAAAKuIDwAAYBXxAQAArCI+AACAVcQHAACwivgAAABWER8AAMAqv+IjNTVVl1xyicLDwxUZGanrr79eX3zxhc+Yffv2afz48YqJiVFYWJiGDx+u7du3N+iiAQBA4PIrPnJycnTvvfdqzZo1Wr58uY4dO6Zhw4aprKxMkmSM0fXXX68dO3bonXfe0aZNm9ShQwcNGTLEOwYAAJzdHMYYU9cbHzhwQJGRkcrJydHll1+ubdu2qUuXLvr000918cUXS5IqKysVGRmpp556SnfeeecvzllSUiK32y2PxyOXy1XXpQEAAIv8ef6u1zUfHo9HkhQRESFJKi8vlyQ1b97cOyYoKEihoaH6+OOPa5yjvLxcJSUlPl8AAODMVef4MMZo2rRpGjBggBITEyVJCQkJ6tChg2bOnKni4mJVVFQoLS1NRUVFKiwsrHGe1NRUud1u71dcXFxdlwQAAAJAneNj8uTJ2rx5s958803vsZCQEC1atEjbtm1TRESEwsLClJ2drREjRigoKKjGeWbOnCmPx+P92rNnT12XBAAAAkBwXW503333aenSpfrwww8VGxvrc65Xr17Ky8uTx+NRRUWFzjvvPPXt21e9e/eucS6n0ymn01mXZQAAgADk1ysfxhhNnjxZixcv1ooVKxQfH3/SsW63W+edd562b9+u3NxcjRo1qt6LBQAAgc+vVz7uvfdevfHGG3rnnXcUHh6uoqIiScdDo0WLFpKkhQsX6rzzzlP79u2Vn5+vKVOm6Prrr9ewYcMafvUAACDg+BUf6enpkqRBgwb5HM/IyND48eMlSYWFhZo2bZr27dun6OhojR07Vo899liDLBYAAAS+ev2cj9OBn/MBAEDgsfZzPgAAAPxFfAAAAKuIDwAAYBXxAQAArCI+AACAVcQHAACwivgAAABWER8AAMAq4gMAAFhFfAAAAKuIDwAAYBXxAQAArCI+AACAVcQHAACwivgAAABWER8AAMAq4gMAAFhFfAAAAKuIDwAAYBXxAQAArCI+AACAVcQHAACwivgAAABWER8AAMAq4gMAAFhFfAAAAKuIDwAAYBXxAQAArCI+AACAVcQHAACwivgAAABWER8AAMAq4gMAAFhFfAAAAKuIDwAAYFVwYy/AGmOko4cbexUAADQNIWGSw9Eod332xMfRw9LcmMZeBQAATcOsAim0ZaPcNW+7AAAAq86eVz5Cwo5XHgAAOP682EjOnvhwOBrt5SUAAPAj3nYBAABWER8AAMAq4gMAAFhFfAAAAKuIDwAAYBXxAQAArCI+AACAVcQHAACwivgAAABWER8AAMAq4gMAAFhFfAAAAKuIDwAAYFWT+622xhhJUklJSSOvBAAAnKoTz9snnsdr0+Tio7S0VJIUFxfXyCsBAAD+Ki0tldvtrnWMw5xKolhUVVWlgoIChYeHy+FwNOjcJSUliouL0549e+RyuRp0bvyIfbaHvbaDfbaDfbbjdO2zMUalpaWKiYlRs2a1X9XR5F75aNasmWJjY0/rfbhcLv5hW8A+28Ne28E+28E+23E69vmXXvE4gQtOAQCAVcQHAACw6qyKD6fTqdmzZ8vpdDb2Us5o7LM97LUd7LMd7LMdTWGfm9wFpwAA4Mx2Vr3yAQAAGh/xAQAArCI+AACAVcQHAACw6qyJj5deeknx8fFq3ry5evXqpY8++qixlxRQUlNTdckllyg8PFyRkZG6/vrr9cUXX/iMMcbo8ccfV0xMjFq0aKFBgwZpy5YtPmPKy8t13333qU2bNmrZsqWuu+46ffPNNzYfSkBJTU2Vw+HQ1KlTvcfY54azd+9e3X777WrdurXCwsLUo0cPbdiwwXueva6/Y8eO6dFHH1V8fLxatGihCy64QE8++aSqqqq8Y9hn/3344Ye69tprFRMTI4fDobffftvnfEPtaXFxsVJSUuR2u+V2u5WSkqJDhw7V/wGYs0BmZqYJCQkxCxYsMFu3bjVTpkwxLVu2NF9//XVjLy1gXHXVVSYjI8N8+umnJi8vz4wcOdK0b9/efP/9994xaWlpJjw83CxatMjk5+ebm2++2URHR5uSkhLvmEmTJpl27dqZ5cuXm40bN5orrrjCdO/e3Rw7dqwxHlaTtm7dOnP++eebpKQkM2XKFO9x9rlhfPfdd6ZDhw5m/PjxZu3atWbnzp3mgw8+MF9++aV3DHtdf3/4wx9M69atzXvvvWd27txpFi5caFq1amX+/Oc/e8ewz/7717/+ZR555BGzaNEiI8ksWbLE53xD7enw4cNNYmKiWbVqlVm1apVJTEw011xzTb3Xf1bER58+fcykSZN8jiUkJJgZM2Y00ooC3/79+40kk5OTY4wxpqqqykRFRZm0tDTvmCNHjhi3221efvllY4wxhw4dMiEhISYzM9M7Zu/evaZZs2YmKyvL7gNo4kpLS03nzp3N8uXLzcCBA73xwT43nOnTp5sBAwac9Dx73TBGjhxpJkyY4HPsxhtvNLfffrsxhn1uCD+Pj4ba061btxpJZs2aNd4xq1evNpLM559/Xq81n/Fvu1RUVGjDhg0aNmyYz/Fhw4Zp1apVjbSqwOfxeCRJERERkqSdO3eqqKjIZ5+dTqcGDhzo3ecNGzbo6NGjPmNiYmKUmJjI38XP3HvvvRo5cqSGDBnic5x9bjhLly5V7969NXr0aEVGRqpnz55asGCB9zx73TAGDBig//znP9q2bZsk6b///a8+/vhjXX311ZLY59OhofZ09erVcrvd6tu3r3fMpZdeKrfbXe99b3K/WK6hHTx4UJWVlWrbtq3P8bZt26qoqKiRVhXYjDGaNm2aBgwYoMTEREny7mVN+/z11197x4SGhurcc8+tNoa/ix9lZmZq48aNWr9+fbVz7HPD2bFjh9LT0zVt2jTNmjVL69at0/333y+n06mxY8ey1w1k+vTp8ng8SkhIUFBQkCorKzVnzhzdeuutkvg3fTo01J4WFRUpMjKy2vyRkZH13vczPj5OcDgcPt8bY6odw6mZPHmyNm/erI8//rjaubrsM38XP9qzZ4+mTJmi999/X82bNz/pOPa5/qqqqtS7d2/NnTtXktSzZ09t2bJF6enpGjt2rHcce10///znP/Xaa6/pjTfe0MUXX6y8vDxNnTpVMTExGjdunHcc+9zwGmJPaxrfEPt+xr/t0qZNGwUFBVWrtP3791erQvyy++67T0uXLtXKlSsVGxvrPR4VFSVJte5zVFSUKioqVFxcfNIxZ7sNGzZo//796tWrl4KDgxUcHKycnBz95S9/UXBwsHef2Of6i46OVteuXX2OXXTRRdq9e7ck/k03lIceekgzZszQLbfcom7duiklJUUPPPCAUlNTJbHPp0ND7WlUVJT27dtXbf4DBw7Ue9/P+PgIDQ1Vr169tHz5cp/jy5cvV79+/RppVYHHGKPJkydr8eLFWrFiheLj433Ox8fHKyoqymefKyoqlJOT493nXr16KSQkxGdMYWGhPv30U/4u/ufKK69Ufn6+8vLyvF+9e/fWmDFjlJeXpwsuuIB9biD9+/ev9nHxbdu2qUOHDpL4N91QDh8+rGbNfJ9qgoKCvB+1ZZ8bXkPtaXJysjwej9atW+cds3btWnk8nvrve70uVw0QJz5q+7e//c1s3brVTJ061bRs2dLs2rWrsZcWMO655x7jdrtNdna2KSws9H4dPnzYOyYtLc243W6zePFik5+fb2699dYaP9oVGxtrPvjgA7Nx40YzePDgs/rjcqfip592MYZ9bijr1q0zwcHBZs6cOWb79u3m9ddfN2FhYea1117zjmGv62/cuHGmXbt23o/aLl682LRp08Y8/PDD3jHss/9KS0vNpk2bzKZNm4wk89xzz5lNmzZ5f4REQ+3p8OHDTVJSklm9erVZvXq16datGx+19ceLL75oOnToYEJDQ82vfvUr70dEcWok1fiVkZHhHVNVVWVmz55toqKijNPpNJdffrnJz8/3meeHH34wkydPNhEREaZFixbmmmuuMbt377b8aALLz+ODfW447777rklMTDROp9MkJCSY+fPn+5xnr+uvpKTETJkyxbRv3940b97cXHDBBeaRRx4x5eXl3jHss/9WrlxZ4/8mjxs3zhjTcHv67bffmjFjxpjw8HATHh5uxowZY4qLi+u9focxxtTvtRMAAIBTd8Zf8wEAAJoW4gMAAFhFfAAAAKuIDwAAYBXxAQAArCI+AACAVcQHAACwivgAAABWER8AAMAq4gMAAFhFfAAAAKuIDwAAYNX/BxJdbIcUM2/sAAAAAElFTkSuQmCC", "text/plain": [ - "" + "" ] }, - "execution_count": 102, + "execution_count": 69, "metadata": {}, - "output_type": "execute_result" + "output_type": "display_data" }, { "data": { @@ -754,46 +712,556 @@ "source": [ "import matplotlib.pyplot as plt\n", "\n", - "species = \"Ba\"\n", - "iterations = 10\n", - "cell_offset = 50\n", + "species = \"O\"\n", + "iterations = 1000\n", + "cell_offset = 60\n", "y_design = []\n", "y_results = []\n", + "y_differences = []\n", + "\n", + "\n", + "df_design_transformed_scaled = scaler_X.transform(FuncTransform(func_dict_in, func_dict_out).fit_transform(df_design))\n", + "df_results_transformed_scaled = scaler_X.transform(FuncTransform(func_dict_in, func_dict_out).fit_transform(df_results))\n", + "\n", "for i in range(0,iterations):\n", " idx = i*50*50 + cell_offset -1\n", - " y_design.append(df_design.iloc[idx, :])\n", - " y_results.append(df_results.iloc[idx,:])\n", + " y_design.append(df_design_transformed_scaled.iloc[idx, :])\n", + " y_results.append(df_results_transformed_scaled.iloc[idx,:])\n", " \n", "y_design = pd.DataFrame(y_design)\n", "y_results = pd.DataFrame(y_results)\n", - "plt.plot(np.arange(0,iterations), y_design[species], label = \"Design\")\n", + "# plt.plot(np.arange(0,iterations), y_design[species], label = \"Design\")\n", "plt.plot(np.arange(0,iterations), y_results[species], label = \"Results\")\n", "\n", - "y = FuncTransform(func_dict_in, func_dict_out).fit_transform(y_design)\n", - "y = scaler_X.transform(y)\n", - "prediction = model_large.predict(y.iloc[:, y.columns != \"Class\"])\n", - "prediction = pd.DataFrame(prediction, columns = y.columns[y.columns != \"Class\"])\n", - "prediction_back = pd.DataFrame(scaler_X.inverse_transform(prediction), columns=prediction.columns)\n", - "prediction_back = FuncTransform(func_dict_out, func_dict_in).inverse_transform(prediction_back.iloc[:, prediction_back.columns != \"Class\"])\n", + "prediction = model_simple.predict(y_design.iloc[:, y_design.columns != \"Class\"])\n", + "prediction = pd.DataFrame(prediction, columns = y_results.columns)\n", "\n", - "plt.plot(np.arange(0,iterations), prediction_back[species], label = \"Prediction\")\n", + "y_results_back = FuncTransform(func_dict_in, func_dict_out).inverse_transform(pd.DataFrame(scaler_X.inverse_transform(y_results), columns=df_results.columns))\n", + "prediction_back = FuncTransform(func_dict_in, func_dict_out).inverse_transform(pd.DataFrame(scaler_X.inverse_transform(prediction), columns=df_results.columns))\n", + "\n", + "plt.plot(np.arange(0,iterations), prediction[species], label = \"Prediction\")\n", "plt.xlabel('Iteration')\n", "plt.ylabel(species)\n", "plt.title(species+' Concentration over Iterations')\n", "plt.show()\n", "\n", + "plt.plot(np.arange(0,iterations), y_results_back[species], label = \"Results\")\n", + "plt.plot(np.arange(0,iterations), prediction_back[species], label = \"Prediction\")\n", + "\n", + "plt.show()\n", + "\n", "timestep = 1000\n", - "plt.imshow(np.array(df_results[species][(timestep*2500):(timestep*2500+2500)]).reshape(50,50), origin='lower')" + "plt.imshow(np.array(df_results[\"Barite\"][(timestep*2500):(timestep*2500+2500)]).reshape(50,50), origin='lower')" ] }, { "cell_type": "code", - "execution_count": 13, + "execution_count": 25, "metadata": {}, "outputs": [ { "data": { - "image/png": "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p07VRx99pKlTp+qyyy7T+++/b1Uz/NJWW6uqqrRhwwbdfffd2rBhg15++WV9/vnnOv/889stNzMzs8l13rt3r1JSUqxoQkDau7aSNHbs2Cb1fuWVV9osMxavraRm1+fJJ5+UYRi6+OKL2yw3Wq+tZcwEdcopp5jXX399k2P9+vUzb7/99hbP/81vfmP269evybGf/exn5vDhwy2roxX2799vSjJXr17d6jkrV640JZkHDhwIX8VCYObMmebgwYP9Pj9erqnXL37xC/Poo482PR5Pi6/H6nWVZC5evNj33OPxmHl5eeb999/vO1ZTU2NmZWWZjz76aKvlXHbZZebYsWObHDvnnHPMSZMmhbzOwTqyrS1Zt26dKcnctWtXq+fMnz/fzMrKCm3lLNBSe6dNm2ZecMEFAZUTL9f2ggsuMM8888w2z4mVaxtKCdmjUltbqw8//FBjxoxpcnzMmDFas2ZNi+957733mp1/zjnn6IMPPpDb7basrqFWVlYmScrNzW333CFDhig/P19nnXWWVq5caXXVQmLbtm0qKChQnz59NGnSJO3YsaPVc+PlmkoNP9PPPPOMfvzjH7e771UsXtfD7dy5U/v27Wty7ZxOp04//fRWf3+l1q93W++JRmVlZTIMQ9nZ2W2ed/DgQfXu3Vs9e/bUeeedp40bN4angiGwatUqdevWTX379tV1112n/fv3t3l+PFzbb7/9VsuWLdO1117b7rmxfG2DkZBBpbi4WPX19erevXuT4927d9e+fftafM++fftaPL+urk7FxcWW1TWUTNPUjBkzNHLkSA0cOLDV8/Lz8/X444/rpZde0ssvv6zjjjtOZ511lt56660w1jZww4YN09NPP63XXntNTzzxhPbt26cf/ehH+v7771s8Px6uqdeSJUtUWlqqq6++utVzYvW6Hsn7OxrI76/3fYG+J9rU1NTo9ttv1+TJk9vcB6Zfv3566qmntHTpUj333HNKSUnRiBEjtG3btjDWNjjjxo3Ts88+qzfffFN//vOftX79ep155plyuVytviceru2CBQuUkZGhiy66qM3zYvnaBiumNyXsqCP/52maZpv/G23p/JaOR6sbb7xRH3/8sd555502zzvuuON03HHH+Z4XFRVp9+7d+n//7//ptNNOs7qaQRs3bpzv60GDBqmoqEhHH320FixYoBkzZrT4nli/pl7z5s3TuHHjVFBQ0Oo5sXpdWxPo72+w74kWbrdbkyZNksfj0SOPPNLmucOHD28yAXXEiBE68cQT9de//lUPPfSQ1VXtkMsvv9z39cCBAzV06FD17t1by5Yta/Mf8Vi+tpL05JNPasqUKe3ONYnlaxushOxR6dKli+x2e7O0vX///map3CsvL6/F85OSktS5c2fL6hoqN910k5YuXaqVK1cGteP08OHDYy6xp6ena9CgQa3WO9avqdeuXbv0xhtv6Cc/+UnA743F6+q9kyuQ31/v+wJ9T7Rwu9267LLLtHPnTq1YsSLgXXVtNptOPvnkmLvWUkNPYO/evduseyxfW0l6++23tXXr1qB+h2P52vorIYNKcnKyTjrpJN9dEl4rVqzQj370oxbfU1RU1Oz8119/XUOHDpXD4bCsrh1lmqZuvPFGvfzyy3rzzTfVp0+foMrZuHGj8vPzQ1w7a7lcLm3ZsqXVesfqNT3S/Pnz1a1bN5177rkBvzcWr2ufPn2Ul5fX5NrV1tZq9erVrf7+Sq1f77beEw28IWXbtm164403ggrRpmlq06ZNMXetJen777/X7t2726x7rF5br3nz5umkk07S4MGDA35vLF9bv0VqFm+kLVq0yHQ4HOa8efPMzz77zLzlllvM9PR088svvzRN0zRvv/12c+rUqb7zd+zYYaalpZm//OUvzc8++8ycN2+e6XA4zH/84x+RaoJfbrjhBjMrK8tctWqVuXfvXt+jqqrKd86Rbf3LX/5iLl682Pz888/NTz75xLz99ttNSeZLL70UiSb47Ve/+pW5atUqc8eOHebatWvN8847z8zIyIi7a3q4+vp6s1evXuZtt93W7LVYvq4VFRXmxo0bzY0bN5qSzAceeMDcuHGj706X+++/38zKyjJffvllc/PmzeYVV1xh5ufnm+Xl5b4ypk6d2uQuvnfffde02+3m/fffb27ZssW8//77zaSkJHPt2rVhb9/h2mqr2+02zz//fLNnz57mpk2bmvwOu1wuXxlHtnXWrFnm8uXLze3bt5sbN240r7nmGjMpKcl8//33I9HEJtpqb0VFhfmrX/3KXLNmjblz505z5cqVZlFRkdmjR4+4u7ZeZWVlZlpamjl37twWy4ila2uVhA0qpmmaf/vb38zevXubycnJ5oknntjklt1p06aZp59+epPzV61aZQ4ZMsRMTk42jzrqqFZ/sKKJpBYf8+fP951zZFvnzJljHn300WZKSoqZk5Njjhw50ly2bFn4Kx+gyy+/3MzPzzcdDodZUFBgXnTRReann37qez1erunhXnvtNVOSuXXr1mavxfJ19d5KfeRj2rRppmk23KI8c+ZMMy8vz3Q6neZpp51mbt68uUkZp59+uu98rxdffNE87rjjTIfDYfbr1y8qQlpbbd25c2erv8MrV670lXFkW2+55RazV69eZnJystm1a1dzzJgx5po1a8LfuBa01d6qqipzzJgxZteuXU2Hw2H26tXLnDZtmvnVV181KSMerq3XY489ZqamppqlpaUtlhFL19Yq7J4MAACiVkLOUQEAALGBoAIAAKIWQQUAAEQtggoAAIhaBBUAABC1CCoAACBqEVQAAEDUIqgAAICoRVABEFcMw9CSJUsiXQ0AIUJQARAyV199tQzDaPYYO3ZspKsGIEYlRboCAOLL2LFjNX/+/CbHnE5nhGoDINbRowIgpJxOp/Ly8po8cnJyJDUMy8ydO1fjxo1Tamqq+vTpoxdffLHJ+zdv3qwzzzxTqamp6ty5s37605/q4MGDTc558sknNWDAADmdTuXn5+vGG29s8npxcbEuvPBCpaWl6dhjj9XSpUutbTQAyxBUAITV3XffrYsvvlgfffSRrrzySl1xxRXasmWLJKmqqkpjx45VTk6O1q9frxdffFFvvPFGkyAyd+5cTZ8+XT/96U+1efNmLV26VMccc0yTz5g9e7Yuu+wyffzxxxo/frymTJmikpKSsLYTQIhEevtmAPFj2rRppt1uN9PT05s8fve735mmaZqSzOuvv77Je4YNG2becMMNpmma5uOPP27m5OSYBw8e9L2+bNky02azmfv27TNN0zQLCgrMO++8s9U6SDLvuusu3/ODBw+ahmGYr776asjaCSB8mKMCIKTOOOMMzZ07t8mx3Nxc39dFRUVNXisqKtKmTZskSVu2bNHgwYOVnp7ue33EiBHyeDzaunWrDMPQnj17dNZZZ7VZh+OPP973dXp6ujIyMrR///5gmwQggggqAEIqPT292VBMewzDkCSZpun7uqVzUlNT/SrP4XA0e6/H4wmoTgCiA3NUAITV2rVrmz3v16+fJKl///7atGmTKisrfa+/++67stls6tu3rzIyMnTUUUfpP//5T1jrDCBy6FEBEFIul0v79u1rciwpKUldunSRJL344osaOnSoRo4cqWeffVbr1q3TvHnzJElTpkzRzJkzNW3aNM2aNUvfffedbrrpJk2dOlXdu3eXJM2aNUvXX3+9unXrpnHjxqmiokLvvvuubrrppvA2FEBYEFQAhNTy5cuVn5/f5Nhxxx2n//73v5Ia7shZtGiRfv7znysvL0/PPvus+vfvL0lKS0vTa6+9pl/84hc6+eSTlZaWposvvlgPPPCAr6xp06appqZGf/nLX3TrrbeqS5cuuuSSS8LXQABhZZimaUa6EgASg2EYWrx4sSZOnBjpqgCIEcxRAQAAUYugAgAAohZzVACEDSPNAAJFjwoAAIhaBBUAABC1CCoAACBqEVQAAEDUIqgAAICoRVABAABRi6ACAACiFkEFAABELYIKAACIWv8ffjVm25L6Qy0AAAAASUVORK5CYII=", + "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", + "
HOChargeH_0_O_0_BaClS_2_S_6_SrBariteCelestite
0111.01243455.508700-1.216415e-090.02.217711e-134.495355e-071.532249e-120.00.0006210.0006200.0010001.000000
1111.01243455.508700-1.222504e-090.01.312902e-124.500359e-071.044603e-080.00.0006210.0006200.0010001.000000
2111.01243455.508699-1.220407e-090.01.614098e-124.500563e-074.907802e-070.00.0006210.0006200.0010001.000000
3111.01243455.508695-1.216831e-090.02.293739e-124.504482e-074.772370e-060.00.0006200.0006220.0010001.000000
4111.01243455.508679-1.216842e-090.02.641545e-124.534070e-072.200220e-050.00.0006160.0006260.0010001.000000
.......................................
995111.01243455.5064102.170844e-080.04.777415e-111.550089e-049.784038e-020.00.0000480.0488140.1494760.846327
996111.01243455.5064102.166504e-080.04.808612e-111.559012e-049.785750e-020.00.0000480.0488210.1517080.844093
997111.01243455.5064092.162167e-080.04.811205e-111.567226e-049.787459e-020.00.0000480.0488290.1539450.841856
998111.01243455.5064092.157995e-080.04.815004e-111.574812e-049.789167e-020.00.0000480.0488360.1561850.839614
999111.01243455.5064092.153938e-080.04.815067e-111.581835e-049.790872e-020.00.0000480.0488440.1584280.837370
\n", + "

1000 rows × 12 columns

\n", + "
" + ], + "text/plain": [ + " H O Charge H_0_ O_0_ Ba \\\n", + "0 111.012434 55.508700 -1.216415e-09 0.0 2.217711e-13 4.495355e-07 \n", + "1 111.012434 55.508700 -1.222504e-09 0.0 1.312902e-12 4.500359e-07 \n", + "2 111.012434 55.508699 -1.220407e-09 0.0 1.614098e-12 4.500563e-07 \n", + "3 111.012434 55.508695 -1.216831e-09 0.0 2.293739e-12 4.504482e-07 \n", + "4 111.012434 55.508679 -1.216842e-09 0.0 2.641545e-12 4.534070e-07 \n", + ".. ... ... ... ... ... ... \n", + "995 111.012434 55.506410 2.170844e-08 0.0 4.777415e-11 1.550089e-04 \n", + "996 111.012434 55.506410 2.166504e-08 0.0 4.808612e-11 1.559012e-04 \n", + "997 111.012434 55.506409 2.162167e-08 0.0 4.811205e-11 1.567226e-04 \n", + "998 111.012434 55.506409 2.157995e-08 0.0 4.815004e-11 1.574812e-04 \n", + "999 111.012434 55.506409 2.153938e-08 0.0 4.815067e-11 1.581835e-04 \n", + "\n", + " Cl S_2_ S_6_ Sr Barite Celestite \n", + "0 1.532249e-12 0.0 0.000621 0.000620 0.001000 1.000000 \n", + "1 1.044603e-08 0.0 0.000621 0.000620 0.001000 1.000000 \n", + "2 4.907802e-07 0.0 0.000621 0.000620 0.001000 1.000000 \n", + "3 4.772370e-06 0.0 0.000620 0.000622 0.001000 1.000000 \n", + "4 2.200220e-05 0.0 0.000616 0.000626 0.001000 1.000000 \n", + ".. ... ... ... ... ... ... \n", + "995 9.784038e-02 0.0 0.000048 0.048814 0.149476 0.846327 \n", + "996 9.785750e-02 0.0 0.000048 0.048821 0.151708 0.844093 \n", + "997 9.787459e-02 0.0 0.000048 0.048829 0.153945 0.841856 \n", + "998 9.789167e-02 0.0 0.000048 0.048836 0.156185 0.839614 \n", + "999 9.790872e-02 0.0 0.000048 0.048844 0.158428 0.837370 \n", + "\n", + "[1000 rows x 12 columns]" + ] + }, + "execution_count": 25, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "FuncTransform(func_dict_in, func_dict_out).inverse_transform(pd.DataFrame(scaler_X.inverse_transform(y_results), columns=df_results.columns))" + ] + }, + { + "cell_type": "code", + "execution_count": 26, + "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", + "
HOChargeH_0_O_0_BaClS_2_S_6_SrBariteCelestite
0111.01242855.508682-1.193141e-093.397941e-152.128961e-13-0.0000120.000021-1.191799e-170.0006200.0006300.0009851.000231
1111.01242855.508682-1.202185e-092.918474e-151.019832e-12-0.0000160.000008-7.920033e-180.0006200.0006300.0009461.000121
2111.01242855.508682-1.203471e-091.785468e-152.398433e-12-0.000015-0.000013-9.158671e-180.0006200.0006270.0009130.999977
3111.01242855.508682-1.199235e-091.746077e-152.357316e-12-0.000016-0.000011-9.246642e-180.0006190.0006290.0009160.999936
4111.01242855.508682-1.197043e-091.533956e-152.670053e-12-0.0000190.000003-9.144569e-180.0006150.0006350.0009430.999769
.......................................
995111.01242855.5064162.189995e-08-3.792428e-154.785985e-110.0002790.0976421.182626e-160.0000510.0487380.1490160.844585
996111.01242855.5064162.188781e-08-3.910681e-154.822730e-110.0002790.0976651.169111e-160.0000510.0487510.1512410.842272
997111.01242855.5064162.184875e-08-3.749360e-154.824932e-110.0002790.0976871.146696e-160.0000510.0487610.1534770.840015
998111.01242855.5064162.180415e-08-3.500642e-154.816323e-110.0002790.0977101.119656e-160.0000510.0487700.1557200.837773
999111.01242855.5064162.177183e-08-3.375572e-154.822685e-110.0002790.0977321.095921e-160.0000500.0487800.1579620.835504
\n", + "

1000 rows × 12 columns

\n", + "
" + ], + "text/plain": [ + " H O Charge H_0_ O_0_ \\\n", + "0 111.012428 55.508682 -1.193141e-09 3.397941e-15 2.128961e-13 \n", + "1 111.012428 55.508682 -1.202185e-09 2.918474e-15 1.019832e-12 \n", + "2 111.012428 55.508682 -1.203471e-09 1.785468e-15 2.398433e-12 \n", + "3 111.012428 55.508682 -1.199235e-09 1.746077e-15 2.357316e-12 \n", + "4 111.012428 55.508682 -1.197043e-09 1.533956e-15 2.670053e-12 \n", + ".. ... ... ... ... ... \n", + "995 111.012428 55.506416 2.189995e-08 -3.792428e-15 4.785985e-11 \n", + "996 111.012428 55.506416 2.188781e-08 -3.910681e-15 4.822730e-11 \n", + "997 111.012428 55.506416 2.184875e-08 -3.749360e-15 4.824932e-11 \n", + "998 111.012428 55.506416 2.180415e-08 -3.500642e-15 4.816323e-11 \n", + "999 111.012428 55.506416 2.177183e-08 -3.375572e-15 4.822685e-11 \n", + "\n", + " Ba Cl S_2_ S_6_ Sr Barite Celestite \n", + "0 -0.000012 0.000021 -1.191799e-17 0.000620 0.000630 0.000985 1.000231 \n", + "1 -0.000016 0.000008 -7.920033e-18 0.000620 0.000630 0.000946 1.000121 \n", + "2 -0.000015 -0.000013 -9.158671e-18 0.000620 0.000627 0.000913 0.999977 \n", + "3 -0.000016 -0.000011 -9.246642e-18 0.000619 0.000629 0.000916 0.999936 \n", + "4 -0.000019 0.000003 -9.144569e-18 0.000615 0.000635 0.000943 0.999769 \n", + ".. ... ... ... ... ... ... ... \n", + "995 0.000279 0.097642 1.182626e-16 0.000051 0.048738 0.149016 0.844585 \n", + "996 0.000279 0.097665 1.169111e-16 0.000051 0.048751 0.151241 0.842272 \n", + "997 0.000279 0.097687 1.146696e-16 0.000051 0.048761 0.153477 0.840015 \n", + "998 0.000279 0.097710 1.119656e-16 0.000051 0.048770 0.155720 0.837773 \n", + "999 0.000279 0.097732 1.095921e-16 0.000050 0.048780 0.157962 0.835504 \n", + "\n", + "[1000 rows x 12 columns]" + ] + }, + "execution_count": 26, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "FuncTransform(func_dict_in, func_dict_out).inverse_transform(pd.DataFrame(scaler_X.inverse_transform(prediction), columns=prediction.columns))" + ] + }, + { + "cell_type": "code", + "execution_count": 25, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAlIAAAGwCAYAAABiu4tnAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjAsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvlHJYcgAAAAlwSFlzAAAPYQAAD2EBqD+naQAASuFJREFUeJzt3Xt4VNWh///PJJlMCIYkguRSASNeIGCpBoWgiNVDuLSKFSRqjVqFiqlViFVBoICn/oDW2tRyKxpFTz3AUS7SmhbCt0pBIioEREHk1CgoycFwSYCQZJLZvz/CDAyZJDOTmUxm5v16njxm9qy99lqzg/lk7bXXNhmGYQgAAAAeiwh0AwAAAIIVQQoAAMBLBCkAAAAvEaQAAAC8RJACAADwEkEKAADASwQpAAAAL0UFugGhzGaz6dChQ4qLi5PJZAp0cwAAgBsMw9CJEyeUmpqqiIiWx5wIUn506NAh9ejRI9DNAAAAXjh48KAuvvjiFssQpPwoLi5OUuOJ6NKli0/rtlqt2rBhg7KysmQ2m31ad0dDX0NXOPWXvoaucOpvuPS1qqpKPXr0cPwebwlByo/sl/O6dOnilyAVGxurLl26hPQPs0RfQ1k49Ze+hq5w6m849VWSW9NymGwOAADgJYIUAACAlwhSAAAAXiJIAQAAeCngQWrRokVKS0tTTEyMMjIytHnz5hbLb9q0SRkZGYqJidGll16qJUuWNCmzatUqpaeny2KxKD09XWvWrPH4uA888IBMJpPT1+DBg9vWWQAAEFICGqRWrlypyZMna/r06SopKdHQoUM1atQoHThwwGX50tJSjR49WkOHDlVJSYmeeeYZPfbYY1q1apWjTHFxsbKzs5WTk6Ndu3YpJydH48eP17Zt2zw+7siRI1VWVub4Kiws9M8HAQAAglJAg9QLL7yghx56SBMmTFDfvn2Vn5+vHj16aPHixS7LL1myRD179lR+fr769u2rCRMm6MEHH9Tzzz/vKJOfn6/hw4dr2rRp6tOnj6ZNm6ZbbrlF+fn5Hh/XYrEoOTnZ8XXhhRf65XMAAADBKWDrSNXV1Wn79u2aOnWq0/asrCxt3brV5T7FxcXKyspy2jZixAgVFBTIarXKbDaruLhYU6ZMaVLGHqQ8Oe57772n7t27KyEhQcOGDdNzzz2n7t27N9un2tpa1dbWOl5XVVVJalx3w2q1NrufN+z1+brejoi+hq5w6i99DV3h1N9w6asn/QtYkKqoqFBDQ4OSkpKcticlJam8vNzlPuXl5S7L19fXq6KiQikpKc2Wsdfp7nFHjRqlO++8U7169VJpaalmzpypm2++Wdu3b5fFYnHZvrlz52rOnDlNtm/YsEGxsbHNfBJtU1RU5Jd6OyL6GrrCqb/0NXSFU39Dva/V1dVulw34yubnrxpqGEaLK4m6Kn/+dnfqbK1Mdna24/v+/ftr4MCB6tWrl9555x3dcccdLts2bdo05eXlOV7bl5jPysry6crmDTZDH/z7O/2zeLtuzszQ4N4XKTIidB+KbLVaVVRUpOHDh4f8Srrh1FcpvPpLX0NXOPU3XPpqv6LkjoAFqW7duikyMrLJ6NPhw4ebjBbZJScnuywfFRWlrl27tljGXqc3x5WklJQU9erVS/v372+2jMVicTlaZTabffYD949PyzTnr3tUVlkjKVKv79+plPgYzbo1XSP7p/jkGB2VLz/Hji6c+iqFV3/pa+gKp/6Gel896VvAJptHR0crIyOjyfBgUVGRhgwZ4nKfzMzMJuU3bNiggQMHOjrdXBl7nd4cV5KOHDmigwcPKiUlcGHlH5+W6ZG/7DgTos4qr6zRI3/ZoX98WhaglgEAEJ4CetdeXl6eXn75Zb3yyivau3evpkyZogMHDmjSpEmSGi+V3XfffY7ykyZN0tdff628vDzt3btXr7zyigoKCvSrX/3KUebxxx/Xhg0bNH/+fH3++eeaP3++Nm7cqMmTJ7t93JMnT+pXv/qViouL9dVXX+m9997Trbfeqm7duuknP/lJ+3w452mwGZrz1z0yXLxn3zbnr3vUYHNVAgAA+ENA50hlZ2fryJEjevbZZ1VWVqb+/fursLBQvXr1kiSVlZU5re2UlpamwsJCTZkyRQsXLlRqaqpefPFFjR071lFmyJAhWrFihWbMmKGZM2eqd+/eWrlypQYNGuT2cSMjI7V79269/vrrOn78uFJSUvTDH/5QK1euVFxcXDt9Os4+LD3aZCTqXIakssoafVh6VJm9u7ZfwwAACGMBn2yem5ur3Nxcl+8tW7asybZhw4Zpx44dLdY5btw4jRs3zuvjdurUSevXr29x//Z2+ETzIcqbcgAAoO0C/ogYuKd7XIxPywEAgLYjSAWJ69IuVEp8jJpb5MAkKSU+Rtelsfo6AADthSAVJCIjTJp1a7rL9+zhatat6SG9nhQAAB0NQSqIjOyfosX3XqOLLoh22p4cH6PF914T8utIAQDQ0QR8sjk8M7J/ijJ6Xahrn9soSVp2/zUaemUyI1EAAAQAI1JBKDH27IqrfVK6EKIAAAgQglQQioqMUFxM42BiZXVoP4EbAICOjCAVpBI6NY5KVZ4mSAEAECgEqSCVcOby3jGCFAAAAUOQClLx9hEpLu0BABAwBKkgZQ9SxxmRAgAgYAhSQYo5UgAABB5BKkjFE6QAAAg4glSQsk82P84cKQAAAoYgFaS4tAcAQOARpIJUfCyTzQEACDSCVJCyj0hxaQ8AgMAhSAUpJpsDABB4BKkgldCp8Vl7VTX1arAZAW4NAADhiSAVpLqcGZGSpCpGpQAACAiCVJAyR0bIEtk4EsWEcwAAAoMgFcQ6N17d0/HqusA2BACAMEWQCmKxjiDFiBQAAIFAkApisVH2S3uMSAEAEAgEqSDWmREpAAACiiAVxLi0BwBAYBGkgpg9SLEoJwAAgUGQCmKOOVLctQcAQEAQpIKYY44UI1IAAAQEQSqI2S/tHWOOFAAAAUGQCmL2S3uVXNoDACAgCFJBjEt7AAAEFkEqiJ17157NZgS2MQAAhCGCVBCzBynDkE7U1Ae2MQAAhCGCVBCLipBioyMl8ZgYAAACgSAV5BI6mSWxujkAAIFAkApy8WeC1DHu3AMAoN0RpIJcQmxjkOIxMQAAtD+CVJCL59IeAAABQ5AKcgQpAAAChyAV5ByTzblrDwCAdkeQCnLxZxaTqmRECgCAdkeQCnIJnaIl8ZgYAAACgSAV5BJY/gAAgIAhSAU5Lu0BABA4BKkgd3ayOUEKAID2RpAKcmeXP6iTzWYEuDUAAIQXglSQswcpmyGdrKsPcGsAAAgvBKkgF2OOVIy58TQyTwoAgPZFkAoBjiUQCFIAALQrglQIsD+4mCUQAABoXwSpEGAPUty5BwBA+yJIhQD7pb1KRqQAAGhXBKkQ4BiRYo4UAADtiiAVAuK5tAcAQEAQpEIAd+0BABAYBKkQYL+0V3maOVIAALQnglQISHQsf8CIFAAA7SngQWrRokVKS0tTTEyMMjIytHnz5hbLb9q0SRkZGYqJidGll16qJUuWNCmzatUqpaeny2KxKD09XWvWrGnTcR9++GGZTCbl5+d73L/2EO+4tMeIFAAA7SmgQWrlypWaPHmypk+frpKSEg0dOlSjRo3SgQMHXJYvLS3V6NGjNXToUJWUlOiZZ57RY489plWrVjnKFBcXKzs7Wzk5Odq1a5dycnI0fvx4bdu2zavjrl27Vtu2bVNqaqrvPwAfOXtpjxEpAADaU0CD1AsvvKCHHnpIEyZMUN++fZWfn68ePXpo8eLFLssvWbJEPXv2VH5+vvr27asJEybowQcf1PPPP+8ok5+fr+HDh2vatGnq06ePpk2bpltuucVpNMnd43777bd69NFH9cYbb8hsNvvlM/CFc5c/MAwjwK0BACB8RAXqwHV1ddq+fbumTp3qtD0rK0tbt251uU9xcbGysrKcto0YMUIFBQWyWq0ym80qLi7WlClTmpSxByl3j2uz2ZSTk6Mnn3xS/fr1c6tPtbW1qq2tdbyuqqqSJFmtVlmtvh0tstdntVrVOaoxD9fbDB0/VaMLLAE7rX5xbl9DXTj1VQqv/tLX0BVO/Q2XvnrSv4D9xq2oqFBDQ4OSkpKcticlJam8vNzlPuXl5S7L19fXq6KiQikpKc2Wsdfp7nHnz5+vqKgoPfbYY273ae7cuZozZ06T7Rs2bFBsbKzb9XiiqKhIhiFFmSJVb5i0tnCDLrT45VABV1RUFOgmtJtw6qsUXv2lr6ErnPob6n2trq52u2zAhy5MJpPTa8Mwmmxrrfz5292ps6Uy27dv1x//+Eft2LGjxbacb9q0acrLy3O8rqqqUo8ePZSVlaUuXbq4XY87rFarioqKNHz4cJnNZv1/n23S4RO1unrQDeqX6ttjBdr5fQ1l4dRXKbz6S19DVzj1N1z6ar+i5I6ABalu3bopMjKyyejT4cOHm4wW2SUnJ7ssHxUVpa5du7ZYxl6nO8fdvHmzDh8+rJ49ezreb2ho0BNPPKH8/Hx99dVXLttnsVhksTQdDjKbzX77gbPXnRgbrcMnanWyzgjZH25/fo4dTTj1VQqv/tLX0BVO/Q31vnrSt4BNNo+OjlZGRkaT4cGioiINGTLE5T6ZmZlNym/YsEEDBw50dLq5MvY63TluTk6OPvnkE+3cudPxlZqaqieffFLr16/3vtN+dPYxMSyBAABAewnopb28vDzl5ORo4MCByszM1NKlS3XgwAFNmjRJUuOlsm+//Vavv/66JGnSpElasGCB8vLyNHHiRBUXF6ugoEDLly931Pn444/rxhtv1Pz58zVmzBi9/fbb2rhxo7Zs2eL2cbt27eoY4bIzm81KTk7WlVde6e+PxSsJnXhwMQAA7S2gQSo7O1tHjhzRs88+q7KyMvXv31+FhYXq1auXJKmsrMxpbae0tDQVFhZqypQpWrhwoVJTU/Xiiy9q7NixjjJDhgzRihUrNGPGDM2cOVO9e/fWypUrNWjQILePG4xYSwoAgPYX8Mnmubm5ys3NdfnesmXLmmwbNmyYduzY0WKd48aN07hx47w+rivNzYvqKBJiWd0cAID2FvBHxMA34rm0BwBAuyNIhQjH6uZc2gMAoN0QpEJEIpf2AABodwSpEMFdewAAtD+CVIiI59IeAADtjiAVIux37VVWWx2PzQEAAP5FkAoR9kt7dQ02nbY2BLg1AACEB4JUiIiNjpQ5svEBy8yTAgCgfRCkQoTJZFJ8J/udewQpAADaA0EqhCTaJ5yzBAIAAO2CIBVCWJQTAID2RZAKIVzaAwCgfRGkQsjZESku7QEA0B4IUiHEvgRCJSNSAAC0C4JUCHGMSBGkAABoFwSpEBJvf3Axl/YAAGgXBKkQYl/+4BgjUgAAtAuCVAhJ6HT2eXsAAMD/CFIhhLv2AABoXwSpEBLficnmAAC0J4JUCLGPSNXW21RjbQhwawAACH0EqRBygSVKkREmSYxKAQDQHghSIcRkMjkW5WSeFAAA/keQCjH2y3vHTjEiBQCAvxGkQkzCmUU5KxmRAgDA7whSISaBO/cAAGg3BKkQE+9YS4ogBQCAvxGkQox9dXNGpAAA8D+CVIixTzZnjhQAAP5HkAoxjsfEMCIFAIDfEaRCjP2uvWPVjEgBAOBvBKkQw117AAC0H4JUiDk7R4ogBQCAvxGkQgx37QEA0H4IUiHGvo7UaWuDaqwNAW4NAAChjSAVYuIsUYowNX5fxeU9AAD8iiAVYiIiTIrvxOrmAAC0B4JUCEq0L4FwiiUQAADwJ4JUCOJ5ewAAtA+CVAiyryVVyZ17AAD4FUEqBNlXNz/O8/YAAPArglQIimd1cwAA2gVBKgQlMEcKAIB2QZAKQcyRAgCgfRCkQlBi5zPLH1QzRwoAAH8iSIUg5kgBANA+CFIhyH7XXiVzpAAA8CuCVAhKcIxIcWkPAAB/IkiFIPtde6fqGlRXbwtwawAACF0EqRAUF2OWydT4PZf3AADwH4JUCIqMMKlLzJklEFjdHAAAvyFIhajEM5f3jnHnHgAAfkOQClHx9uftEaQAAPAbglSI4s49AAD8jyAVoux37jHZHAAA/yFIhagEVjcHAMDvCFIhyjFHirv2AADwmyhPd/jqq6+0efNmffXVV6qurtZFF12kq6++WpmZmYqJifFHG+EFRqQAAPA/t0ek/vu//1uDBw/WpZdeqieffFJr167V5s2b9fLLL2vkyJFKSkpSbm6uvv76a48asGjRIqWlpSkmJkYZGRnavHlzi+U3bdqkjIwMxcTE6NJLL9WSJUualFm1apXS09NlsViUnp6uNWvWeHzc2bNnq0+fPurcubMSExP1H//xH9q2bZtHfQukxM4EKQAA/M2tIHXNNdfohRde0L333quvvvpK5eXl2r59u7Zs2aI9e/aoqqpKb7/9tmw2mwYOHKg333zTrYOvXLlSkydP1vTp01VSUqKhQ4dq1KhROnDggMvypaWlGj16tIYOHaqSkhI988wzeuyxx7Rq1SpHmeLiYmVnZysnJ0e7du1STk6Oxo8f7xSC3DnuFVdcoQULFmj37t3asmWLLrnkEmVlZem7775zq2+BltCJS3sAAPibyTAMo7VC77zzjn70ox+5VWFFRYVKS0t17bXXtlp20KBBuuaaa7R48WLHtr59++r222/X3Llzm5R/+umntW7dOu3du9exbdKkSdq1a5eKi4slSdnZ2aqqqtLf//53R5mRI0cqMTFRy5cv9+q4klRVVaX4+Hht3LhRt9xyi8sytbW1qq2tddqnR48eqqioUJcuXVr9PDxhtVpVVFSk4cOHy2w2N3m/5OBxjV/6oS5OiNG7T9zo02O3t9b6GkrCqa9SePWXvoaucOpvuPS1qqpK3bp1U2VlZau/v92aI2UPUfX19XrjjTc0YsQIJScnuyzbrVs3devWrdU66+rqtH37dk2dOtVpe1ZWlrZu3epyn+LiYmVlZTltGzFihAoKCmS1WmU2m1VcXKwpU6Y0KZOfn+/1cevq6rR06VLFx8drwIABzfZp7ty5mjNnTpPtGzZsUGxsbLP7tUVRUZHL7YdPS1KUKk6cVmFhoV+O3d6a62soCqe+SuHVX/oausKpv6He1+rqarfLejTZPCoqSo888ojTiJC3Kioq1NDQoKSkJKftSUlJKi8vd7lPeXm5y/L19fWqqKhQSkpKs2XsdXpy3L/97W+66667VF1drZSUFBUVFbUYEqdNm6a8vDzHa/uIVFZWVruPSB09Vafndr6nmgaTho8YKXNk8N6gGS5/AUnh1VcpvPpLX0NXOPU3XPpaVVXldlmP79obNGiQdu7cqV69enm6q0smk8nptWEYTba1Vv787e7U6U6ZH/7wh9q5c6cqKir00ksvOeZade/e3WXbLBaLLBZLk+1ms9lvP3DN1d01LtLx/el6KTYm+H/g/fk5djTh1FcpvPpLX0NXOPU31PvqSd88DlK5ubnKy8vTwYMHlZGRoc6dOzu9//3vf9+terp166bIyMgmo0CHDx9uMlpkl5yc7LJ8VFSUunbt2mIZe52eHLdz58667LLLdNlll2nw4MG6/PLLVVBQoGnTprnVx0CKioxQXEyUTtTU6/hpq7pe0DTgAQCAtvH4ek92drZKS0v12GOP6frrr9cPfvADXX311Y7/uis6OloZGRlNrrMWFRVpyJAhLvfJzMxsUn7Dhg0aOHCgIz02V8ZepzfHtTMMw2kyeUeX6HhwMXfuAQDgDx6PSJWWlvrs4Hl5ecrJydHAgQOVmZmppUuX6sCBA5o0aZKkxjlH3377rV5//XVJjXfoLViwQHl5eZo4caKKi4tVUFDguBtPkh5//HHdeOONmj9/vsaMGaO3335bGzdu1JYtW9w+7qlTp/Tcc8/ptttuU0pKio4cOaJFixbpm2++0Z133umz/vtbQqxZB46ylhQAAP7icZDy1dwoqXF068iRI3r22WdVVlam/v37q7Cw0HGMsrIyp7Wd0tLSVFhYqClTpmjhwoVKTU3Viy++qLFjxzrKDBkyRCtWrNCMGTM0c+ZM9e7dWytXrtSgQYPcPm5kZKQ+//xzvfbaa6qoqFDXrl117bXXavPmzerXr5/P+u9v8axuDgCAX3kcpCTpv/7rv7RkyRKVlpaquLhYvXr1Un5+vtLS0jRmzBiP6srNzVVubq7L95YtW9Zk27Bhw7Rjx44W6xw3bpzGjRvn9XFjYmK0evXqFvcPBgmO5+0RpAAA8AeP50gtXrxYeXl5Gj16tI4fP66GhgZJUkJCgmOtJnQM9uftVTJHCgAAv/A4SP3pT3/SSy+9pOnTpysy8uwt9gMHDtTu3bt92ji0TULsmUt7jEgBAOAXHgep0tJSl3fnWSwWnTp1yieNgm8wRwoAAP/yOEilpaVp586dTbb//e9/V3p6ui/aBB+xL39wjEt7AAD4hceTzZ988kn94he/UE1NjQzD0Icffqjly5dr7ty5evnll/3RRnjJfmmvkkt7AAD4hcdB6mc/+5nq6+v11FNPqbq6Wvfcc4++973v6Y9//KPuuusuf7QRXnLMkeLSHgAAfuHV8gcTJ07UxIkTVVFRIZvN1uyz5xBY8Z1Y2RwAAH/yKkhJjc+m27dvn0wmk0wmky666CJftgs+YB+RqqqpV4PNUGRE8w+DBgAAnvN4snlVVZVycnKUmpqqYcOG6cYbb1RqaqruvfdeVVZW+qON8JL9rj1JqmKeFAAAPudxkJowYYK2bdumd955R8ePH1dlZaX+9re/6eOPP9bEiRP90UZ4yRwZoQssjYOOrCUFAIDveXxp75133tH69et1ww03OLaNGDFCL730kkaOHOnTxqHtEmLNOllbr2PVdUpT50A3BwCAkOLxiFTXrl0VHx/fZHt8fLwSExN90ij4jmMJBO7cAwDA5zwOUjNmzFBeXp7Kysoc28rLy/Xkk09q5syZPm0c2i7Bfufeae7cAwDA19y6tHf11VfLZDp7x9f+/fvVq1cv9ezZU5J04MABWSwWfffdd3r44Yf901J4JZ61pAAA8Bu3gtTtt9/u52bAXxJ43h4AAH7jVpCaNWuWv9sBP+ExMQAA+I/Hc6QQXBJY3RwAAL/xePmDiIgIp/lS52toaGhTg+Bb9hGpY1zaAwDA5zwOUmvWrHF6bbVaVVJSotdee01z5szxWcPgGwmx9rv2CFIAAPiax0FqzJgxTbaNGzdO/fr108qVK/XQQw/5pGHwjbPrSHFpDwAAX/PZHKlBgwZp48aNvqoOPuK4a48RKQAAfM4nQer06dP605/+pIsvvtgX1cGH4s+5a89mMwLcGgAAQovHl/YSExOdJpsbhqETJ04oNjZWf/nLX3zaOLRd/JkRKcOQTtTUO4IVAABoO4+D1B/+8AenIBUREaGLLrpIgwYN4ll7HZAlKlKx0ZGqrmvQ8dN1BCkAAHzI4yD1wAMP+KEZ8KeETmZV1zXoWLVVvboGujUAAIQOt4PUJ5984la573//+143Bv6REButQ5U1LMoJAICPuR2kfvCDH8hkMskwGics2y/v2V/bt7EgZ8fDY2IAAPAPt4NUaWmp43vDMNS/f38VFhaqV69efmkYfMcepHhwMQAAvuV2kDo/MJlMJl188cUEqSAQ73jeHkEKAABf4qHFYcAxInWaOVIAAPgSQSoM2Fc3r2RECgAAn2pTkDp3PSl0XPYRqWPctQcAgE+5PUfq6quvdgpOp0+f1q233qro6Gincjt27PBd6+ATCbFn5khx1x4AAD7ldpC6/fbbnV6PGTPG122Bn3BpDwAA/3A7SM2aNcuf7YAfMSIFAIB/MNk8DJxdR6pONpvRSmkAAOAut4LUyJEjtXXr1lbLnThxQvPnz9fChQvb3DD4TvyZS3s2QzpZVx/g1gAAEDrcurR35513avz48YqLi9Ntt92mgQMHKjU1VTExMTp27Jj27NmjLVu2qLCwUD/+8Y/1u9/9zt/thgdizJGKMUeoxmpTZbVVXWLMgW4SAAAhwa0g9dBDDyknJ0dvvfWWVq5cqZdeeknHjx+X1LgEQnp6ukaMGKHt27fryiuv9Gd74aWETtEqt9boWHWdelwYG+jmAAAQEtyebB4dHa177rlH99xzjySpsrJSp0+fVteuXWU2M8LR0SXEmlVeVcNjYgAA8CG3g9T54uPjFR8f78u2wI/OPiaGIAUAgK9w116YSDjz4OJKVjcHAMBnCFJh4uwSCIxIAQDgKwSpMBHPpT0AAHyOIBUm7Jf2GJECAMB3PA5SBw8e1DfffON4/eGHH2ry5MlaunSpTxsG3zp3dXMAAOAbHgepe+65R++++64kqby8XMOHD9eHH36oZ555Rs8++6zPGwjfSOTSHgAAPudxkPr000913XXXSZL+53/+R/3799fWrVv13//931q2bJmv2wcfiXdc2mNECgAAX/E4SFmtVlksFknSxo0bddttt0mS+vTpo7KyMt+2Dj5jv7RXyYgUAAA+43GQ6tevn5YsWaLNmzerqKhII0eOlCQdOnRIXbt29XkD4RvnLn9gGEaAWwMAQGjwOEjNnz9ff/7zn3XTTTfp7rvv1oABAyRJ69atc1zyQ8djv2uv3mboVF1DgFsDAEBo8PgRMTfddJMqKipUVVWlxMREx/af//znio3lYbgdVYw5QtFREaqrt+l4dZ0usHj9dCAAAHCGxyNSp0+fVm1trSNEff3118rPz9e+ffvUvXt3nzcQvmEymZTQidXNAQDwJY+D1JgxY/T6669Lko4fP65Bgwbp97//vW6//XYtXrzY5w2E7yTGsignAAC+5HGQ2rFjh4YOHSpJeuutt5SUlKSvv/5ar7/+ul588UWfNxC+c/YxMSyBAACAL3gcpKqrqxUXFydJ2rBhg+644w5FRERo8ODB+vrrr33eQPgOl/YAAPAtj4PUZZddprVr1+rgwYNav369srKyJEmHDx9Wly5dfN5A+A5rSQEA4FseB6lf//rX+tWvfqVLLrlE1113nTIzMyU1jk5dffXVHjdg0aJFSktLU0xMjDIyMrR58+YWy2/atEkZGRmKiYnRpZdeqiVLljQps2rVKqWnp8tisSg9PV1r1qzx6LhWq1VPP/20rrrqKnXu3Fmpqam67777dOjQIY/715EkxLK6OQAAvuRxkBo3bpwOHDigjz/+WOvXr3dsv+WWW/SHP/zBo7pWrlypyZMna/r06SopKdHQoUM1atQoHThwwGX50tJSjR49WkOHDlVJSYmeeeYZPfbYY1q1apWjTHFxsbKzs5WTk6Ndu3YpJydH48eP17Zt29w+bnV1tXbs2KGZM2dqx44dWr16tb744gvHKu7BKp5LewAA+JTHQUqSkpOTdfXVV+vQoUP69ttvJUnXXXed+vTp41E9L7zwgh566CFNmDBBffv2VX5+vnr06NHs3X9LlixRz549lZ+fr759+2rChAl68MEH9fzzzzvK5Ofna/jw4Zo2bZr69OmjadOm6ZZbblF+fr7bx42Pj1dRUZHGjx+vK6+8UoMHD9af/vQnbd++vdmQFwwSeHAxAAA+5fGqjDabTb/5zW/0+9//XidPnpQkxcXF6YknntD06dMVEeFeNqurq9P27ds1depUp+1ZWVnaunWry32Ki4sdc7LsRowYoYKCAlmtVpnNZhUXF2vKlClNytiDlDfHlaTKysrGtZgSEpotU1tbq9raWsfrqqoqSY2XCq1W34YXe32e1BsX3Xhujp2q9Xl7/MmbvgarcOqrFF79pa+hK5z6Gy599aR/Hgep6dOnq6CgQPPmzdP1118vwzD0/vvva/bs2aqpqdFzzz3nVj0VFRVqaGhQUlKS0/akpCSVl5e73Ke8vNxl+fr6elVUVCglJaXZMvY6vTluTU2Npk6dqnvuuafFCfVz587VnDlzmmzfsGGD31Z9LyoqcrvsF5UmSZH65vAxFRYW+qU9/uRJX4NdOPVVCq/+0tfQFU79DfW+VldXu13W4yD12muv6eWXX3aaLzRgwAB973vfU25urttBys5kMjm9NgyjybbWyp+/3Z063T2u1WrVXXfdJZvNpkWLFrXQE2natGnKy8tzvK6qqlKPHj2UlZXl8zsarVarioqKNHz4cJnNZrf2uaSsSgv3fKCGSItGj77Jp+3xJ2/6GqzCqa9SePWXvoaucOpvuPTVfkXJHR4HqaNHj7qcC9WnTx8dPXrU7Xq6deumyMjIJqNAhw8fbjJaZJecnOyyfFRUlLp27dpiGXudnhzXarVq/PjxKi0t1T//+c9Ww5DFYpHFYmmy3Ww2++0HzpO6u3VpHBWrPF2vqKioFgNrR+TPz7GjCae+SuHVX/oausKpv6HeV0/65vFk8wEDBmjBggVNti9YsEADBgxwu57o6GhlZGQ0GR4sKirSkCFDXO6TmZnZpPyGDRs0cOBAR6ebK2Ov093j2kPU/v37tXHjRkdQC2b2BTnrGmw6bW0IcGsAAAh+Ho9I/fa3v9WPfvQjbdy4UZmZmTKZTNq6dasOHjzo8bybvLw85eTkaODAgcrMzNTSpUt14MABTZo0SVLjpbJvv/3W8Wy/SZMmacGCBcrLy9PEiRNVXFysgoICLV++3FHn448/rhtvvFHz58/XmDFj9Pbbb2vjxo3asmWL28etr6/XuHHjtGPHDv3tb39TQ0ODYwTrwgsvVHR0tKcfW4cQGx0pc6RJ1gZDx6utio32+PQDAIBzePybdNiwYfriiy+0cOFCff755zIMQ3fccYdyc3OVmprqUV3Z2dk6cuSInn32WZWVlal///4qLCxUr169JEllZWVOyw2kpaWpsLBQU6ZM0cKFC5WamqoXX3xRY8eOdZQZMmSIVqxYoRkzZmjmzJnq3bu3Vq5cqUGDBrl93G+++Ubr1q2TJP3gBz9wavO7776rm266yaN+dhQmk0nxnaJVcbJWx6utSk3oFOgmAQAQ1LwakkhNTW0yqfzgwYN68MEH9corr3hUV25urnJzc12+t2zZsibbhg0bph07drRY57hx4zRu3Divj3vJJZc4JrGHmsRY85kgxermAAC0lVcLcrpy9OhRvfbaa76qDn7CopwAAPiOz4IUgkN8J/vz9ghSAAC0FUEqzJwdkeLSHgAAbUWQCjP2JRAqGZECAKDN3J5sfscdd7T4/vHjx9vaFrQDx4gUQQoAgDZzO0jFx8e3+v59993X5gbBv+Jjz8yR4tIeAABt5naQevXVV/3ZDrSTxDMjUscYkQIAoM2YIxVmEs7ctcccKQAA2o4gFWa4aw8AAN8hSIWZ+E5MNgcAwFcIUmHGPiJVW29TjbUhwK0BACC4EaTCzAWWKEVGmCQxKgUAQFsRpMKMyWRyLMrJPCkAANqGIBWG7Jf3jp1iRAoAgLYgSIWhhDOLclYyIgUAQJsQpMJQAnfuAQDgEwSpMBTvWEuKIAUAQFsQpMKQfXVzRqQAAGgbglQYsk82Z44UAABtQ5AKQ47HxDAiBQBAmxCkwpD9rr1j1YxIAQDQFgSpMMRdewAA+AZBKgydnSNFkAIAoC0IUmGIu/YAAPANglQYsq8jddraoBprQ4BbAwBA8CJIhaE4S5QiTI3fV3F5DwAArxGkwlBEhEnxnVjdHACAtiJIhalE+xIIp1gCAQAAbxGkwhTP2wMAoO0IUmHKvpZUJXfuAQDgNYJUmLKvbn6c5+0BAOA1glSYimd1cwAA2owgFaYSmCMFAECbEaTCFHOkAABoO4JUmErsfGb5g2rmSAEA4C2CVJhijhQAAG1HkApT9rv2KpkjBQCA1whSYSrBMSLFpT0AALxFkApT9rv2TtU1qK7eFuDWAAAQnAhSYSouxiyTqfF7Lu8BAOAdglSYiowwqUvMmSUQWN0cAACvEKTCWOKZy3vHuHMPAACvEKTCWLz9eXsEKQAAvEKQCmPcuQcAQNsQpMKY/c49JpsDAOAdglQYS2B1cwAA2oQgFcYcc6S4aw8AAK8QpMIYI1IAALQNQSqMJXYmSAEA0BYEqTCW0IlLewAAtAVBKozFxzIiBQBAWxCkwph9jlQlQQoAAK8QpMJYwpm79k7U1svaYAtwawAACD4EqTDWJSbK8X0Vi3ICAOAxglQYi4qMUNyZMHWcIAUAgMcIUmEu0fHgYu7cAwDAUwSpMJfAnXsAAHiNIBXm4lndHAAArwU8SC1atEhpaWmKiYlRRkaGNm/e3GL5TZs2KSMjQzExMbr00ku1ZMmSJmVWrVql9PR0WSwWpaena82aNR4fd/Xq1RoxYoS6desmk8mknTt3tqmfHVWC43l7BCkAADwV0CC1cuVKTZ48WdOnT1dJSYmGDh2qUaNG6cCBAy7Ll5aWavTo0Ro6dKhKSkr0zDPP6LHHHtOqVascZYqLi5Wdna2cnBzt2rVLOTk5Gj9+vLZt2+bRcU+dOqXrr79e8+bN898H0AGcXUuKOVIAAHgqqvUi/vPCCy/ooYce0oQJEyRJ+fn5Wr9+vRYvXqy5c+c2Kb9kyRL17NlT+fn5kqS+ffvq448/1vPPP6+xY8c66hg+fLimTZsmSZo2bZo2bdqk/Px8LV++3O3j5uTkSJK++uort/tTW1ur2tpax+uqqipJktVqldXq2xEfe31trTfOEilJOnqq1udt9BVf9TUYhFNfpfDqL30NXeHU33Dpqyf9C1iQqqur0/bt2zV16lSn7VlZWdq6davLfYqLi5WVleW0bcSIESooKJDVapXZbFZxcbGmTJnSpIw9fHlzXHfNnTtXc+bMabJ9w4YNio2NbVPdzSkqKmrT/ocOmSRFas//fq3CwlLfNMpP2trXYBJOfZXCq7/0NXSFU39Dva/V1dVulw1YkKqoqFBDQ4OSkpKcticlJam8vNzlPuXl5S7L19fXq6KiQikpKc2WsdfpzXHdNW3aNOXl5TleV1VVqUePHsrKylKXLl3aVPf5rFarioqKNHz4cJnNZq/rqSn5Vmu//kyxiRdp9OgMH7bQd3zV12AQTn2Vwqu/9DV0hVN/w6Wv9itK7gjopT1JMplMTq8Nw2iyrbXy5293p05Pj+sOi8Uii8XSZLvZbPbbD1xb6+4W10mSVFVT3+H/Ufjzc+xowqmvUnj1l76GrnDqb6j31ZO+BWyyebdu3RQZGdlkFOjw4cNNRovskpOTXZaPiopS165dWyxjr9Ob44Yy1pECAMB7AQtS0dHRysjIaHKdtaioSEOGDHG5T2ZmZpPyGzZs0MCBAx3psbky9jq9OW4oi+/EyuYAAHgroJf28vLylJOTo4EDByozM1NLly7VgQMHNGnSJEmNc46+/fZbvf7665KkSZMmacGCBcrLy9PEiRNVXFysgoICx914kvT444/rxhtv1Pz58zVmzBi9/fbb2rhxo7Zs2eL2cSXp6NGjOnDggA4dOiRJ2rdvn6TGEa/k5GS/fzbtxT4iVVVTrwabociItl3eBAAgnAQ0SGVnZ+vIkSN69tlnVVZWpv79+6uwsFC9evWSJJWVlTmt7ZSWlqbCwkJNmTJFCxcuVGpqql588UXH0geSNGTIEK1YsUIzZszQzJkz1bt3b61cuVKDBg1y+7iStG7dOv3sZz9zvL7rrrskSbNmzdLs2bP99ZG0O/vK5pJUddqqxM7RAWwNAADBJeCTzXNzc5Wbm+vyvWXLljXZNmzYMO3YsaPFOseNG6dx48Z5fVxJeuCBB/TAAw+0WEcoMEdG6AJLlE7W1us4QQoAAI8E/BExCDz7qNQx5kkBAOARghSU2Nn+mBju3AMAwBMEKSjBfufeaUakAADwBEEKimctKQAAvEKQghI6EaQAAPAGQQqOtaQqTxOkAADwBEEKZ+dIcdceAAAeIUjBMUfqGJf2AADwCEEKSoy137VHkAIAwBMEKZydI8WlPQAAPEKQwtm79hiRAgDAIwQpOOZIVZ62ymYzAtwaAACCB0EKjmftGYZ0oqY+wK0BACB4EKQgS1SkYqMjJfGYGAAAPEGQgqSz86RYAgEAAPcRpCBJSohlUU4AADxFkIIkHhMDAIA3CFKQdDZI8eBiAADcR5CCJCne8bw9ghQAAO4iSEHSOSNS3LUHAIDbCFKQdPauvUpGpAAAcBtBCpLOjkgd4649AADcRpCCpHOWP+CuPQAA3EaQgiQu7QEA4A2CFCQxIgUAgDcIUpB07jpSdbLZjAC3BgCA4ECQgiQp/sylPZshnayrD3BrAAAIDgQpSJJizJGKMTf+ODBPCgAA9xCk4JBwZnVzlkAAAMA9BCk48Lw9AAA8Q5CCw9nHxBCkAABwB0EKDvZLe5Vc2gMAwC0EKThwaQ8AAM8QpOAQz6U9AAA8QpCCg/3SHiNSAAC4hyAFh3NXNwcAAK0jSMEhkUt7AAB4hCAFh3jHpT1GpAAAcAdBCg72S3uVjEgBAOAWghQczl3+wDCMALcGAICOjyAFB/tde/U2Q6fqGgLcGgAAOj6CFBxizBGKjmr8kWCeFAAArSNIwcFkMimhE6ubAwDgLoIUnCTGsignAADuIkjBydnHxHBpDwCA1hCk4IRLewAAuI8gBSesJQUAgPsIUnCSEMvq5gAAuIsgBSfxXNoDAMBtBCk4sV/aO0aQAgCgVQQpOLEvf1DJXXsAALSKIAUn3LUHAID7CFJwcnYdKYIUAACtIUjBif2uvcpqqwzDCHBrAADo2KIC3QB0LHGWxh+JugabNn3xnYZefpEiI0w+q7/BZujD0qM6fKJG3eNidF3ahdQPAAhaBCk4/OPTMs3+6x7H6wde/Ugp8TGadWu6RvZP8Un9c/66R2WVNY5t1H9Wg83QttKj2l5hUtfSo8q8rHtQhUB/1h/MbbfXH6znNhQ++2A9t6Hw2QTrz6UnCFKQ1BgSHvnLDp1/Ma+8skaP/GWHFt97TZvCAvW3Xv/ZkBap1/d/HFQh0J/1B3Pbm9YfXOc2tD57f9fv23MbWp+Nb+v3d9s9xRwpqMFmaM5f9zQJCZJknPmasfZT7Tp4XHsOVWlf+Qn97+ET+vd3J/VVxSkdPFqtb45Vq6zytA5X1ei7E7U6eqpOldVWVdVYVXXaqtnrPmu2fkma89c9arB5NyertfZ39PrtIe3c/ylIZ0PaPz4t86reUKg/mNse7PUHc9uDvf5gbru/6/d3270R8BGpRYsW6Xe/+53KysrUr18/5efna+jQoc2W37Rpk/Ly8vTZZ58pNTVVTz31lCZNmuRUZtWqVZo5c6b+/e9/q3fv3nruuef0k5/8xKPjGoahOXPmaOnSpTp27JgGDRqkhQsXql+/fr79ADqAD0uPNvmhPF/FyTqNWfi+X45vSCqrrFH/Wf+QxRypSJNJEREmRZpMiowwyWSSak5H6o/7tygyIkKRESZFnHkvIsKk6lpri+2315/952J1u8CiiAjJpMZ6I0wmRZgkk+m81zI1ljOZdLiqxq36J68s0cWJsTJJMtnrOPPi/G2mM8e0GYaWbvqyxZD21Fuf6NvjpxVpMjnaadKZCiWnuu3v2V/bZGhu4ect1j919W6drmtQRERj/fY6dU495xzOUb8k2WzSM2t3t1j/M6t3N57LSHvdZytqqK/X3mMmXbC/QlFRUU7HNgxDz6z5tMW6p6/5VBdYohrb7tjzbPvOra9x+9lXNsPQ9NbqX/upLuwcfeaSgevLBiYXm01qDOCt1T9j7afqHhfjuCRxfl2m84557vsNNkMz1rZef2pCp7P1N9OH8+t3p+6Zaz9TjwtjG/+Nnldvfb1Vh6ql/f93UlHmpr9mbO7U//ZnSuvW+bzLNc23//zPZqYb9fe+6IJmLweZXJ1Yp/pb/uPw129/psu7x3l8ucnduq9Iarnu5s61u/X3Se7isn5rvVVHaqSDx6pljjK7rv9t7+tvSWt1m9T4R+3w9OR2vcxnMgJ4a9bKlSuVk5OjRYsW6frrr9ef//xnvfzyy9qzZ4969uzZpHxpaan69++viRMn6uGHH9b777+v3NxcLV++XGPHjpUkFRcXa+jQofrP//xP/eQnP9GaNWv061//Wlu2bNGgQYPcPu78+fP13HPPadmyZbriiiv0m9/8Rv/617+0b98+xcXFudW/qqoqxcfHq7KyUl26dPHRp9bIarWqsLBQo0ePltnc9IfZE2/v/FaPr9jZarn4TmZFR0XIZjNkMww12AzZDJ35r/M2AAACYfnEwcrs3bVNdXjy+zugQWrQoEG65pprtHjxYse2vn376vbbb9fcuXOblH/66ae1bt067d2717Ft0qRJ2rVrl4qLiyVJ2dnZqqqq0t///ndHmZEjRyoxMVHLly9367iGYSg1NVWTJ0/W008/LUmqra1VUlKS5s+fr4cffthlf2pra1VbW+t4XVVVpR49eqiiosIvQaqoqEjDhw9vc5DaVnpU977ycavl/vLgQA1Ku7DVcoZhyDCkBsOQzWZoW+kxPfRfO1rd77d39Ff/73WRzWac2bexjro6qz748ENlZAyUKTJSDTadDW02Q3vLT+iP//x3q/X/bEhP9era2dG+xvDX+J49CBqGnN4zDEMHj57W6p2HWq1/VL8kJXWxNF4OPbOv43vZ65Mk+/GlA0dP6cOvjrda9w8u7qKU+E5n6jMcf5HZ//Wef6zG/0qHq2q1t/xEq/Vf3r2zul1gcSx5Ya/L/r39GOcyDOnoqTqVHqlutf4eiZ2UGGtu0m6bYVNV1QnFxcXJZDI5HbPqtFWHWhkplaTkLhZdYDk76nFuK52bbDhtP1lbr+9Otr6Cf9fOZnU+t34X/8d09T/R6tp6HXVjYduETmbFRkc2qaPJ533e+6frGlRVU99q/V1iohRjjmyyvaX/9ddYG3SitqHVui+wRMoSdbZux0+mIdXV1Sk6OtrlZ1NXb9OputbrjzVHKjqq6QwUw2WtzvWfttparb+TOULmSFf1t8zaYFONG/Vbopqrv/kj1DfYVFvf+q9lS6RJUS7qbk19g021Da3XH91M/YYhNTTUKzIyyuVobH2DTXVu1G+ONCmqmVGj5vZusBmyulH3C3depVu/37a5UlVVVerWrZtbQSpgl/bq6uq0fft2TZ061Wl7VlaWtm7d6nKf4uJiZWVlOW0bMWKECgoKZLVaZTabVVxcrClTpjQpk5+f7/ZxS0tLVV5e7nQsi8WiYcOGaevWrc0Gqblz52rOnDlNtm/YsEGxsbEu92mroqKiNtdhM6SE6Egdr5NcD50bSoiWvtvzgQr3unjbR/WbD+3U/mYub/fuIh3f7zrsXeJm/d+3famICs/bf0mM9E836s+K+/bspMPmrwQ52R9r0odq+kvufDd0OabLuxx1u82O+qNM2lveev0julXp8njP/6baX2nSgiOt1z8m5WQr9R93XXdl63WPu7ja+7bvab3+u3vV+LX+e9P8W/99l9Z6XL+7dT/Qu66Vuk+3qf4HL2+tftfcrf+hy61+rX/iFZ7X73bdV9b7te0/b7V+10HY3fof9qL97tb95Wc7VfhNiUd1n6+6uvU/EO0CFqQqKirU0NCgpKQkp+1JSUkqLy93uU95ebnL8vX19aqoqFBKSkqzZex1unNc+39dlfn666+b7dO0adOUl5fneG0fkcrKyurQI1KSZL7k//TLFbskOf81YJ9Z8Zs7BmhEvyQXe/q/fnf62pHb35IGm6G3fv8v/V9Vrcu/wkySkuMtejT7Rq+u+Xf0+ls6tx297aFcvz/Pq7/bHuz1d/S2B/Lc+vuzOVdVVZXbZQM+2fz8CX2GYbQ4yc9V+fO3u1Onr8qcy2KxyGKxNNluNpt9EnZc8VXdP/7BxYqKimxyS2myj24p9UX9LfU1GNrvilnS7Nv66ZG/7JBJrkKaNOvWfoqxRId0/a7ObbC0PRTr9+d59Xfbg73+YGl7IM6tvz8bp2N58Hs1YMsfdOvWTZGRkU1Gnw4fPtxkJMguOTnZZfmoqCh17dq1xTL2Ot05bnJysiR51LZQMLJ/irY8fbOWTxysP971Ay2fOFhbnr7ZZ+tyUH/z9S6+9xolx8c4bU+Oj2nz+lTBXn8wtz3Y6w/mtgd7/cHcdn/X7++2e8UIoOuuu8545JFHnLb17dvXmDp1qsvyTz31lNG3b1+nbZMmTTIGDx7seD1+/Hhj1KhRTmVGjhxp3HXXXW4f12azGcnJycb8+fMd79fW1hrx8fHGkiVL3O5fZWWlIcmorKx0ex931dXVGWvXrjXq6up8XndHEy59rW+wGZv3lRszX37b2Lyv3KhvsPm8/q3/W2GsLfnG2Pq/FR2ifnfPbUdsu6f1B+u59ed59bZ+TwTzue2In01HObf+/mw8+f0d0CC1YsUKw2w2GwUFBcaePXuMyZMnG507dza++uorwzAMY+rUqUZOTo6j/JdffmnExsYaU6ZMMfbs2WMUFBQYZrPZeOuttxxl3n//fSMyMtKYN2+esXfvXmPevHlGVFSU8cEHH7h9XMMwjHnz5hnx8fHG6tWrjd27dxt33323kZKSYlRVVbndP4KUb9DX0BVO/aWvoSuc+hsuffXk93dA50hlZ2fryJEjevbZZ1VWVqb+/fursLBQvXr1kiSVlZXpwIEDjvJpaWkqLCzUlClTtHDhQqWmpurFF190rCElSUOGDNGKFSs0Y8YMzZw5U71799bKlSsda0i5c1xJeuqpp3T69Gnl5uY6FuTcsGGD22tIAQCA0Bfwyea5ubnKzc11+d6yZcuabBs2bJh27Gh5TaJx48Zp3LhxXh9XapxoPnv2bM2ePbvFegAAQPjiWXsAAABeIkgBAAB4iSAFAADgJYIUAACAlwhSAAAAXiJIAQAAeIkgBQAA4KWAryMVyowzD1T25CnS7rJaraqurlZVVZXfHojcUdDX0BVO/aWvoSuc+hsufbX/3rb/Hm8JQcqPTpw4IUnq0aNHgFsCAAA8deLECcXHx7dYxmS4E7fgFZvNpkOHDikuLk4mk8mndVdVValHjx46ePCgunTp4tO6Oxr6GrrCqb/0NXSFU3/Dpa+GYejEiRNKTU1VRETLs6AYkfKjiIgIXXzxxX49RpcuXUL6h/lc9DV0hVN/6WvoCqf+hkNfWxuJsmOyOQAAgJcIUgAAAF4iSAUpi8WiWbNmyWKxBLopfkdfQ1c49Ze+hq5w6m849dVdTDYHAADwEiNSAAAAXiJIAQAAeIkgBQAA4CWCFAAAgJcIUh3UokWLlJaWppiYGGVkZGjz5s0tlt+0aZMyMjIUExOjSy+9VEuWLGmnlrbN3Llzde211youLk7du3fX7bffrn379rW4z3vvvSeTydTk6/PPP2+nVntn9uzZTdqcnJzc4j7Bel4l6ZJLLnF5nn7xi1+4LB9M5/Vf//qXbr31VqWmpspkMmnt2rVO7xuGodmzZys1NVWdOnXSTTfdpM8++6zVeletWqX09HRZLBalp6drzZo1fuqB+1rqq9Vq1dNPP62rrrpKnTt3Vmpqqu677z4dOnSoxTqXLVvm8lzX1NT4uTeta+3cPvDAA03aPXjw4FbrDbZzK8nlOTKZTPrd737XbJ0d+dz6C0GqA1q5cqUmT56s6dOnq6SkREOHDtWoUaN04MABl+VLS0s1evRoDR06VCUlJXrmmWf02GOPadWqVe3ccs9t2rRJv/jFL/TBBx+oqKhI9fX1ysrK0qlTp1rdd9++fSorK3N8XX755e3Q4rbp16+fU5t3797dbNlgPq+S9NFHHzn1taioSJJ05513trhfMJzXU6dOacCAAVqwYIHL93/729/qhRde0IIFC/TRRx8pOTlZw4cPdzx/05Xi4mJlZ2crJydHu3btUk5OjsaPH69t27b5qxtuaamv1dXV2rFjh2bOnKkdO3Zo9erV+uKLL3Tbbbe1Wm+XLl2cznNZWZliYmL80QWPtHZuJWnkyJFO7S4sLGyxzmA8t5KanJ9XXnlFJpNJY8eObbHejnpu/cZAh3PdddcZkyZNctrWp08fY+rUqS7LP/XUU0afPn2ctj388MPG4MGD/dZGfzl8+LAhydi0aVOzZd59911DknHs2LH2a5gPzJo1yxgwYIDb5UPpvBqGYTz++ONG7969DZvN5vL9YD2vkow1a9Y4XttsNiM5OdmYN2+eY1tNTY0RHx9vLFmypNl6xo8fb4wcOdJp24gRI4y77rrL52321vl9deXDDz80JBlff/11s2VeffVVIz4+3reN8wNX/b3//vuNMWPGeFRPqJzbMWPGGDfffHOLZYLl3PoSI1IdTF1dnbZv366srCyn7VlZWdq6davLfYqLi5uUHzFihD7++GNZrVa/tdUfKisrJUkXXnhhq2WvvvpqpaSk6JZbbtG7777r76b5xP79+5Wamqq0tDTddddd+vLLL5stG0rnta6uTn/5y1/04IMPtvoA72A8r+cqLS1VeXm507mzWCwaNmxYs/+GpebPd0v7dESVlZUymUxKSEhosdzJkyfVq1cvXXzxxfrxj3+skpKS9mmgD7z33nvq3r27rrjiCk2cOFGHDx9usXwonNv/+7//0zvvvKOHHnqo1bLBfG69QZDqYCoqKtTQ0KCkpCSn7UlJSSovL3e5T3l5ucvy9fX1qqio8Ftbfc0wDOXl5emGG25Q//79my2XkpKipUuXatWqVVq9erWuvPJK3XLLLfrXv/7Vjq313KBBg/T6669r/fr1eumll1ReXq4hQ4boyJEjLsuHynmVpLVr1+r48eN64IEHmi0TrOf1fPZ/p578G7bv5+k+HU1NTY2mTp2qe+65p8UH2vbp00fLli3TunXrtHz5csXExOj666/X/v3727G13hk1apTeeOMN/fOf/9Tvf/97ffTRR7r55ptVW1vb7D6hcG5fe+01xcXF6Y477mixXDCfW29FBboBcO38v9oNw2jxL3lX5V1t78geffRRffLJJ9qyZUuL5a688kpdeeWVjteZmZk6ePCgnn/+ed14443+bqbXRo0a5fj+qquuUmZmpnr37q3XXntNeXl5LvcJhfMqSQUFBRo1apRSU1ObLROs57U5nv4b9nafjsJqtequu+6SzWbTokWLWiw7ePBgpwna119/va655hr96U9/0osvvujvprZJdna24/v+/ftr4MCB6tWrl955550WQ0Ywn1tJeuWVV/TTn/601blOwXxuvcWIVAfTrVs3RUZGNvlL5fDhw03+orFLTk52WT4qKkpdu3b1W1t96Ze//KXWrVund999VxdffLHH+w8ePDjo/uLp3LmzrrrqqmbbHQrnVZK+/vprbdy4URMmTPB432A8r/Y7MT35N2zfz9N9Ogqr1arx48ertLRURUVFLY5GuRIREaFrr7026M611DiS2qtXrxbbHsznVpI2b96sffv2efVvOJjPrbsIUh1MdHS0MjIyHHc42RUVFWnIkCEu98nMzGxSfsOGDRo4cKDMZrPf2uoLhmHo0Ucf1erVq/XPf/5TaWlpXtVTUlKilJQUH7fOv2pra7V3795m2x3M5/Vcr776qrp3764f/ehHHu8bjOc1LS1NycnJTueurq5OmzZtavbfsNT8+W5pn47AHqL279+vjRs3ehXyDcPQzp07g+5cS9KRI0d08ODBFtserOfWrqCgQBkZGRowYIDH+wbzuXVboGa5o3krVqwwzGazUVBQYOzZs8eYPHmy0blzZ+Orr74yDMMwpk6dauTk5DjKf/nll0ZsbKwxZcoUY8+ePUZBQYFhNpuNt956K1BdcNsjjzxixMfHG++9955RVlbm+KqurnaUOb+/f/jDH4w1a9YYX3zxhfHpp58aU6dONSQZq1atCkQX3PbEE08Y7733nvHll18aH3zwgfHjH//YiIuLC8nzatfQ0GD07NnTePrpp5u8F8zn9cSJE0ZJSYlRUlJiSDJeeOEFo6SkxHGn2rx584z4+Hhj9erVxu7du427777bSElJMaqqqhx15OTkON2J+/777xuRkZHGvHnzjL179xrz5s0zoqKijA8++KDd+3eulvpqtVqN2267zbj44ouNnTt3Ov0brq2tddRxfl9nz55t/OMf/zD+/e9/GyUlJcbPfvYzIyoqyti2bVsguuikpf6eOHHCeOKJJ4ytW7capaWlxrvvvmtkZmYa3/ve90Lu3NpVVlYasbGxxuLFi13WEUzn1l8IUh3UwoULjV69ehnR0dHGNddc47QcwP33328MGzbMqfx7771nXH311UZ0dLRxySWXNPtD39FIcvn16quvOsqc39/58+cbvXv3NmJiYozExETjhhtuMN555532b7yHsrOzjZSUFMNsNhupqanGHXfcYXz22WeO90PpvNqtX7/ekGTs27evyXvBfF7tSzWc/3X//fcbhtG4BMKsWbOM5ORkw2KxGDfeeKOxe/dupzqGDRvmKG/35ptvGldeeaVhNpuNPn36dIgQ2VJfS0tLm/03/O677zrqOL+vkydPNnr27GlER0cbF110kZGVlWVs3bq1/TvnQkv9ra6uNrKysoyLLrrIMJvNRs+ePY3777/fOHDggFMdoXBu7f785z8bnTp1Mo4fP+6yjmA6t/5iMowzs1cBAADgEeZIAQAAeIkgBQAA4CWCFAAAgJcIUgAAAF4iSAEAAHiJIAUAAOAlghQAAICXCFIAAABeIkgBQDsymUxau3ZtoJsBwEcIUgDCxgMPPCCTydTka+TIkYFuGoAgFRXoBgBAexo5cqReffVVp20WiyVArQEQ7BiRAhBWLBaLkpOTnb4SExMlNV52W7x4sUaNGqVOnTopLS1Nb775ptP+u3fv1s0336xOnTqpa9eu+vnPf66TJ086lXnllVfUr18/WSwWpaSk6NFHH3V6v6KiQj/5yU8UGxuryy+/XOvWrfNvpwH4DUEKAM4xc+ZMjR07Vrt27dK9996ru+++W3v37pUkVVdXa+TIkUpMTNRHH32kN998Uxs3bnQKSosXL9YvfvEL/fznP9fu3bu1bt06XXbZZU7HmDNnjsaPH69PPvlEo0eP1k9/+lMdPXq0XfsJwEcMAAgT999/vxEZGWl07tzZ6evZZ581DMMwJBmTJk1y2mfQoEHGI488YhiGYSxdutRITEw0Tp486Xj/nXfeMSIiIozy8nLDMAwjNTXVmD59erNtkGTMmDHD8frkyZOGyWQy/v73v/usnwDaD3OkAISVH/7wh1q8eLHTtgsvvNDxfWZmptN7mZmZ2rlzpyRp7969GjBggDp37ux4//rrr5fNZtO+fftkMpl06NAh3XLLLS224fvf/77j+86dOysuLk6HDx/2tksAAoggBSCsdO7cucmlttaYTCZJkmEYju9dlenUqZNb9ZnN5ib72mw2j9oEoGNgjhQAnOODDz5o8rpPnz6SpPT0dO3cuVOnTp1yvP/+++8rIiJCV1xxheLi4nTJJZfo//2//9eubQYQOIxIAQgrtbW1Ki8vd9oWFRWlbt26SZLefPNNDRw4UDfccIPeeOMNffjhhyooKJAk/fSnP9WsWbN0//33a/bs2fruu+/0y1/+Ujk5OUpKSpIkzZ49W5MmTVL37t01atQonThxQu+//75++ctftm9HAbQLghSAsPKPf/xDKSkpTtuuvPJKff7555Ia76hbsWKFcnNzlZycrDfeeEPp6emSpNjYWK1fv16PP/64rr32WsXGxmrs2LF64YUXHHXdf//9qqmp0R/+8Af96le/Urdu3TRu3Lj26yCAdmUyDMMIdCMAoCMwmUxas2aNbr/99kA3BUCQYI4UAACAlwhSAAAAXmKOFACcwUwHAJ5iRAoAAMBLBCkAAAAvEaQAAAC8RJACAADwEkEKAADASwQpAAAALxGkAAAAvESQAgAA8NL/D3qRss4b1+VXAAAAAElFTkSuQmCC", "text/plain": [ "
" ] @@ -846,145 +1314,77 @@ }, { "cell_type": "code", - "execution_count": 103, + "execution_count": 15, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "\u001b[1m7821/7821\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m3s\u001b[0m 354us/step - loss: 2.4332e-06\n" + "\u001b[1m 20/7821\u001b[0m \u001b[37m━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[1m44s\u001b[0m 6ms/step - loss: 5.1914e-06" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\u001b[1m7821/7821\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m29s\u001b[0m 4ms/step - loss: 1.0395e-06\n" ] }, { "data": { "text/plain": [ - "2.221618160547223e-06" + "9.875676596493577e-07" ] }, - "execution_count": 103, + "execution_count": 15, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# test on all test data\n", - "model_simple.evaluate(X_test.iloc[:,X_test.columns != \"Class\"], y_test.iloc[:, y_test.columns != \"Class\"])" + "model_large.evaluate(X_test.iloc[:,X_test.columns != \"Class\"], y_test.iloc[:, y_test.columns != \"Class\"])" ] }, { "cell_type": "code", - "execution_count": 104, + "execution_count": 16, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "\u001b[1m7727/7727\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m2s\u001b[0m 309us/step - loss: 1.3519e-06\n" + "\u001b[1m7727/7727\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m29s\u001b[0m 4ms/step - loss: 5.4493e-07\n" ] }, { "data": { "text/plain": [ - "1.1662884844554355e-06" + "5.075861508885282e-07" ] }, - "execution_count": 104, + "execution_count": 16, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# test on non-reactive data\n", - "model_simple.evaluate(X_test[X_test['Class'] == 0].iloc[:,:-1], y_test[X_test['Class'] == 0].iloc[:,:-1])" + "model_large.evaluate(X_test[X_test['Class'] == 0].iloc[:,:-1], y_test[X_test['Class'] == 0].iloc[:,:-1])" ] }, { "cell_type": "code", - "execution_count": 105, + "execution_count": 17, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "\u001b[1m94/94\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 347us/step - loss: 8.9877e-05\n" - ] - }, - { - "data": { - "text/plain": [ - "8.905206777853891e-05" - ] - }, - "execution_count": 105, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "# test on reactive data\n", - "model_simple.evaluate(X_test[X_test['Class'] == 1].iloc[:,:-1], y_test[X_test['Class'] == 1].iloc[:, :-1])" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Test Mass Balance" - ] - }, - { - "cell_type": "code", - "execution_count": 106, - "metadata": {}, - "outputs": [], - "source": [ - "def mass_balance(model, X, scaler_X, func_dict_in, func_dict_out):\n", - " # backtransform min/max\n", - " columns = X.iloc[:, X.columns != \"Class\"].columns\n", - " X = pd.DataFrame(scaler_X.inverse_transform(X.iloc[:, X.columns != \"Class\"]), columns = columns)\n", - " \n", - " # backtransform log\n", - " X = FuncTransform(func_dict_in, func_dict_out).inverse_transform(X)\n", - " \n", - " # calculate mass balance\n", - " predicton = model.predict(X)\n", - " dBa = np.abs((prediction[\"Ba\"] + prediction[\"Barite\"]) - (X[\"Ba\"] + X[\"Barite\"]))\n", - " dSr = np.abs((prediction[\"Sr\"] + prediction[\"Celestite\"]) - (X[\"Sr\"] + X[\"Celestite\"]))\n", - " \n", - " return dBa + dSr" - ] - }, - { - "cell_type": "code", - "execution_count": 107, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "\u001b[1m7821/7821\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m3s\u001b[0m 345us/step\n" - ] - } - ], - "source": [ - "columns = X_test.columns[X_test.columns != \"Class\"]\n", - "prediction = pd.DataFrame(model_simple.predict(X_test[columns]), columns = columns)" - ] - }, - { - "cell_type": "code", - "execution_count": 108, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "\u001b[1m7821/7821\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m3s\u001b[0m 357us/step\n" + "\u001b[1m94/94\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 4ms/step - loss: 4.0710e-05\n" ] } ], @@ -1000,27 +1400,17 @@ { "data": { "text/plain": [ - "1163 0.000526\n", - "1175 0.000948\n", - "2425 0.000854\n", - "3231 0.000993\n", - "3964 0.000145\n", - " ... \n", - "243165 0.000928\n", - "248138 0.000698\n", - "248832 0.000915\n", - "248963 0.000696\n", - "249253 0.000932\n", - "Length: 115, dtype: float64" + "4.047931361128576e-05" ] }, - "execution_count": 116, + "execution_count": 17, "metadata": {}, "output_type": "execute_result" } ], "source": [ - "mass_balance[mass_balance < 0.001]" + "# test on reactive data\n", + "model_large.evaluate(X_test[X_test['Class'] == 1].iloc[:,:-1], y_test[X_test['Class'] == 1].iloc[:, :-1])" ] }, { @@ -1119,7 +1509,7 @@ ], "metadata": { "kernelspec": { - "display_name": "training", + "display_name": "ai", "language": "python", "name": "python3" }, @@ -1133,7 +1523,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.11.11" + "version": "3.12.8" } }, "nbformat": 4, diff --git a/preprocessing.py b/preprocessing.py index 8e74238..813f619 100644 --- a/preprocessing.py +++ b/preprocessing.py @@ -174,7 +174,7 @@ def preprocessing_training(df_design, df_targets, func_dict_in, func_dict_out, s elif scaling == 'global': scaler_X.fit(pd.concat([X_train.iloc[:, X_train.columns != "Class"], y_train.iloc[:, y_train.columns != "Class"]], axis=0)) - scaler_y = clone(scaler_X) + scaler_y = scaler_X X_train = pd.concat([scaler_X.transform(X_train.loc[:, X_train.columns != "Class"]), X_train.loc[:, "Class"]], axis=1) X_test = pd.concat([scaler_X.transform(X_test.loc[:, X_test.columns != "Class"]), X_test.loc[:, "Class"]], axis=1)