diff --git a/src/POET_Training.ipynb b/src/POET_Training.ipynb
index cf23923..9f854bf 100644
--- a/src/POET_Training.ipynb
+++ b/src/POET_Training.ipynb
@@ -29,7 +29,17 @@
"cell_type": "code",
"execution_count": 1,
"metadata": {},
- "outputs": [],
+ "outputs": [
+ {
+ "name": "stderr",
+ "output_type": "stream",
+ "text": [
+ "2025-02-21 16:44:01.704481: 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-21 16:44:01.724144: 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"
+ ]
+ }
+ ],
"source": [
"import keras\n",
"from keras.layers import Dense, Dropout, Input,BatchNormalization, LeakyReLU\n",
@@ -51,6 +61,7 @@
"from preprocessing import *\n",
"from sklearn import set_config\n",
"from importlib import reload\n",
+ "import seaborn as sns\n",
"set_config(transform_output = \"pandas\")"
]
},
@@ -92,6 +103,44 @@
"data_file.close()"
]
},
+ {
+ "cell_type": "code",
+ "execution_count": 4,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "func_dict_in = {\n",
+ " \"H\" : tf.math.log1p,\n",
+ " \"O\" : tf.math.log1p,\n",
+ " \"H_0_\" : tf.math.log1p,\n",
+ " \"O_0_\" : tf.math.log1p,\n",
+ " \"Ba\" : tf.math.log1p,\n",
+ " \"Cl\" : tf.math.log1p,\n",
+ " \"S_2_\" : tf.math.log1p,\n",
+ " \"S\" : tf.math.log1p,\n",
+ " \"S_6_\" : tf.math.log1p,\n",
+ " \"Sr\" : np.log1p,\n",
+ " \"Barite\" : np.log1p,\n",
+ " \"Celestite\" : np.log1p,\n",
+ "}\n",
+ "\n",
+ "func_dict_out = {\n",
+ " \"H\" : np.expm1,\n",
+ " \"O\" : np.expm1,\n",
+ " \"Charge\" : Safeexp,\n",
+ " \"H_0_\" : np.expm1,\n",
+ " \"O_0_\" : np.expm1,\n",
+ " \"Ba\" : np.expm1,\n",
+ " \"Cl\" : np.expm1,\n",
+ " \"S_2_\" : np.expm1,\n",
+ " \"S_6_\" : np.expm1,\n",
+ " \"S\" : np.expm1,\n",
+ " \"Sr\" : np.expm1,\n",
+ " \"Barite\" : np.expm1,\n",
+ " \"Celestite\" : np.expm1,\n",
+ "}"
+ ]
+ },
{
"cell_type": "markdown",
"metadata": {},
@@ -110,7 +159,7 @@
},
{
"cell_type": "code",
- "execution_count": 6,
+ "execution_count": 5,
"metadata": {},
"outputs": [],
"source": [
@@ -119,14 +168,14 @@
},
{
"cell_type": "code",
- "execution_count": 7,
+ "execution_count": 6,
"metadata": {},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
- "/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",
+ "/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",
" return fit_method(estimator, *args, **kwargs)\n"
]
},
@@ -140,27 +189,3460 @@
}
],
"source": [
- "preprocess = preprocessing()\n",
+ "preprocess = preprocessing(np.log1p, np.expm1)\n",
"X, y = preprocess.cluster(df_design[species_columns], df_results[species_columns])\n",
"# X, y = preprocess.funcTranform(X, y)\n",
"\n",
"X_train, X_test, y_train, y_test = preprocess.split(X, y, ratio = 0.2)\n",
"X_train, y_train = preprocess.balancer(X_train, y_train, strategy = \"off\")\n",
- "preprocess.scale_fit(X_train, y_train, scaling = \"global\", type=\"standard\")\n",
+ "X_train, y_train = preprocess.class_selection(X_train, y_train, 0)\n",
+ "preprocess.scale_fit(X_train, y_train, scaling = \"global\", type=\"minmax\")\n",
"X_train, X_test, y_train, y_test = preprocess.scale_transform(X_train, X_test, y_train, y_test)\n",
"X_train, X_val, y_train, y_val = preprocess.split(X_train, y_train, ratio = 0.1)"
]
},
+ {
+ "cell_type": "code",
+ "execution_count": 18,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "
\n",
+ "\n",
+ "
\n",
+ " \n",
+ " \n",
+ " | \n",
+ " H | \n",
+ " O | \n",
+ " Ba | \n",
+ " Cl | \n",
+ " S | \n",
+ " Sr | \n",
+ " Barite | \n",
+ " Celestite | \n",
+ " Class | \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " | 478350 | \n",
+ " 0.557224 | \n",
+ " 0.140163 | \n",
+ " 0.001119 | \n",
+ " 0.555750 | \n",
+ " 0.140160 | \n",
+ " 0.557932 | \n",
+ " 3.017125e-06 | \n",
+ " 0.999778 | \n",
+ " 0 | \n",
+ "
\n",
+ " \n",
+ " | 366736 | \n",
+ " 0.354555 | \n",
+ " 0.155748 | \n",
+ " 0.000697 | \n",
+ " 0.352515 | \n",
+ " 0.155747 | \n",
+ " 0.351468 | \n",
+ " 1.880549e-06 | \n",
+ " 0.999699 | \n",
+ " 0 | \n",
+ "
\n",
+ " \n",
+ " | 618649 | \n",
+ " 0.623019 | \n",
+ " 0.136899 | \n",
+ " 0.001258 | \n",
+ " 0.621381 | \n",
+ " 0.136895 | \n",
+ " 0.624624 | \n",
+ " 5.809254e-07 | \n",
+ " 0.998845 | \n",
+ " 0 | \n",
+ "
\n",
+ " \n",
+ " | 435954 | \n",
+ " 0.464794 | \n",
+ " 0.145921 | \n",
+ " 0.000925 | \n",
+ " 0.463041 | \n",
+ " 0.145919 | \n",
+ " 0.463736 | \n",
+ " 1.695287e-06 | \n",
+ " 0.999513 | \n",
+ " 0 | \n",
+ "
\n",
+ " \n",
+ " | 390646 | \n",
+ " 0.594795 | \n",
+ " 0.138235 | \n",
+ " 0.001199 | \n",
+ " 0.593417 | \n",
+ " 0.138231 | \n",
+ " 0.596207 | \n",
+ " 6.463547e-06 | \n",
+ " 0.999962 | \n",
+ " 0 | \n",
+ "
\n",
+ " \n",
+ " | ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ "
\n",
+ " \n",
+ " | 598582 | \n",
+ " 0.512237 | \n",
+ " 0.142787 | \n",
+ " 0.001024 | \n",
+ " 0.510245 | \n",
+ " 0.142784 | \n",
+ " 0.511695 | \n",
+ " 5.984834e-07 | \n",
+ " 0.998902 | \n",
+ " 0 | \n",
+ "
\n",
+ " \n",
+ " | 395666 | \n",
+ " 0.374331 | \n",
+ " 0.153640 | \n",
+ " 0.000738 | \n",
+ " 0.372343 | \n",
+ " 0.153639 | \n",
+ " 0.371605 | \n",
+ " 1.730543e-06 | \n",
+ " 0.999638 | \n",
+ " 0 | \n",
+ "
\n",
+ " \n",
+ " | 459565 | \n",
+ " 0.513986 | \n",
+ " 0.142663 | \n",
+ " 0.001028 | \n",
+ " 0.512319 | \n",
+ " 0.142660 | \n",
+ " 0.513803 | \n",
+ " 3.197008e-06 | \n",
+ " 0.999831 | \n",
+ " 0 | \n",
+ "
\n",
+ " \n",
+ " | 301794 | \n",
+ " 0.415823 | \n",
+ " 0.149779 | \n",
+ " 0.000823 | \n",
+ " 0.413985 | \n",
+ " 0.149777 | \n",
+ " 0.413901 | \n",
+ " 3.439337e-06 | \n",
+ " 0.999885 | \n",
+ " 0 | \n",
+ "
\n",
+ " \n",
+ " | 250138 | \n",
+ " 0.510507 | \n",
+ " 0.142898 | \n",
+ " 0.001021 | \n",
+ " 0.508943 | \n",
+ " 0.142895 | \n",
+ " 0.510372 | \n",
+ " 5.957527e-06 | \n",
+ " 0.999955 | \n",
+ " 0 | \n",
+ "
\n",
+ " \n",
+ "
\n",
+ "
431886 rows × 9 columns
\n",
+ "
"
+ ],
+ "text/plain": [
+ " H O Ba Cl S Sr \\\n",
+ "478350 0.557224 0.140163 0.001119 0.555750 0.140160 0.557932 \n",
+ "366736 0.354555 0.155748 0.000697 0.352515 0.155747 0.351468 \n",
+ "618649 0.623019 0.136899 0.001258 0.621381 0.136895 0.624624 \n",
+ "435954 0.464794 0.145921 0.000925 0.463041 0.145919 0.463736 \n",
+ "390646 0.594795 0.138235 0.001199 0.593417 0.138231 0.596207 \n",
+ "... ... ... ... ... ... ... \n",
+ "598582 0.512237 0.142787 0.001024 0.510245 0.142784 0.511695 \n",
+ "395666 0.374331 0.153640 0.000738 0.372343 0.153639 0.371605 \n",
+ "459565 0.513986 0.142663 0.001028 0.512319 0.142660 0.513803 \n",
+ "301794 0.415823 0.149779 0.000823 0.413985 0.149777 0.413901 \n",
+ "250138 0.510507 0.142898 0.001021 0.508943 0.142895 0.510372 \n",
+ "\n",
+ " Barite Celestite Class \n",
+ "478350 3.017125e-06 0.999778 0 \n",
+ "366736 1.880549e-06 0.999699 0 \n",
+ "618649 5.809254e-07 0.998845 0 \n",
+ "435954 1.695287e-06 0.999513 0 \n",
+ "390646 6.463547e-06 0.999962 0 \n",
+ "... ... ... ... \n",
+ "598582 5.984834e-07 0.998902 0 \n",
+ "395666 1.730543e-06 0.999638 0 \n",
+ "459565 3.197008e-06 0.999831 0 \n",
+ "301794 3.439337e-06 0.999885 0 \n",
+ "250138 5.957527e-06 0.999955 0 \n",
+ "\n",
+ "[431886 rows x 9 columns]"
+ ]
+ },
+ "execution_count": 18,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "X_train"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 21,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "\n",
+ "\n",
+ "
\n",
+ " \n",
+ " \n",
+ " | \n",
+ " H | \n",
+ " O | \n",
+ " Ba | \n",
+ " Cl | \n",
+ " S | \n",
+ " Sr | \n",
+ " Barite | \n",
+ " Celestite | \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " | 0 | \n",
+ " 111.012434 | \n",
+ " 55.506567 | \n",
+ " 0.000023 | \n",
+ " 0.064477 | \n",
+ " 0.000088 | \n",
+ " 0.032303 | \n",
+ " 0.001001 | \n",
+ " 1.000674 | \n",
+ "
\n",
+ " \n",
+ " | 1 | \n",
+ " 111.012434 | \n",
+ " 55.506606 | \n",
+ " 0.000014 | \n",
+ " 0.040898 | \n",
+ " 0.000097 | \n",
+ " 0.020532 | \n",
+ " 0.001000 | \n",
+ " 1.000634 | \n",
+ "
\n",
+ " \n",
+ " | 2 | \n",
+ " 111.012434 | \n",
+ " 55.506559 | \n",
+ " 0.000026 | \n",
+ " 0.072091 | \n",
+ " 0.000086 | \n",
+ " 0.036106 | \n",
+ " 0.001000 | \n",
+ " 1.000204 | \n",
+ "
\n",
+ " \n",
+ " | 3 | \n",
+ " 111.012434 | \n",
+ " 55.506581 | \n",
+ " 0.000019 | \n",
+ " 0.053721 | \n",
+ " 0.000091 | \n",
+ " 0.026933 | \n",
+ " 0.001000 | \n",
+ " 1.000540 | \n",
+ "
\n",
+ " \n",
+ " | 4 | \n",
+ " 111.012434 | \n",
+ " 55.506562 | \n",
+ " 0.000024 | \n",
+ " 0.068847 | \n",
+ " 0.000086 | \n",
+ " 0.034485 | \n",
+ " 0.001003 | \n",
+ " 1.000766 | \n",
+ "
\n",
+ " \n",
+ " | ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ "
\n",
+ " \n",
+ " | 431881 | \n",
+ " 111.012434 | \n",
+ " 55.506574 | \n",
+ " 0.000021 | \n",
+ " 0.059198 | \n",
+ " 0.000089 | \n",
+ " 0.029667 | \n",
+ " 0.001000 | \n",
+ " 1.000233 | \n",
+ "
\n",
+ " \n",
+ " | 431882 | \n",
+ " 111.012434 | \n",
+ " 55.506600 | \n",
+ " 0.000015 | \n",
+ " 0.043198 | \n",
+ " 0.000096 | \n",
+ " 0.021680 | \n",
+ " 0.001000 | \n",
+ " 1.000603 | \n",
+ "
\n",
+ " \n",
+ " | 431883 | \n",
+ " 111.012434 | \n",
+ " 55.506573 | \n",
+ " 0.000021 | \n",
+ " 0.059438 | \n",
+ " 0.000089 | \n",
+ " 0.029787 | \n",
+ " 0.001001 | \n",
+ " 1.000700 | \n",
+ "
\n",
+ " \n",
+ " | 431884 | \n",
+ " 111.012434 | \n",
+ " 55.506591 | \n",
+ " 0.000017 | \n",
+ " 0.048030 | \n",
+ " 0.000094 | \n",
+ " 0.024092 | \n",
+ " 0.001001 | \n",
+ " 1.000727 | \n",
+ "
\n",
+ " \n",
+ " | 431885 | \n",
+ " 111.012434 | \n",
+ " 55.506574 | \n",
+ " 0.000021 | \n",
+ " 0.059047 | \n",
+ " 0.000089 | \n",
+ " 0.029592 | \n",
+ " 0.001003 | \n",
+ " 1.000763 | \n",
+ "
\n",
+ " \n",
+ "
\n",
+ "
431886 rows × 8 columns
\n",
+ "
"
+ ],
+ "text/plain": [
+ " H O Ba Cl S Sr \\\n",
+ "0 111.012434 55.506567 0.000023 0.064477 0.000088 0.032303 \n",
+ "1 111.012434 55.506606 0.000014 0.040898 0.000097 0.020532 \n",
+ "2 111.012434 55.506559 0.000026 0.072091 0.000086 0.036106 \n",
+ "3 111.012434 55.506581 0.000019 0.053721 0.000091 0.026933 \n",
+ "4 111.012434 55.506562 0.000024 0.068847 0.000086 0.034485 \n",
+ "... ... ... ... ... ... ... \n",
+ "431881 111.012434 55.506574 0.000021 0.059198 0.000089 0.029667 \n",
+ "431882 111.012434 55.506600 0.000015 0.043198 0.000096 0.021680 \n",
+ "431883 111.012434 55.506573 0.000021 0.059438 0.000089 0.029787 \n",
+ "431884 111.012434 55.506591 0.000017 0.048030 0.000094 0.024092 \n",
+ "431885 111.012434 55.506574 0.000021 0.059047 0.000089 0.029592 \n",
+ "\n",
+ " Barite Celestite \n",
+ "0 0.001001 1.000674 \n",
+ "1 0.001000 1.000634 \n",
+ "2 0.001000 1.000204 \n",
+ "3 0.001000 1.000540 \n",
+ "4 0.001003 1.000766 \n",
+ "... ... ... \n",
+ "431881 0.001000 1.000233 \n",
+ "431882 0.001000 1.000603 \n",
+ "431883 0.001001 1.000700 \n",
+ "431884 0.001001 1.000727 \n",
+ "431885 0.001003 1.000763 \n",
+ "\n",
+ "[431886 rows x 8 columns]"
+ ]
+ },
+ "execution_count": 21,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "pd.DataFrame(preprocess.scaler_X.inverse_transform(X_train.loc[:, X_train.columns != \"Class\"]), columns=X_train.columns[:-1])"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 22,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "478350 0\n",
+ "366736 0\n",
+ "618649 0\n",
+ "435954 0\n",
+ "390646 0\n",
+ " ..\n",
+ "598582 0\n",
+ "395666 0\n",
+ "459565 0\n",
+ "301794 0\n",
+ "250138 0\n",
+ "Name: Class, Length: 431886, dtype: int64"
+ ]
+ },
+ "execution_count": 22,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "X_train.loc[:, \"Class\"]"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 26,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "478350 0\n",
+ "366736 0\n",
+ "618649 0\n",
+ "435954 0\n",
+ "390646 0\n",
+ " ..\n",
+ "598582 0\n",
+ "395666 0\n",
+ "459565 0\n",
+ "301794 0\n",
+ "250138 0\n",
+ "Name: Class, Length: 431886, dtype: int64"
+ ]
+ },
+ "execution_count": 26,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "X_train[\"Class\"]"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 48,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "\n",
+ "\n",
+ "
\n",
+ " \n",
+ " \n",
+ " | \n",
+ " H | \n",
+ " O | \n",
+ " Ba | \n",
+ " Cl | \n",
+ " S | \n",
+ " Sr | \n",
+ " Barite | \n",
+ " Celestite | \n",
+ " Class | \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " | 0 | \n",
+ " 111.012434 | \n",
+ " 55.506567 | \n",
+ " 0.000023 | \n",
+ " 0.064477 | \n",
+ " 0.000088 | \n",
+ " 0.032303 | \n",
+ " 0.001001 | \n",
+ " 1.000674 | \n",
+ " 0.0 | \n",
+ "
\n",
+ " \n",
+ " | 1 | \n",
+ " 111.012434 | \n",
+ " 55.506606 | \n",
+ " 0.000014 | \n",
+ " 0.040898 | \n",
+ " 0.000097 | \n",
+ " 0.020532 | \n",
+ " 0.001000 | \n",
+ " 1.000634 | \n",
+ " 0.0 | \n",
+ "
\n",
+ " \n",
+ " | 2 | \n",
+ " 111.012434 | \n",
+ " 55.506559 | \n",
+ " 0.000026 | \n",
+ " 0.072091 | \n",
+ " 0.000086 | \n",
+ " 0.036106 | \n",
+ " 0.001000 | \n",
+ " 1.000204 | \n",
+ " NaN | \n",
+ "
\n",
+ " \n",
+ " | 3 | \n",
+ " 111.012434 | \n",
+ " 55.506581 | \n",
+ " 0.000019 | \n",
+ " 0.053721 | \n",
+ " 0.000091 | \n",
+ " 0.026933 | \n",
+ " 0.001000 | \n",
+ " 1.000540 | \n",
+ " 0.0 | \n",
+ "
\n",
+ " \n",
+ " | 4 | \n",
+ " 111.012434 | \n",
+ " 55.506562 | \n",
+ " 0.000024 | \n",
+ " 0.068847 | \n",
+ " 0.000086 | \n",
+ " 0.034485 | \n",
+ " 0.001003 | \n",
+ " 1.000766 | \n",
+ " NaN | \n",
+ "
\n",
+ " \n",
+ " | ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ "
\n",
+ " \n",
+ " | 431881 | \n",
+ " 111.012434 | \n",
+ " 55.506574 | \n",
+ " 0.000021 | \n",
+ " 0.059198 | \n",
+ " 0.000089 | \n",
+ " 0.029667 | \n",
+ " 0.001000 | \n",
+ " 1.000233 | \n",
+ " NaN | \n",
+ "
\n",
+ " \n",
+ " | 431882 | \n",
+ " 111.012434 | \n",
+ " 55.506600 | \n",
+ " 0.000015 | \n",
+ " 0.043198 | \n",
+ " 0.000096 | \n",
+ " 0.021680 | \n",
+ " 0.001000 | \n",
+ " 1.000603 | \n",
+ " 0.0 | \n",
+ "
\n",
+ " \n",
+ " | 431883 | \n",
+ " 111.012434 | \n",
+ " 55.506573 | \n",
+ " 0.000021 | \n",
+ " 0.059438 | \n",
+ " 0.000089 | \n",
+ " 0.029787 | \n",
+ " 0.001001 | \n",
+ " 1.000700 | \n",
+ " 0.0 | \n",
+ "
\n",
+ " \n",
+ " | 431884 | \n",
+ " 111.012434 | \n",
+ " 55.506591 | \n",
+ " 0.000017 | \n",
+ " 0.048030 | \n",
+ " 0.000094 | \n",
+ " 0.024092 | \n",
+ " 0.001001 | \n",
+ " 1.000727 | \n",
+ " NaN | \n",
+ "
\n",
+ " \n",
+ " | 431885 | \n",
+ " 111.012434 | \n",
+ " 55.506574 | \n",
+ " 0.000021 | \n",
+ " 0.059047 | \n",
+ " 0.000089 | \n",
+ " 0.029592 | \n",
+ " 0.001003 | \n",
+ " 1.000763 | \n",
+ " 0.0 | \n",
+ "
\n",
+ " \n",
+ "
\n",
+ "
431886 rows × 9 columns
\n",
+ "
"
+ ],
+ "text/plain": [
+ " H O Ba Cl S Sr \\\n",
+ "0 111.012434 55.506567 0.000023 0.064477 0.000088 0.032303 \n",
+ "1 111.012434 55.506606 0.000014 0.040898 0.000097 0.020532 \n",
+ "2 111.012434 55.506559 0.000026 0.072091 0.000086 0.036106 \n",
+ "3 111.012434 55.506581 0.000019 0.053721 0.000091 0.026933 \n",
+ "4 111.012434 55.506562 0.000024 0.068847 0.000086 0.034485 \n",
+ "... ... ... ... ... ... ... \n",
+ "431881 111.012434 55.506574 0.000021 0.059198 0.000089 0.029667 \n",
+ "431882 111.012434 55.506600 0.000015 0.043198 0.000096 0.021680 \n",
+ "431883 111.012434 55.506573 0.000021 0.059438 0.000089 0.029787 \n",
+ "431884 111.012434 55.506591 0.000017 0.048030 0.000094 0.024092 \n",
+ "431885 111.012434 55.506574 0.000021 0.059047 0.000089 0.029592 \n",
+ "\n",
+ " Barite Celestite Class \n",
+ "0 0.001001 1.000674 0.0 \n",
+ "1 0.001000 1.000634 0.0 \n",
+ "2 0.001000 1.000204 NaN \n",
+ "3 0.001000 1.000540 0.0 \n",
+ "4 0.001003 1.000766 NaN \n",
+ "... ... ... ... \n",
+ "431881 0.001000 1.000233 NaN \n",
+ "431882 0.001000 1.000603 0.0 \n",
+ "431883 0.001001 1.000700 0.0 \n",
+ "431884 0.001001 1.000727 NaN \n",
+ "431885 0.001003 1.000763 0.0 \n",
+ "\n",
+ "[431886 rows x 9 columns]"
+ ]
+ },
+ "execution_count": 48,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "df1 = pd.DataFrame(preprocess.scaler_X.inverse_transform(X_train.loc[:, X_train.columns != \"Class\"]), columns=X_train.columns[:-1])\n",
+ "df2 = pd.DataFrame(X_train[\"Class\"], columns=[\"Class\"])\n",
+ "df1.join(df2)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 46,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "\n",
+ "\n",
+ "
\n",
+ " \n",
+ " \n",
+ " | \n",
+ " Class | \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " | 478350 | \n",
+ " 0 | \n",
+ "
\n",
+ " \n",
+ " | 366736 | \n",
+ " 0 | \n",
+ "
\n",
+ " \n",
+ " | 618649 | \n",
+ " 0 | \n",
+ "
\n",
+ " \n",
+ " | 435954 | \n",
+ " 0 | \n",
+ "
\n",
+ " \n",
+ " | 390646 | \n",
+ " 0 | \n",
+ "
\n",
+ " \n",
+ " | ... | \n",
+ " ... | \n",
+ "
\n",
+ " \n",
+ " | 598582 | \n",
+ " 0 | \n",
+ "
\n",
+ " \n",
+ " | 395666 | \n",
+ " 0 | \n",
+ "
\n",
+ " \n",
+ " | 459565 | \n",
+ " 0 | \n",
+ "
\n",
+ " \n",
+ " | 301794 | \n",
+ " 0 | \n",
+ "
\n",
+ " \n",
+ " | 250138 | \n",
+ " 0 | \n",
+ "
\n",
+ " \n",
+ "
\n",
+ "
431886 rows × 1 columns
\n",
+ "
"
+ ],
+ "text/plain": [
+ " Class\n",
+ "478350 0\n",
+ "366736 0\n",
+ "618649 0\n",
+ "435954 0\n",
+ "390646 0\n",
+ "... ...\n",
+ "598582 0\n",
+ "395666 0\n",
+ "459565 0\n",
+ "301794 0\n",
+ "250138 0\n",
+ "\n",
+ "[431886 rows x 1 columns]"
+ ]
+ },
+ "execution_count": 46,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "df2"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 44,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "\n",
+ "\n",
+ "
\n",
+ " \n",
+ " \n",
+ " | \n",
+ " 0 | \n",
+ " 1 | \n",
+ " 2 | \n",
+ " 3 | \n",
+ " 4 | \n",
+ " 5 | \n",
+ " 6 | \n",
+ " 7 | \n",
+ " 8 | \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " | 0 | \n",
+ " 111.012434 | \n",
+ " 55.506567 | \n",
+ " 0.000023 | \n",
+ " 0.064477 | \n",
+ " 0.000088 | \n",
+ " 0.032303 | \n",
+ " 0.001001 | \n",
+ " 1.000674 | \n",
+ " 0.0 | \n",
+ "
\n",
+ " \n",
+ " | 1 | \n",
+ " 111.012434 | \n",
+ " 55.506606 | \n",
+ " 0.000014 | \n",
+ " 0.040898 | \n",
+ " 0.000097 | \n",
+ " 0.020532 | \n",
+ " 0.001000 | \n",
+ " 1.000634 | \n",
+ " 0.0 | \n",
+ "
\n",
+ " \n",
+ " | 2 | \n",
+ " 111.012434 | \n",
+ " 55.506559 | \n",
+ " 0.000026 | \n",
+ " 0.072091 | \n",
+ " 0.000086 | \n",
+ " 0.036106 | \n",
+ " 0.001000 | \n",
+ " 1.000204 | \n",
+ " NaN | \n",
+ "
\n",
+ " \n",
+ " | 3 | \n",
+ " 111.012434 | \n",
+ " 55.506581 | \n",
+ " 0.000019 | \n",
+ " 0.053721 | \n",
+ " 0.000091 | \n",
+ " 0.026933 | \n",
+ " 0.001000 | \n",
+ " 1.000540 | \n",
+ " 0.0 | \n",
+ "
\n",
+ " \n",
+ " | 4 | \n",
+ " 111.012434 | \n",
+ " 55.506562 | \n",
+ " 0.000024 | \n",
+ " 0.068847 | \n",
+ " 0.000086 | \n",
+ " 0.034485 | \n",
+ " 0.001003 | \n",
+ " 1.000766 | \n",
+ " NaN | \n",
+ "
\n",
+ " \n",
+ " | ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ "
\n",
+ " \n",
+ " | 568516 | \n",
+ " NaN | \n",
+ " NaN | \n",
+ " NaN | \n",
+ " NaN | \n",
+ " NaN | \n",
+ " NaN | \n",
+ " NaN | \n",
+ " NaN | \n",
+ " 0.0 | \n",
+ "
\n",
+ " \n",
+ " | 454744 | \n",
+ " NaN | \n",
+ " NaN | \n",
+ " NaN | \n",
+ " NaN | \n",
+ " NaN | \n",
+ " NaN | \n",
+ " NaN | \n",
+ " NaN | \n",
+ " 0.0 | \n",
+ "
\n",
+ " \n",
+ " | 583730 | \n",
+ " NaN | \n",
+ " NaN | \n",
+ " NaN | \n",
+ " NaN | \n",
+ " NaN | \n",
+ " NaN | \n",
+ " NaN | \n",
+ " NaN | \n",
+ " 0.0 | \n",
+ "
\n",
+ " \n",
+ " | 598582 | \n",
+ " NaN | \n",
+ " NaN | \n",
+ " NaN | \n",
+ " NaN | \n",
+ " NaN | \n",
+ " NaN | \n",
+ " NaN | \n",
+ " NaN | \n",
+ " 0.0 | \n",
+ "
\n",
+ " \n",
+ " | 459565 | \n",
+ " NaN | \n",
+ " NaN | \n",
+ " NaN | \n",
+ " NaN | \n",
+ " NaN | \n",
+ " NaN | \n",
+ " NaN | \n",
+ " NaN | \n",
+ " 0.0 | \n",
+ "
\n",
+ " \n",
+ "
\n",
+ "
564481 rows × 9 columns
\n",
+ "
"
+ ],
+ "text/plain": [
+ " 0 1 2 3 4 5 \\\n",
+ "0 111.012434 55.506567 0.000023 0.064477 0.000088 0.032303 \n",
+ "1 111.012434 55.506606 0.000014 0.040898 0.000097 0.020532 \n",
+ "2 111.012434 55.506559 0.000026 0.072091 0.000086 0.036106 \n",
+ "3 111.012434 55.506581 0.000019 0.053721 0.000091 0.026933 \n",
+ "4 111.012434 55.506562 0.000024 0.068847 0.000086 0.034485 \n",
+ "... ... ... ... ... ... ... \n",
+ "568516 NaN NaN NaN NaN NaN NaN \n",
+ "454744 NaN NaN NaN NaN NaN NaN \n",
+ "583730 NaN NaN NaN NaN NaN NaN \n",
+ "598582 NaN NaN NaN NaN NaN NaN \n",
+ "459565 NaN NaN NaN NaN NaN NaN \n",
+ "\n",
+ " 6 7 8 \n",
+ "0 0.001001 1.000674 0.0 \n",
+ "1 0.001000 1.000634 0.0 \n",
+ "2 0.001000 1.000204 NaN \n",
+ "3 0.001000 1.000540 0.0 \n",
+ "4 0.001003 1.000766 NaN \n",
+ "... ... ... ... \n",
+ "568516 NaN NaN 0.0 \n",
+ "454744 NaN NaN 0.0 \n",
+ "583730 NaN NaN 0.0 \n",
+ "598582 NaN NaN 0.0 \n",
+ "459565 NaN NaN 0.0 \n",
+ "\n",
+ "[564481 rows x 9 columns]"
+ ]
+ },
+ "execution_count": 44,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "pd.concat([df1, df2], axis=1, ignore_index=True)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 17,
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "Class column found\n"
+ ]
+ },
+ {
+ "data": {
+ "text/html": [
+ "\n",
+ "\n",
+ "
\n",
+ " \n",
+ " \n",
+ " | \n",
+ " H | \n",
+ " O | \n",
+ " Ba | \n",
+ " Cl | \n",
+ " S | \n",
+ " Sr | \n",
+ " Barite | \n",
+ " Celestite | \n",
+ " Class | \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " | 0 | \n",
+ " 111.012434 | \n",
+ " 55.506567 | \n",
+ " 0.000023 | \n",
+ " 0.064477 | \n",
+ " 0.000088 | \n",
+ " 0.032303 | \n",
+ " 0.001001 | \n",
+ " 1.000674 | \n",
+ " 0.0 | \n",
+ "
\n",
+ " \n",
+ " | 1 | \n",
+ " 111.012434 | \n",
+ " 55.506606 | \n",
+ " 0.000014 | \n",
+ " 0.040898 | \n",
+ " 0.000097 | \n",
+ " 0.020532 | \n",
+ " 0.001000 | \n",
+ " 1.000634 | \n",
+ " 0.0 | \n",
+ "
\n",
+ " \n",
+ " | 2 | \n",
+ " 111.012434 | \n",
+ " 55.506559 | \n",
+ " 0.000026 | \n",
+ " 0.072091 | \n",
+ " 0.000086 | \n",
+ " 0.036106 | \n",
+ " 0.001000 | \n",
+ " 1.000204 | \n",
+ " NaN | \n",
+ "
\n",
+ " \n",
+ " | 3 | \n",
+ " 111.012434 | \n",
+ " 55.506581 | \n",
+ " 0.000019 | \n",
+ " 0.053721 | \n",
+ " 0.000091 | \n",
+ " 0.026933 | \n",
+ " 0.001000 | \n",
+ " 1.000540 | \n",
+ " 0.0 | \n",
+ "
\n",
+ " \n",
+ " | 4 | \n",
+ " 111.012434 | \n",
+ " 55.506562 | \n",
+ " 0.000024 | \n",
+ " 0.068847 | \n",
+ " 0.000086 | \n",
+ " 0.034485 | \n",
+ " 0.001003 | \n",
+ " 1.000766 | \n",
+ " NaN | \n",
+ "
\n",
+ " \n",
+ " | ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ "
\n",
+ " \n",
+ " | 568516 | \n",
+ " NaN | \n",
+ " NaN | \n",
+ " NaN | \n",
+ " NaN | \n",
+ " NaN | \n",
+ " NaN | \n",
+ " NaN | \n",
+ " NaN | \n",
+ " 0.0 | \n",
+ "
\n",
+ " \n",
+ " | 454744 | \n",
+ " NaN | \n",
+ " NaN | \n",
+ " NaN | \n",
+ " NaN | \n",
+ " NaN | \n",
+ " NaN | \n",
+ " NaN | \n",
+ " NaN | \n",
+ " 0.0 | \n",
+ "
\n",
+ " \n",
+ " | 583730 | \n",
+ " NaN | \n",
+ " NaN | \n",
+ " NaN | \n",
+ " NaN | \n",
+ " NaN | \n",
+ " NaN | \n",
+ " NaN | \n",
+ " NaN | \n",
+ " 0.0 | \n",
+ "
\n",
+ " \n",
+ " | 598582 | \n",
+ " NaN | \n",
+ " NaN | \n",
+ " NaN | \n",
+ " NaN | \n",
+ " NaN | \n",
+ " NaN | \n",
+ " NaN | \n",
+ " NaN | \n",
+ " 0.0 | \n",
+ "
\n",
+ " \n",
+ " | 459565 | \n",
+ " NaN | \n",
+ " NaN | \n",
+ " NaN | \n",
+ " NaN | \n",
+ " NaN | \n",
+ " NaN | \n",
+ " NaN | \n",
+ " NaN | \n",
+ " 0.0 | \n",
+ "
\n",
+ " \n",
+ "
\n",
+ "
564481 rows × 9 columns
\n",
+ "
"
+ ],
+ "text/plain": [
+ " H O Ba Cl S Sr \\\n",
+ "0 111.012434 55.506567 0.000023 0.064477 0.000088 0.032303 \n",
+ "1 111.012434 55.506606 0.000014 0.040898 0.000097 0.020532 \n",
+ "2 111.012434 55.506559 0.000026 0.072091 0.000086 0.036106 \n",
+ "3 111.012434 55.506581 0.000019 0.053721 0.000091 0.026933 \n",
+ "4 111.012434 55.506562 0.000024 0.068847 0.000086 0.034485 \n",
+ "... ... ... ... ... ... ... \n",
+ "568516 NaN NaN NaN NaN NaN NaN \n",
+ "454744 NaN NaN NaN NaN NaN NaN \n",
+ "583730 NaN NaN NaN NaN NaN NaN \n",
+ "598582 NaN NaN NaN NaN NaN NaN \n",
+ "459565 NaN NaN NaN NaN NaN NaN \n",
+ "\n",
+ " Barite Celestite Class \n",
+ "0 0.001001 1.000674 0.0 \n",
+ "1 0.001000 1.000634 0.0 \n",
+ "2 0.001000 1.000204 NaN \n",
+ "3 0.001000 1.000540 0.0 \n",
+ "4 0.001003 1.000766 NaN \n",
+ "... ... ... ... \n",
+ "568516 NaN NaN 0.0 \n",
+ "454744 NaN NaN 0.0 \n",
+ "583730 NaN NaN 0.0 \n",
+ "598582 NaN NaN 0.0 \n",
+ "459565 NaN NaN 0.0 \n",
+ "\n",
+ "[564481 rows x 9 columns]"
+ ]
+ },
+ "execution_count": 17,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "preprocess.scale_inverse(X_train)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 8,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "\n",
+ "\n",
+ "
\n",
+ " \n",
+ " \n",
+ " | \n",
+ " H | \n",
+ " O | \n",
+ " Ba | \n",
+ " Cl | \n",
+ " S | \n",
+ " Sr | \n",
+ " Barite | \n",
+ " Celestite | \n",
+ " Class | \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " | 0 | \n",
+ " 111.012439 | \n",
+ " 55.643909 | \n",
+ " 4.165962e-04 | \n",
+ " 4.736009e-03 | \n",
+ " 9.465541e-07 | \n",
+ " 0.000522 | \n",
+ " 0.001496 | \n",
+ " 1.000785 | \n",
+ " 0 | \n",
+ "
\n",
+ " \n",
+ " | 1 | \n",
+ " 111.012439 | \n",
+ " 55.643909 | \n",
+ " 2.234086e-04 | \n",
+ " 2.539786e-03 | \n",
+ " 9.829733e-07 | \n",
+ " 0.000525 | \n",
+ " 0.001496 | \n",
+ " 1.000785 | \n",
+ " 0 | \n",
+ "
\n",
+ " \n",
+ " | 2 | \n",
+ " 111.012439 | \n",
+ " 55.643910 | \n",
+ " 6.008387e-06 | \n",
+ " 6.830541e-05 | \n",
+ " 1.023957e-06 | \n",
+ " 0.000529 | \n",
+ " 0.001496 | \n",
+ " 1.000785 | \n",
+ " 0 | \n",
+ "
\n",
+ " \n",
+ " | 3 | \n",
+ " 111.012439 | \n",
+ " 55.643910 | \n",
+ " 2.228389e-07 | \n",
+ " 2.533310e-06 | \n",
+ " 1.025048e-06 | \n",
+ " 0.000529 | \n",
+ " 0.001496 | \n",
+ " 1.000785 | \n",
+ " 0 | \n",
+ "
\n",
+ " \n",
+ " | 4 | \n",
+ " 111.012439 | \n",
+ " 55.643910 | \n",
+ " 8.264647e-09 | \n",
+ " 9.395535e-08 | \n",
+ " 1.025088e-06 | \n",
+ " 0.000529 | \n",
+ " 0.001496 | \n",
+ " 1.000785 | \n",
+ " 0 | \n",
+ "
\n",
+ " \n",
+ " | ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ "
\n",
+ " \n",
+ " | 629995 | \n",
+ " 111.012439 | \n",
+ " 55.643904 | \n",
+ " 7.253216e-04 | \n",
+ " 1.686258e-02 | \n",
+ " 6.404085e-07 | \n",
+ " 0.002611 | \n",
+ " 0.502498 | \n",
+ " 0.498044 | \n",
+ " 1 | \n",
+ "
\n",
+ " \n",
+ " | 629996 | \n",
+ " 111.012439 | \n",
+ " 55.643904 | \n",
+ " 1.002708e-03 | \n",
+ " 1.820359e-02 | \n",
+ " 6.403918e-07 | \n",
+ " 0.002166 | \n",
+ " 0.499633 | \n",
+ " 0.498044 | \n",
+ " 1 | \n",
+ "
\n",
+ " \n",
+ " | 629997 | \n",
+ " 111.012439 | \n",
+ " 55.643904 | \n",
+ " 1.342082e-03 | \n",
+ " 1.983942e-02 | \n",
+ " 6.403805e-07 | \n",
+ " 0.001620 | \n",
+ " 0.498883 | \n",
+ " 0.498044 | \n",
+ " 1 | \n",
+ "
\n",
+ " \n",
+ " | 629998 | \n",
+ " 111.012439 | \n",
+ " 55.643904 | \n",
+ " 1.778679e-03 | \n",
+ " 2.194102e-02 | \n",
+ " 6.403663e-07 | \n",
+ " 0.000917 | \n",
+ " 0.498650 | \n",
+ " 0.498044 | \n",
+ " 1 | \n",
+ "
\n",
+ " \n",
+ " | 629999 | \n",
+ " 111.012439 | \n",
+ " 55.643904 | \n",
+ " 1.975694e-03 | \n",
+ " 2.288900e-02 | \n",
+ " 6.403583e-07 | \n",
+ " 0.000599 | \n",
+ " 0.498528 | \n",
+ " 0.498044 | \n",
+ " 1 | \n",
+ "
\n",
+ " \n",
+ "
\n",
+ "
630000 rows × 9 columns
\n",
+ "
"
+ ],
+ "text/plain": [
+ " H O Ba Cl S \\\n",
+ "0 111.012439 55.643909 4.165962e-04 4.736009e-03 9.465541e-07 \n",
+ "1 111.012439 55.643909 2.234086e-04 2.539786e-03 9.829733e-07 \n",
+ "2 111.012439 55.643910 6.008387e-06 6.830541e-05 1.023957e-06 \n",
+ "3 111.012439 55.643910 2.228389e-07 2.533310e-06 1.025048e-06 \n",
+ "4 111.012439 55.643910 8.264647e-09 9.395535e-08 1.025088e-06 \n",
+ "... ... ... ... ... ... \n",
+ "629995 111.012439 55.643904 7.253216e-04 1.686258e-02 6.404085e-07 \n",
+ "629996 111.012439 55.643904 1.002708e-03 1.820359e-02 6.403918e-07 \n",
+ "629997 111.012439 55.643904 1.342082e-03 1.983942e-02 6.403805e-07 \n",
+ "629998 111.012439 55.643904 1.778679e-03 2.194102e-02 6.403663e-07 \n",
+ "629999 111.012439 55.643904 1.975694e-03 2.288900e-02 6.403583e-07 \n",
+ "\n",
+ " Sr Barite Celestite Class \n",
+ "0 0.000522 0.001496 1.000785 0 \n",
+ "1 0.000525 0.001496 1.000785 0 \n",
+ "2 0.000529 0.001496 1.000785 0 \n",
+ "3 0.000529 0.001496 1.000785 0 \n",
+ "4 0.000529 0.001496 1.000785 0 \n",
+ "... ... ... ... ... \n",
+ "629995 0.002611 0.502498 0.498044 1 \n",
+ "629996 0.002166 0.499633 0.498044 1 \n",
+ "629997 0.001620 0.498883 0.498044 1 \n",
+ "629998 0.000917 0.498650 0.498044 1 \n",
+ "629999 0.000599 0.498528 0.498044 1 \n",
+ "\n",
+ "[630000 rows x 9 columns]"
+ ]
+ },
+ "execution_count": 8,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "pd.concat([pd.DataFrame(preprocess.scaler_X.inverse_transform(X.loc[:, X.columns != \"Class\"]), columns=X.columns[:-1]), X.loc[:, \"Class\"]], axis=1)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 9,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "\n",
+ "\n",
+ "
\n",
+ " \n",
+ " \n",
+ " | \n",
+ " H | \n",
+ " O | \n",
+ " Ba | \n",
+ " Cl | \n",
+ " S | \n",
+ " Sr | \n",
+ " Barite | \n",
+ " Celestite | \n",
+ " Class | \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " | 0 | \n",
+ " 111.012439 | \n",
+ " 55.643909 | \n",
+ " 4.165962e-04 | \n",
+ " 4.736009e-03 | \n",
+ " 9.465541e-07 | \n",
+ " 0.000522 | \n",
+ " 0.001496 | \n",
+ " 1.000785 | \n",
+ " 0 | \n",
+ "
\n",
+ " \n",
+ " | 1 | \n",
+ " 111.012439 | \n",
+ " 55.643909 | \n",
+ " 2.234086e-04 | \n",
+ " 2.539786e-03 | \n",
+ " 9.829733e-07 | \n",
+ " 0.000525 | \n",
+ " 0.001496 | \n",
+ " 1.000785 | \n",
+ " 0 | \n",
+ "
\n",
+ " \n",
+ " | 2 | \n",
+ " 111.012439 | \n",
+ " 55.643910 | \n",
+ " 6.008387e-06 | \n",
+ " 6.830541e-05 | \n",
+ " 1.023957e-06 | \n",
+ " 0.000529 | \n",
+ " 0.001496 | \n",
+ " 1.000785 | \n",
+ " 0 | \n",
+ "
\n",
+ " \n",
+ " | 3 | \n",
+ " 111.012439 | \n",
+ " 55.643910 | \n",
+ " 2.228389e-07 | \n",
+ " 2.533310e-06 | \n",
+ " 1.025048e-06 | \n",
+ " 0.000529 | \n",
+ " 0.001496 | \n",
+ " 1.000785 | \n",
+ " 0 | \n",
+ "
\n",
+ " \n",
+ " | 4 | \n",
+ " 111.012439 | \n",
+ " 55.643910 | \n",
+ " 8.264647e-09 | \n",
+ " 9.395535e-08 | \n",
+ " 1.025088e-06 | \n",
+ " 0.000529 | \n",
+ " 0.001496 | \n",
+ " 1.000785 | \n",
+ " 0 | \n",
+ "
\n",
+ " \n",
+ " | ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ "
\n",
+ " \n",
+ " | 629995 | \n",
+ " 111.012439 | \n",
+ " 55.643904 | \n",
+ " 7.253216e-04 | \n",
+ " 1.686258e-02 | \n",
+ " 6.404085e-07 | \n",
+ " 0.002611 | \n",
+ " 0.502498 | \n",
+ " 0.498044 | \n",
+ " 1 | \n",
+ "
\n",
+ " \n",
+ " | 629996 | \n",
+ " 111.012439 | \n",
+ " 55.643904 | \n",
+ " 1.002708e-03 | \n",
+ " 1.820359e-02 | \n",
+ " 6.403918e-07 | \n",
+ " 0.002166 | \n",
+ " 0.499633 | \n",
+ " 0.498044 | \n",
+ " 1 | \n",
+ "
\n",
+ " \n",
+ " | 629997 | \n",
+ " 111.012439 | \n",
+ " 55.643904 | \n",
+ " 1.342082e-03 | \n",
+ " 1.983942e-02 | \n",
+ " 6.403805e-07 | \n",
+ " 0.001620 | \n",
+ " 0.498883 | \n",
+ " 0.498044 | \n",
+ " 1 | \n",
+ "
\n",
+ " \n",
+ " | 629998 | \n",
+ " 111.012439 | \n",
+ " 55.643904 | \n",
+ " 1.778679e-03 | \n",
+ " 2.194102e-02 | \n",
+ " 6.403663e-07 | \n",
+ " 0.000917 | \n",
+ " 0.498650 | \n",
+ " 0.498044 | \n",
+ " 1 | \n",
+ "
\n",
+ " \n",
+ " | 629999 | \n",
+ " 111.012439 | \n",
+ " 55.643904 | \n",
+ " 1.975694e-03 | \n",
+ " 2.288900e-02 | \n",
+ " 6.403583e-07 | \n",
+ " 0.000599 | \n",
+ " 0.498528 | \n",
+ " 0.498044 | \n",
+ " 1 | \n",
+ "
\n",
+ " \n",
+ "
\n",
+ "
630000 rows × 9 columns
\n",
+ "
"
+ ],
+ "text/plain": [
+ " H O Ba Cl S \\\n",
+ "0 111.012439 55.643909 4.165962e-04 4.736009e-03 9.465541e-07 \n",
+ "1 111.012439 55.643909 2.234086e-04 2.539786e-03 9.829733e-07 \n",
+ "2 111.012439 55.643910 6.008387e-06 6.830541e-05 1.023957e-06 \n",
+ "3 111.012439 55.643910 2.228389e-07 2.533310e-06 1.025048e-06 \n",
+ "4 111.012439 55.643910 8.264647e-09 9.395535e-08 1.025088e-06 \n",
+ "... ... ... ... ... ... \n",
+ "629995 111.012439 55.643904 7.253216e-04 1.686258e-02 6.404085e-07 \n",
+ "629996 111.012439 55.643904 1.002708e-03 1.820359e-02 6.403918e-07 \n",
+ "629997 111.012439 55.643904 1.342082e-03 1.983942e-02 6.403805e-07 \n",
+ "629998 111.012439 55.643904 1.778679e-03 2.194102e-02 6.403663e-07 \n",
+ "629999 111.012439 55.643904 1.975694e-03 2.288900e-02 6.403583e-07 \n",
+ "\n",
+ " Sr Barite Celestite Class \n",
+ "0 0.000522 0.001496 1.000785 0 \n",
+ "1 0.000525 0.001496 1.000785 0 \n",
+ "2 0.000529 0.001496 1.000785 0 \n",
+ "3 0.000529 0.001496 1.000785 0 \n",
+ "4 0.000529 0.001496 1.000785 0 \n",
+ "... ... ... ... ... \n",
+ "629995 0.002611 0.502498 0.498044 1 \n",
+ "629996 0.002166 0.499633 0.498044 1 \n",
+ "629997 0.001620 0.498883 0.498044 1 \n",
+ "629998 0.000917 0.498650 0.498044 1 \n",
+ "629999 0.000599 0.498528 0.498044 1 \n",
+ "\n",
+ "[630000 rows x 9 columns]"
+ ]
+ },
+ "execution_count": 9,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "pd.concat([pd.DataFrame(preprocess.scaler_X.inverse_transform(X.loc[:, X.columns != \"Class\"]), columns=X.columns[:-1]), X.loc[:, \"Class\"]], axis=1)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 10,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "\n",
+ "\n",
+ "
\n",
+ " \n",
+ " \n",
+ " | \n",
+ " H | \n",
+ " O | \n",
+ " Ba | \n",
+ " Cl | \n",
+ " S | \n",
+ " Sr | \n",
+ " Barite | \n",
+ " Celestite | \n",
+ " Class | \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " | 478350 | \n",
+ " 0.557224 | \n",
+ " 0.140163 | \n",
+ " 0.001119 | \n",
+ " 0.555750 | \n",
+ " 0.140160 | \n",
+ " 0.557932 | \n",
+ " 3.017125e-06 | \n",
+ " 0.999778 | \n",
+ " 0 | \n",
+ "
\n",
+ " \n",
+ " | 366736 | \n",
+ " 0.354555 | \n",
+ " 0.155748 | \n",
+ " 0.000697 | \n",
+ " 0.352515 | \n",
+ " 0.155747 | \n",
+ " 0.351468 | \n",
+ " 1.880549e-06 | \n",
+ " 0.999699 | \n",
+ " 0 | \n",
+ "
\n",
+ " \n",
+ " | 618649 | \n",
+ " 0.623019 | \n",
+ " 0.136899 | \n",
+ " 0.001258 | \n",
+ " 0.621381 | \n",
+ " 0.136895 | \n",
+ " 0.624624 | \n",
+ " 5.809254e-07 | \n",
+ " 0.998845 | \n",
+ " 0 | \n",
+ "
\n",
+ " \n",
+ " | 435954 | \n",
+ " 0.464794 | \n",
+ " 0.145921 | \n",
+ " 0.000925 | \n",
+ " 0.463041 | \n",
+ " 0.145919 | \n",
+ " 0.463736 | \n",
+ " 1.695287e-06 | \n",
+ " 0.999513 | \n",
+ " 0 | \n",
+ "
\n",
+ " \n",
+ " | 390646 | \n",
+ " 0.594795 | \n",
+ " 0.138235 | \n",
+ " 0.001199 | \n",
+ " 0.593417 | \n",
+ " 0.138231 | \n",
+ " 0.596207 | \n",
+ " 6.463547e-06 | \n",
+ " 0.999962 | \n",
+ " 0 | \n",
+ "
\n",
+ " \n",
+ " | ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ "
\n",
+ " \n",
+ " | 598582 | \n",
+ " 0.512237 | \n",
+ " 0.142787 | \n",
+ " 0.001024 | \n",
+ " 0.510245 | \n",
+ " 0.142784 | \n",
+ " 0.511695 | \n",
+ " 5.984834e-07 | \n",
+ " 0.998902 | \n",
+ " 0 | \n",
+ "
\n",
+ " \n",
+ " | 395666 | \n",
+ " 0.374331 | \n",
+ " 0.153640 | \n",
+ " 0.000738 | \n",
+ " 0.372343 | \n",
+ " 0.153639 | \n",
+ " 0.371605 | \n",
+ " 1.730543e-06 | \n",
+ " 0.999638 | \n",
+ " 0 | \n",
+ "
\n",
+ " \n",
+ " | 459565 | \n",
+ " 0.513986 | \n",
+ " 0.142663 | \n",
+ " 0.001028 | \n",
+ " 0.512319 | \n",
+ " 0.142660 | \n",
+ " 0.513803 | \n",
+ " 3.197008e-06 | \n",
+ " 0.999831 | \n",
+ " 0 | \n",
+ "
\n",
+ " \n",
+ " | 301794 | \n",
+ " 0.415823 | \n",
+ " 0.149779 | \n",
+ " 0.000823 | \n",
+ " 0.413985 | \n",
+ " 0.149777 | \n",
+ " 0.413901 | \n",
+ " 3.439337e-06 | \n",
+ " 0.999885 | \n",
+ " 0 | \n",
+ "
\n",
+ " \n",
+ " | 250138 | \n",
+ " 0.510507 | \n",
+ " 0.142898 | \n",
+ " 0.001021 | \n",
+ " 0.508943 | \n",
+ " 0.142895 | \n",
+ " 0.510372 | \n",
+ " 5.957527e-06 | \n",
+ " 0.999955 | \n",
+ " 0 | \n",
+ "
\n",
+ " \n",
+ "
\n",
+ "
431886 rows × 9 columns
\n",
+ "
"
+ ],
+ "text/plain": [
+ " H O Ba Cl S Sr \\\n",
+ "478350 0.557224 0.140163 0.001119 0.555750 0.140160 0.557932 \n",
+ "366736 0.354555 0.155748 0.000697 0.352515 0.155747 0.351468 \n",
+ "618649 0.623019 0.136899 0.001258 0.621381 0.136895 0.624624 \n",
+ "435954 0.464794 0.145921 0.000925 0.463041 0.145919 0.463736 \n",
+ "390646 0.594795 0.138235 0.001199 0.593417 0.138231 0.596207 \n",
+ "... ... ... ... ... ... ... \n",
+ "598582 0.512237 0.142787 0.001024 0.510245 0.142784 0.511695 \n",
+ "395666 0.374331 0.153640 0.000738 0.372343 0.153639 0.371605 \n",
+ "459565 0.513986 0.142663 0.001028 0.512319 0.142660 0.513803 \n",
+ "301794 0.415823 0.149779 0.000823 0.413985 0.149777 0.413901 \n",
+ "250138 0.510507 0.142898 0.001021 0.508943 0.142895 0.510372 \n",
+ "\n",
+ " Barite Celestite Class \n",
+ "478350 3.017125e-06 0.999778 0 \n",
+ "366736 1.880549e-06 0.999699 0 \n",
+ "618649 5.809254e-07 0.998845 0 \n",
+ "435954 1.695287e-06 0.999513 0 \n",
+ "390646 6.463547e-06 0.999962 0 \n",
+ "... ... ... ... \n",
+ "598582 5.984834e-07 0.998902 0 \n",
+ "395666 1.730543e-06 0.999638 0 \n",
+ "459565 3.197008e-06 0.999831 0 \n",
+ "301794 3.439337e-06 0.999885 0 \n",
+ "250138 5.957527e-06 0.999955 0 \n",
+ "\n",
+ "[431886 rows x 9 columns]"
+ ]
+ },
+ "execution_count": 10,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "X_train"
+ ]
+ },
{
"cell_type": "code",
"execution_count": 11,
"metadata": {},
"outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "Class column found\n"
+ ]
+ },
{
"data": {
- "image/png": "iVBORw0KGgoAAAANSUhEUgAAAv4AAAKKCAYAAABF1l9uAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjAsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvlHJYcgAAAAlwSFlzAAAXEgAAFxIBZ5/SUgAAcqBJREFUeJzt3Xd8VFX+//H3JKSHEAi9BDSQoFnpoFSRIogoZRHXtdDEn7ooCmtdWFCxIk2wrzTXgvJVFAvSiQiCFEGRZujSAiRKEpKQ5Pz+YGdkmJRJMnNT5vV8PObxgHs/954zuZPMZz5z7jk2Y4wRAAAAgArNr7Q7AAAAAMD7SPwBAAAAH0DiDwAAAPgAEn8AAADAB5D4AwAAAD6AxB8AAADwAST+AAAAgA8g8QcAAAB8AIk/AAAA4ANI/AEAAAAfQOIPAAAA+AASfwAAAMAHkPgDAAAAPoDEHwAAAPABJP6oULp27SqbzaaJEyeWdldQgKFDh8pms2no0KFF2ucrsrKyFBMTo6CgIB0+fNhp3+rVq2Wz2WSz2Uqpd5534MABx3M6cOBAaXen1E2cOFE2m01du3Yt7a44eeGFF2Sz2fTvf/+7tLsCoJhI/FEo+5tQXo/Q0FA1adJEQ4YM0bp160q7qwWaPn26Jk6cqB9//NHytmNjY2Wz2dS3b1+3jzl06JD8/Pxks9k0depUL/bO2cSJEzVx4kQSsFI0c+ZM7du3T3fffbcaNGhQ2t0pkLdfLwcOHHC0Ud79+OOPmjhxoqZPn17aXSmWUaNGqXr16poyZYp+++230u4OgGIg8UeR1KpVy/GoUaOGsrKy9Ouvv2r+/Pnq2LFjqb85R0dHKy4uTtWrV3fZN336dD311FOlkvgPHz5ckrRkyRIdO3bMrWPmzJkjY4wCAgJ05513erN7Tp566ik99dRTXk3869Spo7i4ONWpU8drbZRXZ86c0aRJkxQUFKQnnniitLtTKE+8XgICAhQXF6e4uDgFBAQ47Ttw4ICjjfLuxx9/1FNPPVVo4l+9enXFxcUpOjramo65KTw8XGPHjlV6errGjx9f2t0BUAwk/iiS48ePOx4nT55UZmam1q5dq9atW0u6kASUZuV//vz52rVrl0aNGlVqfcjLkCFDVKlSJeXk5Gj+/PmFxhtjNG/ePEnSzTffrBo1ani7i5Z6/vnntWvXLj3//POl3ZUy56233lJKSopuuukm1a9fv7S7Y4l69epp165d2rVrl+rVq1fa3Sl1o0aN0q5du9z6W2G1u+++W5UqVdK7777rdhEDQNlB4o8S8ff3V8eOHbVo0SLHts8++6z0OlRG1alTRzfccIOkC5X8wqxatUr79++X9Oe3Baj4jDF6++23JUl33HFHKfcGcFW9enX16tVL2dnZmj17dml3B0ARkfjDI+rXr6+oqChJUmpqqsv+8+fPa9myZXrwwQfVpk0b1alTR4GBgapZs6Z69eqlDz74QMaYPM996c2MW7du1e2336769esrICDA6Qa4vG7utd+jcPDgQUnSsGHDXO5VyK/d2267TdHR0QoODlaVKlXUrl07vfTSS0pLSyvyz2jEiBGSpN27d+u7774rMNb+hlqvXj316tXLaV9iYqIeeOABXXHFFQoPD1doaKiuuOIKPfTQQzp06FCe55s7d65sNpsaNWok6cIHi/79+6tOnTry9/fX0KFDHTfV2l133XVOPyP7sZdatGiR+vfvr7p16yowMFBVq1ZVly5d9MYbb+j8+fN5HlPcG3gbNWokm82muXPn5htT0LkvPj4rK0uTJ09W8+bNFRYWpipVqqhbt25asmRJgX1IS0vThAkTdMUVVygkJEQ1a9ZUnz59tGLFCrf7mJ/ly5dr3759ioyMdHxQLIrc3Fx99913evzxx3XNNdeofv36CgwMVFRUlK699toCr4kkJScn69///rdatWqliIgIBQYGqnbt2mrWrJnuvfdex3OUVOzXS17yu7m3UaNGuu666xz/v/T3Nq9rnJGRoVdeeUXXXnutqlev7ngO/fv3L/Da2s+5evVqnTx5UmPGjFFsbKxCQ0Odnue5c+f0+eefa+TIkWrRooVq1KihoKAg1a1bV/3799fXX3+d7/mHDRsmSTp48KDLc8nrb1ZBN/du3bpVd911lxo2bKjg4GBVrVpVHTp00PTp05WZmZnnMZf+Hdi8ebMGDx6sOnXqKCgoSJdffrnGjBmj5OTkfNuVpL///e+S5PiQCqAcMUAhJkyYYCSZgl4uR44cccTMmDHDZf+qVasc+yWZoKAgEx4e7rTtlltuMTk5OQUeu3DhQhMQEGAkmYiICBMcHGyuvfZaR+y1115rJJkJEyY4tk2ePNnUqlXL+Pn5OY6rVauW0+Ni58+fN3fffbdT38LDw42/v7/j/3FxcebAgQNF+jmeP3/e1K5d20gyI0aMyDfu999/NyEhIUaS+de//uW076233nI8f/vP0R5rf25Lly51OeecOXOMJNOwYUMzY8YMY7PZjCRTpUoVExAQYIYMGWIefPBBU6tWLce5qlat6vQzatOmjdM5z549a/r27ev0c4qIiHCcW5Jp3769OXPmjEt/hgwZYiSZIUOGFGlfw4YNjSQzZ86cfH9+7hw/c+ZMc/XVVxtJJiAgwOm1aLPZzDvvvJPnuU+cOGGuvPJKR2xAQICJjIx0HPf666+71cf8jBkzxkgyvXr1yjfm4t+HS+3fv9/pelSqVMlEREQ4bevcubNJT093Ofbw4cMmOjraEefn52eqVq3q9Lq/+HetqK+Xglzc7/379zu2t2nTxlStWtWx79Lf2wcffNDpPHv27DFNmjRxupZVqlRxev733Xdfnn2w73/77bcdzys4ONhUrlzZ6Wdt/12yP0JCQkxoaKjTtrFjx7qcv1atWo5r4efn5/JcJk+e7Ii1/829+Od9sWnTpjn9ntl/j+3/b9asmTl69KjLcRf/HXjvvfccx1SpUsXx91GSiY+PN2fPns33eh0+fNgR+8svv+QbB6DsIfFHoQpK/LOzs826detM27ZtjSRTs2ZNk5yc7BL3/fffm7///e/myy+/NMePHze5ubnGGGNOnz5tZsyY4XhDLOxDQ3h4uOnTp4/ZuXOnY/+ePXsc/84r8bdzNyEbPXq0I8l47bXXzOnTp40xxmRlZZlVq1aZli1bGkmmVatWeX5QKcijjz5qJJnKlSub1NTUPGPeeOMNR9Ly66+/OrZ/+umnjmTz8ccfNwcOHDC5ubkmNzfX7Nq1y9xyyy2O5PvgwYNO57S/4QcHBxt/f38zdOhQc+jQIWPMhWt4cTv2n/WqVasKfC79+/c3kkzjxo3N+++/b/744w9jjDHnzp0zn332mbn88suNJNO/f3+XY0s78a9ataqpV6+eWbRokcnKyjLGGLNr1y5zzTXXOF5nKSkpLsf37t3bkey98847JiMjwxhjzKFDh8ytt95qAgMDHUlgcRL/Nm3aGElm/Pjx+cYUlPgfPnzY9OvXzyxYsMD89ttvjtfn2bNnzZw5c0zdunWNJPPwww+7HDtixAgjyTRq1MgsX77cZGdnG2MuvD4OHDhgXn/9dfPYY4+5HOfu66Ug+SX+hT3fiyUnJ5tGjRoZSaZbt24mISHBcX1SUlLM1KlTHR/wpk+fnu/zCA8PN3FxcWbFihWOn9/u3bsdcZ9++qm55557zKpVq8ypU6cc248ePWqeeuopRzL92WefubRxceJdkIIS/8WLFzv62q9fP7Nv3z5jjDGZmZlm/vz5jg8qHTp0cFzDS9sPDQ01QUFB5u6773b8HUhLSzOzZs1y9L+g16AxxvFaev311wuMA1C2kPijUBcn/hdXqGrUqOGoBkZERJjbb7+9yFVwu48//thIMjExMS77Ln7jb9euncub2cVKmvj/9NNPxmazmdDQULN9+/Y8Y/744w9Tv359I8l8+umnhT01J7t27XI8l/z60a5dOyPJdO3a1bEtMzPT1KtXz0jKtxptjDE333yzkWRGjx7ttP3iKuXAgQML7KM7idwXX3xhJJnatWubI0eO5Blz+PBhExYWZiSZrVu3Ou0r7cQ/KCjI6cOj3cmTJ01wcLCRZP773/867fv2228dP5t3333X5dicnBxz3XXXFXp985OZmen4fVq4cGG+ce4mwnn54YcfjCQTFhZmzp0757TviiuuMJLM+++/X6RzlpXE/5///Kcj6T9//nyeMZ988omRZKpXr+4SY28jIiLCHD58uNjPZfLkyUaS6d69u8s+TyT+9m+cOnXqlOffws8//9zxXD7++OM828/v98OYP791aty4cYF9vPHGG40kc9dddxUYB6BsYYw/iuTEiROOR1JSknJyciRJ6enp+v3333XixIlinffGG2+UdGH8ekEzRTzyyCPy9/cvVhvueOedd2SM0Y033qirrroqz5jKlSurf//+kqRvvvmmSOePi4tTx44dJeV9k+8vv/yijRs3SvrzngBJ+vrrr/Xbb7+pVq1ajnHCebnrrrsK7Zcnpoj8z3/+I0m68847852FpX79+o7x2UX9OXnboEGD1LRpU5ftNWrUUPv27SVJ27dvd9r38ccfS7ow7vz22293OdbPz0/jxo0rdp9Onjzp+H3y1ixObdq0Uc2aNZWWluYyrW1kZKQklcuZWowxjvtixo4dq0qVKuUZ179/f0VEROjUqVPavHlznjF33nlniWZTsv8tW79+veN6esr27dv1yy+/SJLGjx+f59/Cm266Se3atZMkffDBB/meK7/Xar9+/SRJv/76q9LT0/M93j5l8tGjR93rPIAy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Zo6CwaRJk/KcNeirr77Shg0bJF24V8gbMjMzHa+xgm4yBlD2kPijxI4fP65x48Zp3rx5ki5Us+1TIkrSlVdeqejoaEnS8OHDnabRW79+vbp27VrsMc1F8Ze//EWStHDhwnzba9GihR566CFJ0htvvKFbbrlFP/74oyPJzMnJ0bZt2/TMM88oJibGZUrEorjzzjsVEBCgzMxMvfTSS5IuTKWX15jZ4OBgvfbaa7LZbNqyZYs6duyob775ximh3r9/v9588021a9dOr732WrH7Zf85vffee/l+wOjXr58GDBggSXr88cd13333ac+ePY79WVlZ2rBhgx577DE1bNgw35sMi8qeyOzcuVP33HOPY1jNH3/8oWnTpunee+8t0Yw4BencubN69uwp6cIHxLlz5zqS5SNHjuj222/Xt99+m+8sKO7o2rWrJDkSt6IIDw93fBMzZswYrVy50vFtzM8//6w+ffpo06ZNTt/GXaxhw4Z64okn9P333zt9CPj11191++23Kz09XX5+furVq5fTce68XkoiNjZWgYGBki5MI5tftXz8+PGKiYlRdna2evfuralTpzrd6Pv7779ryZIlGjJkiDp37lysvnTq1ElhYWEyxmjw4MGO13xOTo6++eYbde3atcBx9faf1R9//KGPPvqoWH148cUXJUnffvutBg0a5Ki8nz9/Xu+9957jd6RDhw55zq7mCVu3blVWVpYqVark9ZnWAHiYJxYDQMWW3wJetWrVMlWqVHHsk2Suuuoq89tvv7mcY/HixaZSpUqOuNDQUMcKp6GhoWb58uX5LgRUlAWLClrAa82aNY5l7v39/U2dOnVMw4YNXRbTyc7ONg899JDT8woODjZRUVFOz0GSWbt2bVF+lC7++te/Op1vyZIlBcb/97//dfzcJJlKlSqZqKgoExQU5HSeSZMmOR3n7sJBxhjz7rvvOs4TEBBg6tWrZxo2bGg6duzoFJeWlmb+9re/ObUbFhZmqlatavz8/Jy2X7rIV3EX8DLGmLvuusvp3JGRkY72Ro0a5dUFwI4dO2aaNm3q9POJjIw0koyfn5956623THR0tJFkPvjgg3zbyM+JEydMYGCgkeS0IvXFCvp92LRpk2PRNP1voTL7Sq6VKlUy8+fPz/dncPHP1M/Pz1StWtWxmJl0YSXpadOmubTp7uulIAUt4GXMn6sK2/9eREdHm4YNG5qxY8c6xe3bt880b97c5fVhXxnc/shrcar8/v5c6vXXX3c6V3h4uOPnVL16dacFtPJ6Lt27d3fsr1y5suNv0MU/24IW8DLGmKlTpzr+ltmfo/11U9DfYXf+DhR2LYwx5oknnjBS3qtyAyjbqPijSC6drSY9PV21a9dWr1699Pbbb2vTpk15TnfYt29fJSQk6MYbb1RkZKSys7NVvXp1DRs2TFu2bFH37t293vcuXbroyy+/VI8ePVSlShWdOHFCBw8edJlj3t/fX9OmTdOWLVt0zz33KC4uTv7+/vr9999VtWpVdezYURMnTtSPP/5Y4mrXxeP5GzRo4Kgo5+f222/Xr7/+qnHjxqlNmzYKDw9XSkqKY1rVUaNGafny5XrssceK3ac77rhD7777rjp16qTQ0FAdO3ZMBw8edBlCExoaqg8++ECrVq3SnXfeqcsvv1y5ublKTU1VzZo11a1bN7300kvau3dvvuOhi2P27NmaMWOGWrRooZCQEOXm5qpjx45asGCBZs6c6bF28lK7dm398MMPGjdunGJjY+Xn56dKlSqpT58+WrlypUaOHOm4udi+IFZR1KxZ01Glfe+994p8fOvWrbVx40YNHjxY1atXV25uripXrqzBgwdr3bp1uvPOO/M9dunSpXriiSfUuXNnNWjQwDElbOPGjTVs2DD98MMPjm/DLubu66UkXn31VU2cONFRMT906JAOHjzocqPyZZddpk2bNmn+/Pnq27ev6tSp4xhqdtlll2nAgAGaPXu21q9fX+y+3Hvvvfryyy/VtWtXhYeHKzs7W/Xq1dMDDzygbdu25bvwn93ChQv18MMPKzY2VufPn3f8DSrK8J+HH35YmzZt0h133KEGDRooPT1dISEhuuaaazR16lRt3LixwGlnS8IY4xjq9v/+3//zShsAvMdmjJfuyAIAH7N3717HXPeHDh1SgwYNinyOhIQEXXvttYqJidHevXu9OiUjUFQXvz737NlT4nVBAFiL31gA8JDnn39e0oX7WoqT9EsXvpm6/vrrlZiYqI8//tiT3QNKzP4anzRpEkk/UA7xWwsAbtq1a5fuvvtuJSQk6OzZs07bhw0bpjlz5ki6cMNzSbz88svy8/PT008/bel0qUBBNmzYoCVLlqhdu3aORQgBlC8M9QEAN/34449Oc+RXqVJF58+fd5rN5sEHH9SMGTNK3NbcuXN14MABjRw50qP3SADF9cUXX2jTpk0aMGCAY2pdAOULiT8AuOns2bN66623tHz5cu3evVsnT55Udna2atasqfbt2+uee+6x5EZ1AACKg8QfAAAA8AGM8QcAAAB8AIk/AAAA4ANI/AEAAAAfQOIPAAAA+AASfwAAAMAHVCrtDnhT7dq1lZaWpujo6NLuCgAAgJNDhw4pLCxMx48fL+2uOLn55puVmJhoWXsxMTH6/PPPS3SOzZs3a9myZdq4caM2bNigo0ePKigoSBkZGcU6X0pKiiZOnKhPP/1Ux48fV+3atdW/f3899dRTioyMLFFfS1OFns6zcuXKyspKVUyjgNLuittssrkda1Q2Lt2hw5HuB5/L9Fo/AABuCglyOzS6QYr3+uGmorw3SmXn/bEwiQfOKzDAprOpZWuF7vj4eP366041tiB/+vXAeTVufIV27NhRovP0799fn332mdO24ib+p0+fVvv27bV3715dfvnlatOmjXbs2KEdO3aocePG+v777xUVFVWi/paWCl3xj46Olsneq62r65d2V9wWYPN3O/a8yfFiT9x3U/+hbseaTT+7f+KK+5kUADzP5n5ybLvqL27HLl40txid8ayivDdKZef9sTAtux4p7S7kq3GjAP20pqHX27nq2oMeOU/79u3VvHlztW3bVm3btlXt2rWLfa6HH35Ye/fu1cCBA7VgwQJVqnQhXX7wwQc1c+ZMjRkzRvPmzfNIv61WoRN/AAAAFIdRrqz4JsIzRb7HHnvMI+c5fvy43nvvPQUEBOi1115zJP2SNHnyZH344Yd677339NJLL6lWrVoeadNK3NwLAAAASPr666+Vm5urLl26uCT2QUFBuummm5STk6Ovv/66lHpYMiT+AAAAcGIk5Zhcrz/K2qDebdu2SZJatWqV5377dntceUPiDwAAAOjCTEuSVL9+3veH2rfb48obxvgDAACg1CQmJio+Pj7PfSWd7aeoUlNTJUmhoaF57g8LC3OKK29I/AEAAOCi7A3E8T77LPe2fGbJKu+z4JP4AwAAoNTExMRYXtnPT+XKlSVJaWlpee5PT0+XJIWHh1vWJ08i8QcAAIATI1kynaeRirg8m3dFR0dLko4cyXuNBft2e1x5Q+JvAb8ivKSLsuhIUc4rFe0ruzl/NHA71v94stux2eX8KzIAKLOK8Pe1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u85j7ZL4AwAAABYzboylciemKBjjDwAAAGdG1lTkfWWQfzEdPXpU4eHhHjufxxL/qVOnau3atfrpp5908uRJZWRkqHbt2urataseffRRxcfH53nc/PnzNWvWLP3yyy8KDAzUNddco3HjxqlDhw6e6hoAAABQqubPn+/0/19//dVlm112drZ2796t5cuX65prrvFYH2zGQ98hVK9eXWlpaWrWrJnq1asnSdqxY4f27NmjwMBALVq0SDfccIPTMWPGjNG0adMUEhKi66+/XhkZGVqxYoWMMfr44481YMCAEvUpPj5eB385ova260t0HgAAAE9bb5ZKklLN76XcE2fx8fH69Y8kNZoxyuttHRg9S40jamjHjh1eb6u0+fn5yWZz/1sUY4yCg4P1+eefq0ePHh7pg8cq/p999plat26t4OBgp+2vv/667r//ft199906dOiQ/P39JUkrV67UtGnTFBUVpfXr16tJkyaSpPXr16tr164aNmyYunbtqqpVq3qqiwAAAECp+Pe//y2bzSZjjJ5++mm1aNFC/fr1yzM2MDBQdevW1fXXX686dep4rA8eS/w7duyY5/b77rtPU6dO1a+//qrdu3fryiuvlCRNmTJFkjRu3DhH0i9J7du317333qtXXnlFs2fP1tixYz3VRQAAALjJl2fd8YaJEyc6/j137lz16NFDEyZMsLQPlszqY6/yBwYGSpJjSI8kDRo0yCXevm3x4sVWdA8AAACwzIEDB/TSSy9Z3q7XZ/WZP3++du/erdjYWF1++eWSpF27dikzM1M1atRQ/fr1XY5p1aqVJGn79u3e7h4AAADywow7FY7HE//Jkydrx44dSktL086dO7Vjxw7VrVtX77//vvz8LnzBcOjQIUnKM+mXpLCwMEVGRio5OVlnz55V5cqVC2wzvxmDEhMTVUlBJXg2AAAAgHesXbtWn332mfbu3auzZ8/mOW+/zWZzjJQpKY8n/t98841T5xo0aKB3331XrVu3dmxLTU2VJIWGhuZ7nrCwMKWkpCg1NbXQxB8AAAAoL4wxGjFihObNm+dI9u03/trZ/1+UmYAK4/Ex/suXL5cxRsnJyUpISFBcXJy6du2qZ5991hFz8RPMT1FmGd2xY0eej5iYmOI/EQAAAB9mjM3rD1/1xhtvaO7cuWrdurWWLVumgQMHSpJ2796tr7/+WkOHDpWfn58eeeQR7du3z2Pteu3m3sjISHXu3FlfffWVWrdurfHjx+uHH36QJEcFPy0tLd/j09PTJcmjq5UBAAAApW3u3LkKCwvT119/re7duzty4yZNmqhXr16aPXu2PvjgA7388sv68ccfPdau12f1CQgI0K233ipjjGOWnujoaEnSkSNH8jwmLS1NKSkpioyMZJgPAACAxYwkYyx4eLDPGRkZmjBhgmJjYxUcHKy6detq+PDh+eabhfn11181cuRINWrUSMHBwapRo4Y6dOigyZMnl7ivO3fuVPv27RUVFSXpz1EwOTk5jphBgwapdevWevnll0vcnp0l03lWr15dkpSUlCRJiouLU1BQkJKSkvK8GFu2bJEkNWvWzIruAQAAoBzLyMhQ9+7d9fTTTys1NVX9+vVTgwYNNGfOHLVq1UqJiYlFOt+nn36qq666Su+8846ioqI0YMAAtWzZUvv379ebb75Z4v7m5uY68mPpz/tek5OTneKaNGmin376qcTt2VmS+K9Zs0aSHGPuQ0JC1K1bN0nSwoULXeLt2/r27WtF9wAAAODE++P7L4zx98w4/+eee07r1q1T+/bttWfPHi1YsEAbNmzQlClTlJSUpOHDh7t9rm3btulvf/ubwsLClJCQoM2bN+uDDz7Q0qVL9dtvv+nDDz8scX/r1avnVPxu2LChJGnr1q1OcXv27FGlSp6bi8cjif+3336rBQsWKDs722n7+fPnNXPmTL377rsKCQnRrbfe6tg3ZswYSdKkSZO0d+9ex/b169frzTffVEREhEaMGOGJ7gEAAKCCsuebkvTqq6863R86ZswYNWvWzJHAu+OBBx5QVlaW5s6dq06dOjnt8/PzU5s2bUrc51atWumXX35x5M7XX3+9jDF65JFHtHPnTp09e1aTJ0/W5s2b1bJlyxK3Z+eRjxCJiYkaNmyYqlevrtatWysqKkqnTp3STz/9pGPHjik4OFhz585VgwYNHMf06NFDo0eP1owZM9SiRQv17NlTWVlZWrZsmXJzc/Xee++pWrVqnugeAAAAisJIsmLWHQ8M8l+7dq1SUlIUExOTZ5I8aNAgbd++XYsXL3aaXj4vO3fu1LfffqvY2Fivjjy5+eabtWDBAn3xxRfq37+/mjdvrr/97W/68MMP9Ze//MURV6lSJaeZMUvKI4n/tddeqyeffFJr1qzR9u3bderU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gQOl0i6JPwAAAJwZScaCijTfKliKm3sBAACAUnb27FmlpqZ6tQ0SfwAAAKAULFmyRH369FGVKlUUGRmpKlWqKCIiQjfeeKOWLFni8fZI/AEAAOCK6Ty9asyYMY4E/+zZs4qIiFBERIRSU1P19ddf68Ybb9SYMWM82iaJPwAAAGChBQsWaPr06apRo4ZeeeUVJScnOx4pKSmaOXOmatasqRkzZuijjz7yWLsk/gAAAHBi04XpPL3+KO0nWkpee+01BQcHKyEhQaNGjVKVKlUc+yIiIvSPf/xDa9asUVBQkF577TWPtUviDwAAAFho27Zt6tatm2JjY/ONiY2NVbdu3fTjjz96rF2m8wQAAIArHx+D701ZWVkKCwsrNC4sLExZWVkea5eKPwAAAGChmJgYrVmzRunp6fnGpKena82aNYqJifFYuyT+AAAAcGHFGH9fNXjwYJ08eVIDBw7Uvn37XPYnJiZq4MCBSkpK0q233uqxdhnqAwAAAFjon//8pz777DMtXbpUcXFxateunRo1aiSbzab9+/dr48aNysnJUZs2bTR27FiPtUviDwAAAFc+XJH3tpCQEK1evVpPPPGEZs+erfXr12v9+vVO+4cPH67nn39eISEhHmuXxB8AAADwotTUVIWHhzttCw8P18yZM/Xiiy9q8+bNOnr0qCSpbt26at26tUJDQyVJb7/9tkaOHOmRfpD4AwAAwJlVK+v6yLcKvXr10rJlyxzJ/MVCQ0PVuXPnPI+bMmWKHn30UY8l/tzcCwAAAHjR+vXr1bt37wJn8bnUhAkT9Mgjj8jf399j/SDxBwAAALyoQ4cOWrt2rfr06aNz584VGj9mzBhNmjRJgYGB+uijjzzWDxJ/AAAAuGA6T8/55ptv1KFDByUkJOjGG29URkZGvrEjR47U9OnTFRISosWLF6t///4e6weJPwAAAOBFYWFhWrJkia655hqtXr1aN910kzIzM51icnJydNttt+mdd95RRESElixZop49e3q0HyT+AAAAgJeFh4frm2++0dVXX62VK1fq5ptvdiT/mZmZ6t+/vxYsWKCoqCitXLlSnTp18ngfSPwBAAAAC1SuXFlLly5V27ZttXz5cg0YMECnT59W79699eWXX6pOnTpas2aNWrVq5ZX2mc4TAAAArnxoDL6VKleurG+++UbXX3+9lixZokaNGiktLU0N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AADgwma8//BVs2bN0vbt2y1vl8QfAAAAsFD9+vVLZS5/En8AAAC4MhY8fNSAAQO0Zs0anT171tJ2SfwBAAAAC02cOFHR0dHq06ePtm7dalm7zOoDAAAAVz5ckfe2fv36KSgoSN99953atGmjOnXqKDo6WsHBwS6xNptNK1as8Ei7JP4AAACAhVavXu34tzFGR48e1dGjR/OM9eR8/yT+AAAAgIX2799fKu2S+AMAAMCFL0+36W0NGzYslXa5uRcAAADwAVT8AQAA4Myq6Tb5VkGSlJKSorNnz8qYvH8g0dHRHmmHxB8AAACw2PHjxzVu3Dh99tlnOnPmTL5xNptN2dnZHmmTxB8AAABObLJmjL/n5qspX44dO6a2bdvq6NGjqlevnmrUqKGTJ0+qffv22rdvn06cOCGbzab27dsrICDAY+0yxh8AAACw0KRJk3T06FE9/fTTOnz4sG644QbZbDZ99913OnbsmFavXq2mTZvKZrPp66+/9li7JP4AAABwZSx4+KglS5bosssu07hx4/Lc36VLFy1dulRbt27VM88847F2SfwBAAAAC/32229q0aKF4//+/v6SpMzMTMe2evXq6brrrtNHH33ksXZJ/AEAAODCZrz/8FURERFOM/hERkZKuvCB4GLBwcEu20qCxB8AAACwUHR0tA4cOOD4/1/+8hdJ0ldffeXYlp6eru+++0516tTxWLvM6gMAAABXPlyR97Zu3bpp+vTpOnHihGrVqqWbb75ZYWFh+uc//6nDhw+rfv36+u9//6sTJ07ovvvu81i7JP4AAACAhW6//XYdPnxYO3fuVK1atVStWjW9+eabGjZsmCZPniybzSZjjOLj4/Xss896rF0SfwAAAMBCzZs31wcffOC07bbbblPHjh311VdfKTk5WbGxsbr55ps9Oo8/iT8AAABcMdTHctHR0br33nu9dn5u7gUAAAB8ABV/AAAAOLNquk0f/Fbhjz/+UHZ2tqpVq+a0/eDBg5o1a5Z2796tsLAw3Xjjjbrjjjs82jYVfwAAAMDL1qxZoxYtWqhq1aqqUaOGatWqpVdeeUWSlJCQoCuuuEJTp07VF198oQULFmjIkCEaMGCAR/tAxR8AAACufLAa7y0///yzevXqpaysLMe2pKQkPfzww6pVq5YeeeQRBQQEaNSoUbrsssu0b98+vfXWW/r88881b948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",
+ "text/html": [
+ "\n",
+ "\n",
+ "
\n",
+ " \n",
+ " \n",
+ " | \n",
+ " H | \n",
+ " O | \n",
+ " Ba | \n",
+ " Cl | \n",
+ " S | \n",
+ " Sr | \n",
+ " Barite | \n",
+ " Celestite | \n",
+ " Class | \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " | 0 | \n",
+ " 111.012434 | \n",
+ " 55.506567 | \n",
+ " 0.000023 | \n",
+ " 0.064477 | \n",
+ " 0.000088 | \n",
+ " 0.032303 | \n",
+ " 0.001001 | \n",
+ " 1.000674 | \n",
+ " 0.0 | \n",
+ "
\n",
+ " \n",
+ " | 1 | \n",
+ " 111.012434 | \n",
+ " 55.506606 | \n",
+ " 0.000014 | \n",
+ " 0.040898 | \n",
+ " 0.000097 | \n",
+ " 0.020532 | \n",
+ " 0.001000 | \n",
+ " 1.000634 | \n",
+ " 0.0 | \n",
+ "
\n",
+ " \n",
+ " | 2 | \n",
+ " 111.012434 | \n",
+ " 55.506559 | \n",
+ " 0.000026 | \n",
+ " 0.072091 | \n",
+ " 0.000086 | \n",
+ " 0.036106 | \n",
+ " 0.001000 | \n",
+ " 1.000204 | \n",
+ " NaN | \n",
+ "
\n",
+ " \n",
+ " | 3 | \n",
+ " 111.012434 | \n",
+ " 55.506581 | \n",
+ " 0.000019 | \n",
+ " 0.053721 | \n",
+ " 0.000091 | \n",
+ " 0.026933 | \n",
+ " 0.001000 | \n",
+ " 1.000540 | \n",
+ " 0.0 | \n",
+ "
\n",
+ " \n",
+ " | 4 | \n",
+ " 111.012434 | \n",
+ " 55.506562 | \n",
+ " 0.000024 | \n",
+ " 0.068847 | \n",
+ " 0.000086 | \n",
+ " 0.034485 | \n",
+ " 0.001003 | \n",
+ " 1.000766 | \n",
+ " NaN | \n",
+ "
\n",
+ " \n",
+ " | ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ "
\n",
+ " \n",
+ " | 568516 | \n",
+ " NaN | \n",
+ " NaN | \n",
+ " NaN | \n",
+ " NaN | \n",
+ " NaN | \n",
+ " NaN | \n",
+ " NaN | \n",
+ " NaN | \n",
+ " 0.0 | \n",
+ "
\n",
+ " \n",
+ " | 454744 | \n",
+ " NaN | \n",
+ " NaN | \n",
+ " NaN | \n",
+ " NaN | \n",
+ " NaN | \n",
+ " NaN | \n",
+ " NaN | \n",
+ " NaN | \n",
+ " 0.0 | \n",
+ "
\n",
+ " \n",
+ " | 583730 | \n",
+ " NaN | \n",
+ " NaN | \n",
+ " NaN | \n",
+ " NaN | \n",
+ " NaN | \n",
+ " NaN | \n",
+ " NaN | \n",
+ " NaN | \n",
+ " 0.0 | \n",
+ "
\n",
+ " \n",
+ " | 598582 | \n",
+ " NaN | \n",
+ " NaN | \n",
+ " NaN | \n",
+ " NaN | \n",
+ " NaN | \n",
+ " NaN | \n",
+ " NaN | \n",
+ " NaN | \n",
+ " 0.0 | \n",
+ "
\n",
+ " \n",
+ " | 459565 | \n",
+ " NaN | \n",
+ " NaN | \n",
+ " NaN | \n",
+ " NaN | \n",
+ " NaN | \n",
+ " NaN | \n",
+ " NaN | \n",
+ " NaN | \n",
+ " 0.0 | \n",
+ "
\n",
+ " \n",
+ "
\n",
+ "
564481 rows × 9 columns
\n",
+ "
"
+ ],
"text/plain": [
- ""
+ " H O Ba Cl S Sr \\\n",
+ "0 111.012434 55.506567 0.000023 0.064477 0.000088 0.032303 \n",
+ "1 111.012434 55.506606 0.000014 0.040898 0.000097 0.020532 \n",
+ "2 111.012434 55.506559 0.000026 0.072091 0.000086 0.036106 \n",
+ "3 111.012434 55.506581 0.000019 0.053721 0.000091 0.026933 \n",
+ "4 111.012434 55.506562 0.000024 0.068847 0.000086 0.034485 \n",
+ "... ... ... ... ... ... ... \n",
+ "568516 NaN NaN NaN NaN NaN NaN \n",
+ "454744 NaN NaN NaN NaN NaN NaN \n",
+ "583730 NaN NaN NaN NaN NaN NaN \n",
+ "598582 NaN NaN NaN NaN NaN NaN \n",
+ "459565 NaN NaN NaN NaN NaN NaN \n",
+ "\n",
+ " Barite Celestite Class \n",
+ "0 0.001001 1.000674 0.0 \n",
+ "1 0.001000 1.000634 0.0 \n",
+ "2 0.001000 1.000204 NaN \n",
+ "3 0.001000 1.000540 0.0 \n",
+ "4 0.001003 1.000766 NaN \n",
+ "... ... ... ... \n",
+ "568516 NaN NaN 0.0 \n",
+ "454744 NaN NaN 0.0 \n",
+ "583730 NaN NaN 0.0 \n",
+ "598582 NaN NaN 0.0 \n",
+ "459565 NaN NaN 0.0 \n",
+ "\n",
+ "[564481 rows x 9 columns]"
+ ]
+ },
+ "execution_count": 11,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "preprocess.scale_inverse(X_train)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 12,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "scale_X = tf.convert_to_tensor(preprocess.scaler_X.scale_, dtype=tf.float32)\n",
+ "min_X = tf.convert_to_tensor(preprocess.scaler_X.min_, dtype=tf.float32)\n",
+ "scale_y = tf.convert_to_tensor(preprocess.scaler_y.scale_, dtype=tf.float32)\n",
+ "min_y = tf.convert_to_tensor(preprocess.scaler_y.min_, dtype=tf.float32)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 13,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "results_inverse = X_train.loc[:, X_train.columns != \"Class\"] * scale_X + min_X"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 14,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "\n",
+ "\n",
+ "
\n",
+ " \n",
+ " \n",
+ " | \n",
+ " H | \n",
+ " O | \n",
+ " Ba | \n",
+ " Cl | \n",
+ " S | \n",
+ " Sr | \n",
+ " Barite | \n",
+ " Celestite | \n",
+ " Class | \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " | 478350 | \n",
+ " 0.557224 | \n",
+ " 0.140163 | \n",
+ " 0.001119 | \n",
+ " 0.555750 | \n",
+ " 0.140160 | \n",
+ " 0.557932 | \n",
+ " 3.017125e-06 | \n",
+ " 0.999778 | \n",
+ " 0 | \n",
+ "
\n",
+ " \n",
+ " | 366736 | \n",
+ " 0.354555 | \n",
+ " 0.155748 | \n",
+ " 0.000697 | \n",
+ " 0.352515 | \n",
+ " 0.155747 | \n",
+ " 0.351468 | \n",
+ " 1.880549e-06 | \n",
+ " 0.999699 | \n",
+ " 0 | \n",
+ "
\n",
+ " \n",
+ " | 618649 | \n",
+ " 0.623019 | \n",
+ " 0.136899 | \n",
+ " 0.001258 | \n",
+ " 0.621381 | \n",
+ " 0.136895 | \n",
+ " 0.624624 | \n",
+ " 5.809254e-07 | \n",
+ " 0.998845 | \n",
+ " 0 | \n",
+ "
\n",
+ " \n",
+ " | 435954 | \n",
+ " 0.464794 | \n",
+ " 0.145921 | \n",
+ " 0.000925 | \n",
+ " 0.463041 | \n",
+ " 0.145919 | \n",
+ " 0.463736 | \n",
+ " 1.695287e-06 | \n",
+ " 0.999513 | \n",
+ " 0 | \n",
+ "
\n",
+ " \n",
+ " | 390646 | \n",
+ " 0.594795 | \n",
+ " 0.138235 | \n",
+ " 0.001199 | \n",
+ " 0.593417 | \n",
+ " 0.138231 | \n",
+ " 0.596207 | \n",
+ " 6.463547e-06 | \n",
+ " 0.999962 | \n",
+ " 0 | \n",
+ "
\n",
+ " \n",
+ " | ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ "
\n",
+ " \n",
+ " | 598582 | \n",
+ " 0.512237 | \n",
+ " 0.142787 | \n",
+ " 0.001024 | \n",
+ " 0.510245 | \n",
+ " 0.142784 | \n",
+ " 0.511695 | \n",
+ " 5.984834e-07 | \n",
+ " 0.998902 | \n",
+ " 0 | \n",
+ "
\n",
+ " \n",
+ " | 395666 | \n",
+ " 0.374331 | \n",
+ " 0.153640 | \n",
+ " 0.000738 | \n",
+ " 0.372343 | \n",
+ " 0.153639 | \n",
+ " 0.371605 | \n",
+ " 1.730543e-06 | \n",
+ " 0.999638 | \n",
+ " 0 | \n",
+ "
\n",
+ " \n",
+ " | 459565 | \n",
+ " 0.513986 | \n",
+ " 0.142663 | \n",
+ " 0.001028 | \n",
+ " 0.512319 | \n",
+ " 0.142660 | \n",
+ " 0.513803 | \n",
+ " 3.197008e-06 | \n",
+ " 0.999831 | \n",
+ " 0 | \n",
+ "
\n",
+ " \n",
+ " | 301794 | \n",
+ " 0.415823 | \n",
+ " 0.149779 | \n",
+ " 0.000823 | \n",
+ " 0.413985 | \n",
+ " 0.149777 | \n",
+ " 0.413901 | \n",
+ " 3.439337e-06 | \n",
+ " 0.999885 | \n",
+ " 0 | \n",
+ "
\n",
+ " \n",
+ " | 250138 | \n",
+ " 0.510507 | \n",
+ " 0.142898 | \n",
+ " 0.001021 | \n",
+ " 0.508943 | \n",
+ " 0.142895 | \n",
+ " 0.510372 | \n",
+ " 5.957527e-06 | \n",
+ " 0.999955 | \n",
+ " 0 | \n",
+ "
\n",
+ " \n",
+ "
\n",
+ "
431886 rows × 9 columns
\n",
+ "
"
+ ],
+ "text/plain": [
+ " H O Ba Cl S Sr \\\n",
+ "478350 0.557224 0.140163 0.001119 0.555750 0.140160 0.557932 \n",
+ "366736 0.354555 0.155748 0.000697 0.352515 0.155747 0.351468 \n",
+ "618649 0.623019 0.136899 0.001258 0.621381 0.136895 0.624624 \n",
+ "435954 0.464794 0.145921 0.000925 0.463041 0.145919 0.463736 \n",
+ "390646 0.594795 0.138235 0.001199 0.593417 0.138231 0.596207 \n",
+ "... ... ... ... ... ... ... \n",
+ "598582 0.512237 0.142787 0.001024 0.510245 0.142784 0.511695 \n",
+ "395666 0.374331 0.153640 0.000738 0.372343 0.153639 0.371605 \n",
+ "459565 0.513986 0.142663 0.001028 0.512319 0.142660 0.513803 \n",
+ "301794 0.415823 0.149779 0.000823 0.413985 0.149777 0.413901 \n",
+ "250138 0.510507 0.142898 0.001021 0.508943 0.142895 0.510372 \n",
+ "\n",
+ " Barite Celestite Class \n",
+ "478350 3.017125e-06 0.999778 0 \n",
+ "366736 1.880549e-06 0.999699 0 \n",
+ "618649 5.809254e-07 0.998845 0 \n",
+ "435954 1.695287e-06 0.999513 0 \n",
+ "390646 6.463547e-06 0.999962 0 \n",
+ "... ... ... ... \n",
+ "598582 5.984834e-07 0.998902 0 \n",
+ "395666 1.730543e-06 0.999638 0 \n",
+ "459565 3.197008e-06 0.999831 0 \n",
+ "301794 3.439337e-06 0.999885 0 \n",
+ "250138 5.957527e-06 0.999955 0 \n",
+ "\n",
+ "[431886 rows x 9 columns]"
+ ]
+ },
+ "execution_count": 14,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "X_train"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 15,
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "Class column found\n"
+ ]
+ },
+ {
+ "data": {
+ "text/html": [
+ "\n",
+ "\n",
+ "
\n",
+ " \n",
+ " \n",
+ " | \n",
+ " H | \n",
+ " O | \n",
+ " Ba | \n",
+ " Cl | \n",
+ " S | \n",
+ " Sr | \n",
+ " Barite | \n",
+ " Celestite | \n",
+ " Class | \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " | 0 | \n",
+ " 111.012434 | \n",
+ " 55.506567 | \n",
+ " 0.000023 | \n",
+ " 0.064477 | \n",
+ " 0.000088 | \n",
+ " 0.032303 | \n",
+ " 0.001001 | \n",
+ " 1.000674 | \n",
+ " 0.0 | \n",
+ "
\n",
+ " \n",
+ " | 1 | \n",
+ " 111.012434 | \n",
+ " 55.506606 | \n",
+ " 0.000014 | \n",
+ " 0.040898 | \n",
+ " 0.000097 | \n",
+ " 0.020532 | \n",
+ " 0.001000 | \n",
+ " 1.000634 | \n",
+ " 0.0 | \n",
+ "
\n",
+ " \n",
+ " | 2 | \n",
+ " 111.012434 | \n",
+ " 55.506559 | \n",
+ " 0.000026 | \n",
+ " 0.072091 | \n",
+ " 0.000086 | \n",
+ " 0.036106 | \n",
+ " 0.001000 | \n",
+ " 1.000204 | \n",
+ " NaN | \n",
+ "
\n",
+ " \n",
+ " | 3 | \n",
+ " 111.012434 | \n",
+ " 55.506581 | \n",
+ " 0.000019 | \n",
+ " 0.053721 | \n",
+ " 0.000091 | \n",
+ " 0.026933 | \n",
+ " 0.001000 | \n",
+ " 1.000540 | \n",
+ " 0.0 | \n",
+ "
\n",
+ " \n",
+ " | 4 | \n",
+ " 111.012434 | \n",
+ " 55.506562 | \n",
+ " 0.000024 | \n",
+ " 0.068847 | \n",
+ " 0.000086 | \n",
+ " 0.034485 | \n",
+ " 0.001003 | \n",
+ " 1.000766 | \n",
+ " NaN | \n",
+ "
\n",
+ " \n",
+ " | ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ "
\n",
+ " \n",
+ " | 568516 | \n",
+ " NaN | \n",
+ " NaN | \n",
+ " NaN | \n",
+ " NaN | \n",
+ " NaN | \n",
+ " NaN | \n",
+ " NaN | \n",
+ " NaN | \n",
+ " 0.0 | \n",
+ "
\n",
+ " \n",
+ " | 454744 | \n",
+ " NaN | \n",
+ " NaN | \n",
+ " NaN | \n",
+ " NaN | \n",
+ " NaN | \n",
+ " NaN | \n",
+ " NaN | \n",
+ " NaN | \n",
+ " 0.0 | \n",
+ "
\n",
+ " \n",
+ " | 583730 | \n",
+ " NaN | \n",
+ " NaN | \n",
+ " NaN | \n",
+ " NaN | \n",
+ " NaN | \n",
+ " NaN | \n",
+ " NaN | \n",
+ " NaN | \n",
+ " 0.0 | \n",
+ "
\n",
+ " \n",
+ " | 598582 | \n",
+ " NaN | \n",
+ " NaN | \n",
+ " NaN | \n",
+ " NaN | \n",
+ " NaN | \n",
+ " NaN | \n",
+ " NaN | \n",
+ " NaN | \n",
+ " 0.0 | \n",
+ "
\n",
+ " \n",
+ " | 459565 | \n",
+ " NaN | \n",
+ " NaN | \n",
+ " NaN | \n",
+ " NaN | \n",
+ " NaN | \n",
+ " NaN | \n",
+ " NaN | \n",
+ " NaN | \n",
+ " 0.0 | \n",
+ "
\n",
+ " \n",
+ "
\n",
+ "
564481 rows × 9 columns
\n",
+ "
"
+ ],
+ "text/plain": [
+ " H O Ba Cl S Sr \\\n",
+ "0 111.012434 55.506567 0.000023 0.064477 0.000088 0.032303 \n",
+ "1 111.012434 55.506606 0.000014 0.040898 0.000097 0.020532 \n",
+ "2 111.012434 55.506559 0.000026 0.072091 0.000086 0.036106 \n",
+ "3 111.012434 55.506581 0.000019 0.053721 0.000091 0.026933 \n",
+ "4 111.012434 55.506562 0.000024 0.068847 0.000086 0.034485 \n",
+ "... ... ... ... ... ... ... \n",
+ "568516 NaN NaN NaN NaN NaN NaN \n",
+ "454744 NaN NaN NaN NaN NaN NaN \n",
+ "583730 NaN NaN NaN NaN NaN NaN \n",
+ "598582 NaN NaN NaN NaN NaN NaN \n",
+ "459565 NaN NaN NaN NaN NaN NaN \n",
+ "\n",
+ " Barite Celestite Class \n",
+ "0 0.001001 1.000674 0.0 \n",
+ "1 0.001000 1.000634 0.0 \n",
+ "2 0.001000 1.000204 NaN \n",
+ "3 0.001000 1.000540 0.0 \n",
+ "4 0.001003 1.000766 NaN \n",
+ "... ... ... ... \n",
+ "568516 NaN NaN 0.0 \n",
+ "454744 NaN NaN 0.0 \n",
+ "583730 NaN NaN 0.0 \n",
+ "598582 NaN NaN 0.0 \n",
+ "459565 NaN NaN 0.0 \n",
+ "\n",
+ "[564481 rows x 9 columns]"
+ ]
+ },
+ "execution_count": 15,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "preprocess.scale_inverse(X_train)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 54,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "\n",
+ "\n",
+ "
\n",
+ " \n",
+ " \n",
+ " | \n",
+ " H | \n",
+ " O | \n",
+ " Ba | \n",
+ " Cl | \n",
+ " S | \n",
+ " Sr | \n",
+ " Barite | \n",
+ " Celestite | \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " | 478350 | \n",
+ " -2.161861e+09 | \n",
+ " -22320.291390 | \n",
+ " 0.054836 | \n",
+ " 4.790208 | \n",
+ " 226.014098 | \n",
+ " 9.777370 | \n",
+ " -0.002006 | \n",
+ " 0.997997 | \n",
+ "
\n",
+ " \n",
+ " | 366736 | \n",
+ " -2.165828e+09 | \n",
+ " -22314.008668 | \n",
+ " 0.034164 | \n",
+ " 3.038456 | \n",
+ " 251.149335 | \n",
+ " 6.156027 | \n",
+ " -0.002008 | \n",
+ " 0.997838 | \n",
+ "
\n",
+ " \n",
+ " | 618649 | \n",
+ " -2.160573e+09 | \n",
+ " -22321.607211 | \n",
+ " 0.061643 | \n",
+ " 5.355909 | \n",
+ " 220.749375 | \n",
+ " 10.947146 | \n",
+ " -0.002010 | \n",
+ " 0.996140 | \n",
+ "
\n",
+ " \n",
+ " | 435954 | \n",
+ " -2.163670e+09 | \n",
+ " -22317.970216 | \n",
+ " 0.045325 | \n",
+ " 3.991119 | \n",
+ " 235.300799 | \n",
+ " 8.125190 | \n",
+ " -0.002008 | \n",
+ " 0.997469 | \n",
+ "
\n",
+ " \n",
+ " | 390646 | \n",
+ " -2.161125e+09 | \n",
+ " -22321.068771 | \n",
+ " 0.058736 | \n",
+ " 5.114874 | \n",
+ " 222.903752 | \n",
+ " 10.448716 | \n",
+ " -0.001999 | \n",
+ " 0.998363 | \n",
+ "
\n",
+ " \n",
+ " | ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ "
\n",
+ " \n",
+ " | 598582 | \n",
+ " -2.162741e+09 | \n",
+ " -22319.233713 | \n",
+ " 0.050153 | \n",
+ " 4.397988 | \n",
+ " 230.245785 | \n",
+ " 8.966387 | \n",
+ " -0.002010 | \n",
+ " 0.996254 | \n",
+ "
\n",
+ " \n",
+ " | 395666 | \n",
+ " -2.165440e+09 | \n",
+ " -22314.858446 | \n",
+ " 0.036150 | \n",
+ " 3.209360 | \n",
+ " 247.749808 | \n",
+ " 6.509223 | \n",
+ " -0.002008 | \n",
+ " 0.997717 | \n",
+ "
\n",
+ " \n",
+ " | 459565 | \n",
+ " -2.162707e+09 | \n",
+ " -22319.283591 | \n",
+ " 0.050365 | \n",
+ " 4.415867 | \n",
+ " 230.046236 | \n",
+ " 9.003354 | \n",
+ " -0.002005 | \n",
+ " 0.998102 | \n",
+ "
\n",
+ " \n",
+ " | 301794 | \n",
+ " -2.164628e+09 | \n",
+ " -22316.415113 | \n",
+ " 0.040346 | \n",
+ " 3.568289 | \n",
+ " 241.522260 | \n",
+ " 7.251102 | \n",
+ " -0.002005 | \n",
+ " 0.998208 | \n",
+ "
\n",
+ " \n",
+ " | 250138 | \n",
+ " -2.162775e+09 | \n",
+ " -22319.188882 | \n",
+ " 0.050020 | \n",
+ " 4.386766 | \n",
+ " 230.425147 | \n",
+ " 8.943191 | \n",
+ " -0.002000 | \n",
+ " 0.998349 | \n",
+ "
\n",
+ " \n",
+ "
\n",
+ "
431886 rows × 8 columns
\n",
+ "
"
+ ],
+ "text/plain": [
+ " H O Ba Cl S Sr \\\n",
+ "478350 -2.161861e+09 -22320.291390 0.054836 4.790208 226.014098 9.777370 \n",
+ "366736 -2.165828e+09 -22314.008668 0.034164 3.038456 251.149335 6.156027 \n",
+ "618649 -2.160573e+09 -22321.607211 0.061643 5.355909 220.749375 10.947146 \n",
+ "435954 -2.163670e+09 -22317.970216 0.045325 3.991119 235.300799 8.125190 \n",
+ "390646 -2.161125e+09 -22321.068771 0.058736 5.114874 222.903752 10.448716 \n",
+ "... ... ... ... ... ... ... \n",
+ "598582 -2.162741e+09 -22319.233713 0.050153 4.397988 230.245785 8.966387 \n",
+ "395666 -2.165440e+09 -22314.858446 0.036150 3.209360 247.749808 6.509223 \n",
+ "459565 -2.162707e+09 -22319.283591 0.050365 4.415867 230.046236 9.003354 \n",
+ "301794 -2.164628e+09 -22316.415113 0.040346 3.568289 241.522260 7.251102 \n",
+ "250138 -2.162775e+09 -22319.188882 0.050020 4.386766 230.425147 8.943191 \n",
+ "\n",
+ " Barite Celestite \n",
+ "478350 -0.002006 0.997997 \n",
+ "366736 -0.002008 0.997838 \n",
+ "618649 -0.002010 0.996140 \n",
+ "435954 -0.002008 0.997469 \n",
+ "390646 -0.001999 0.998363 \n",
+ "... ... ... \n",
+ "598582 -0.002010 0.996254 \n",
+ "395666 -0.002008 0.997717 \n",
+ "459565 -0.002005 0.998102 \n",
+ "301794 -0.002005 0.998208 \n",
+ "250138 -0.002000 0.998349 \n",
+ "\n",
+ "[431886 rows x 8 columns]"
+ ]
+ },
+ "execution_count": 54,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "results_inverse"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 29,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "111.01243365971465"
+ ]
+ },
+ "execution_count": 29,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "df_design.loc[589946, \"H\"]"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 32,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "4.718498871295094"
+ ]
+ },
+ "execution_count": 32,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "np.log1p(111)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 31,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "336563 -1.0\n",
+ "354285 -1.0\n",
+ "435530 -1.0\n",
+ "628987 -1.0\n",
+ "118289 -1.0\n",
+ " ... \n",
+ "368446 -1.0\n",
+ "79409 -1.0\n",
+ "527845 -1.0\n",
+ "512874 -1.0\n",
+ "589946 -1.0\n",
+ "Name: H, Length: 453600, dtype: float64"
+ ]
+ },
+ "execution_count": 31,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "np.expm1(results_inverse[\"H\"])"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 22,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "\n",
+ "\n",
+ "
\n",
+ " \n",
+ " \n",
+ " | \n",
+ " H | \n",
+ " O | \n",
+ " Ba | \n",
+ " Cl | \n",
+ " S | \n",
+ " Sr | \n",
+ " Barite | \n",
+ " Celestite | \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " | 336563 | \n",
+ " -5.869538e+09 | \n",
+ " -88058.882645 | \n",
+ " 0.001342 | \n",
+ " 1.004960 | \n",
+ " 266.542724 | \n",
+ " 5.068195 | \n",
+ " -0.001429 | \n",
+ " 1.441588 | \n",
+ "
\n",
+ " \n",
+ " | 354285 | \n",
+ " -5.828789e+09 | \n",
+ " -88225.165400 | \n",
+ " 0.001602 | \n",
+ " 1.190561 | \n",
+ " 254.765439 | \n",
+ " 6.036488 | \n",
+ " -0.001429 | \n",
+ " 1.441725 | \n",
+ "
\n",
+ " \n",
+ " | 435530 | \n",
+ " -5.772645e+09 | \n",
+ " -88394.623588 | \n",
+ " 0.001965 | \n",
+ " 1.444481 | \n",
+ " 242.762760 | \n",
+ " 7.366351 | \n",
+ " -0.001429 | \n",
+ " 1.441571 | \n",
+ "
\n",
+ " \n",
+ " | 628987 | \n",
+ " -5.648861e+09 | \n",
+ " -88639.013486 | \n",
+ " 0.002780 | \n",
+ " 1.996571 | \n",
+ " 225.451322 | \n",
+ " 10.277376 | \n",
+ " -0.001429 | \n",
+ " 1.441465 | \n",
+ "
\n",
+ " \n",
+ " | 118289 | \n",
+ " -6.010781e+09 | \n",
+ " -86434.937962 | \n",
+ " 0.000465 | \n",
+ " 0.352152 | \n",
+ " 381.551364 | \n",
+ " 1.694147 | \n",
+ " -0.001430 | \n",
+ " 1.441650 | \n",
+ "
\n",
+ " \n",
+ " | ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ "
\n",
+ " \n",
+ " | 368446 | \n",
+ " -5.771538e+09 | \n",
+ " -88397.469420 | \n",
+ " 0.001973 | \n",
+ " 1.449608 | \n",
+ " 242.561186 | \n",
+ " 7.393257 | \n",
+ " -0.001428 | \n",
+ " 1.441701 | \n",
+ "
\n",
+ " \n",
+ " | 79409 | \n",
+ " -5.999915e+09 | \n",
+ " -86702.258273 | \n",
+ " 0.000527 | \n",
+ " 0.400695 | \n",
+ " 362.620297 | \n",
+ " 1.942555 | \n",
+ " -0.001429 | \n",
+ " 1.441677 | \n",
+ "
\n",
+ " \n",
+ " | 527845 | \n",
+ " -5.378014e+09 | \n",
+ " -89470.324171 | \n",
+ " 0.032076 | \n",
+ " 3.174978 | \n",
+ " 166.568829 | \n",
+ " 16.502590 | \n",
+ " 0.200593 | \n",
+ " 1.325815 | \n",
+ "
\n",
+ " \n",
+ " | 512874 | \n",
+ " -5.716136e+09 | \n",
+ " -88522.110180 | \n",
+ " 0.002335 | \n",
+ " 1.697977 | \n",
+ " 233.732459 | \n",
+ " 8.699688 | \n",
+ " -0.001430 | \n",
+ " 1.441145 | \n",
+ "
\n",
+ " \n",
+ " | 589946 | \n",
+ " -5.105040e+09 | \n",
+ " -91819.640470 | \n",
+ " 4.783127 | \n",
+ " 4.319467 | \n",
+ " 0.172592 | \n",
+ " 10.272858 | \n",
+ " 1.424595 | \n",
+ " 0.000000 | \n",
+ "
\n",
+ " \n",
+ "
\n",
+ "
453600 rows × 8 columns
\n",
+ "
"
+ ],
+ "text/plain": [
+ " H O Ba Cl S Sr \\\n",
+ "336563 -5.869538e+09 -88058.882645 0.001342 1.004960 266.542724 5.068195 \n",
+ "354285 -5.828789e+09 -88225.165400 0.001602 1.190561 254.765439 6.036488 \n",
+ "435530 -5.772645e+09 -88394.623588 0.001965 1.444481 242.762760 7.366351 \n",
+ "628987 -5.648861e+09 -88639.013486 0.002780 1.996571 225.451322 10.277376 \n",
+ "118289 -6.010781e+09 -86434.937962 0.000465 0.352152 381.551364 1.694147 \n",
+ "... ... ... ... ... ... ... \n",
+ "368446 -5.771538e+09 -88397.469420 0.001973 1.449608 242.561186 7.393257 \n",
+ "79409 -5.999915e+09 -86702.258273 0.000527 0.400695 362.620297 1.942555 \n",
+ "527845 -5.378014e+09 -89470.324171 0.032076 3.174978 166.568829 16.502590 \n",
+ "512874 -5.716136e+09 -88522.110180 0.002335 1.697977 233.732459 8.699688 \n",
+ "589946 -5.105040e+09 -91819.640470 4.783127 4.319467 0.172592 10.272858 \n",
+ "\n",
+ " Barite Celestite \n",
+ "336563 -0.001429 1.441588 \n",
+ "354285 -0.001429 1.441725 \n",
+ "435530 -0.001429 1.441571 \n",
+ "628987 -0.001429 1.441465 \n",
+ "118289 -0.001430 1.441650 \n",
+ "... ... ... \n",
+ "368446 -0.001428 1.441701 \n",
+ "79409 -0.001429 1.441677 \n",
+ "527845 0.200593 1.325815 \n",
+ "512874 -0.001430 1.441145 \n",
+ "589946 1.424595 0.000000 \n",
+ "\n",
+ "[453600 rows x 8 columns]"
+ ]
+ },
+ "execution_count": 22,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "results_inverse"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 21,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "\n",
+ "\n",
+ "
\n",
+ " \n",
+ " \n",
+ " | \n",
+ " H | \n",
+ " O | \n",
+ " Ba | \n",
+ " Cl | \n",
+ " S | \n",
+ " Sr | \n",
+ " Barite | \n",
+ " Celestite | \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " | 0 | \n",
+ " -1.0 | \n",
+ " -1.0 | \n",
+ " 0.001343 | \n",
+ " 1.731798 | \n",
+ " 5.728413e+115 | \n",
+ " 1.578873e+02 | \n",
+ " -0.001428 | \n",
+ " 3.227403 | \n",
+ "
\n",
+ " \n",
+ " | 1 | \n",
+ " -1.0 | \n",
+ " -1.0 | \n",
+ " 0.001604 | \n",
+ " 2.288925 | \n",
+ " 4.397687e+110 | \n",
+ " 4.174209e+02 | \n",
+ " -0.001428 | \n",
+ " 3.227981 | \n",
+ "
\n",
+ " \n",
+ " | 2 | \n",
+ " -1.0 | \n",
+ " -1.0 | \n",
+ " 0.001967 | \n",
+ " 3.239653 | \n",
+ " 2.694804e+105 | \n",
+ " 1.580850e+03 | \n",
+ " -0.001428 | \n",
+ " 3.227331 | \n",
+ "
\n",
+ " \n",
+ " | 3 | \n",
+ " -1.0 | \n",
+ " -1.0 | \n",
+ " 0.002784 | \n",
+ " 6.363765 | \n",
+ " 8.170811e+97 | \n",
+ " 2.906650e+04 | \n",
+ " -0.001428 | \n",
+ " 3.226885 | \n",
+ "
\n",
+ " \n",
+ " | 4 | \n",
+ " -1.0 | \n",
+ " -1.0 | \n",
+ " 0.000465 | \n",
+ " 0.422125 | \n",
+ " 5.077526e+165 | \n",
+ " 4.441999e+00 | \n",
+ " -0.001429 | \n",
+ " 3.227666 | \n",
+ "
\n",
+ " \n",
+ " | ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ "
\n",
+ " \n",
+ " | 453595 | \n",
+ " -1.0 | \n",
+ " -1.0 | \n",
+ " 0.001975 | \n",
+ " 3.261442 | \n",
+ " 2.202848e+105 | \n",
+ " 1.623991e+03 | \n",
+ " -0.001427 | \n",
+ " 3.227882 | \n",
+ "
\n",
+ " \n",
+ " | 453596 | \n",
+ " -1.0 | \n",
+ " -1.0 | \n",
+ " 0.000528 | \n",
+ " 0.492862 | \n",
+ " 3.047853e+157 | \n",
+ " 5.976555e+00 | \n",
+ " -0.001428 | \n",
+ " 3.227780 | \n",
+ "
\n",
+ " \n",
+ " | 453597 | \n",
+ " -1.0 | \n",
+ " -1.0 | \n",
+ " 0.032596 | \n",
+ " 22.926292 | \n",
+ " 2.187376e+72 | \n",
+ " 1.468872e+07 | \n",
+ " 0.222128 | \n",
+ " 2.765252 | \n",
+ "
\n",
+ " \n",
+ " | 453598 | \n",
+ " -1.0 | \n",
+ " -1.0 | \n",
+ " 0.002338 | \n",
+ " 4.462883 | \n",
+ " 3.226392e+101 | \n",
+ " 6.000041e+03 | \n",
+ " -0.001429 | \n",
+ " 3.225532 | \n",
+ "
\n",
+ " \n",
+ " | 453599 | \n",
+ " -1.0 | \n",
+ " -1.0 | \n",
+ " 118.477362 | \n",
+ " 74.148597 | \n",
+ " 1.883815e-01 | \n",
+ " 2.893546e+04 | \n",
+ " 3.156173 | \n",
+ " 0.000000 | \n",
+ "
\n",
+ " \n",
+ "
\n",
+ "
453600 rows × 8 columns
\n",
+ "
"
+ ],
+ "text/plain": [
+ " H O Ba Cl S Sr \\\n",
+ "0 -1.0 -1.0 0.001343 1.731798 5.728413e+115 1.578873e+02 \n",
+ "1 -1.0 -1.0 0.001604 2.288925 4.397687e+110 4.174209e+02 \n",
+ "2 -1.0 -1.0 0.001967 3.239653 2.694804e+105 1.580850e+03 \n",
+ "3 -1.0 -1.0 0.002784 6.363765 8.170811e+97 2.906650e+04 \n",
+ "4 -1.0 -1.0 0.000465 0.422125 5.077526e+165 4.441999e+00 \n",
+ "... ... ... ... ... ... ... \n",
+ "453595 -1.0 -1.0 0.001975 3.261442 2.202848e+105 1.623991e+03 \n",
+ "453596 -1.0 -1.0 0.000528 0.492862 3.047853e+157 5.976555e+00 \n",
+ "453597 -1.0 -1.0 0.032596 22.926292 2.187376e+72 1.468872e+07 \n",
+ "453598 -1.0 -1.0 0.002338 4.462883 3.226392e+101 6.000041e+03 \n",
+ "453599 -1.0 -1.0 118.477362 74.148597 1.883815e-01 2.893546e+04 \n",
+ "\n",
+ " Barite Celestite \n",
+ "0 -0.001428 3.227403 \n",
+ "1 -0.001428 3.227981 \n",
+ "2 -0.001428 3.227331 \n",
+ "3 -0.001428 3.226885 \n",
+ "4 -0.001429 3.227666 \n",
+ "... ... ... \n",
+ "453595 -0.001427 3.227882 \n",
+ "453596 -0.001428 3.227780 \n",
+ "453597 0.222128 2.765252 \n",
+ "453598 -0.001429 3.225532 \n",
+ "453599 3.156173 0.000000 \n",
+ "\n",
+ "[453600 rows x 8 columns]"
+ ]
+ },
+ "execution_count": 21,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "pd.DataFrame(tf.math.expm1(results_inverse), columns = X.columns[:-1])"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 7,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "\n",
+ "\n",
+ "
\n",
+ " \n",
+ " \n",
+ " | \n",
+ " 0 | \n",
+ " 1 | \n",
+ " 2 | \n",
+ " 3 | \n",
+ " 4 | \n",
+ " 5 | \n",
+ " 6 | \n",
+ " 7 | \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " | 0 | \n",
+ " 4.71861 | \n",
+ " 4.034358 | \n",
+ " 0.000011 | \n",
+ " 0.032582 | \n",
+ " 1.027002e-04 | \n",
+ " 0.016514 | \n",
+ " 0.001000 | \n",
+ " 0.693400 | \n",
+ "
\n",
+ " \n",
+ " | 1 | \n",
+ " 4.71861 | \n",
+ " 4.034358 | \n",
+ " 0.000014 | \n",
+ " 0.038600 | \n",
+ " 9.816560e-05 | \n",
+ " 0.019569 | \n",
+ " 0.001000 | \n",
+ " 0.693466 | \n",
+ "
\n",
+ " \n",
+ " | 2 | \n",
+ " 4.71861 | \n",
+ " 4.034357 | \n",
+ " 0.000017 | \n",
+ " 0.046832 | \n",
+ " 9.354418e-05 | \n",
+ " 0.023765 | \n",
+ " 0.001000 | \n",
+ " 0.693392 | \n",
+ "
\n",
+ " \n",
+ " | 3 | \n",
+ " 4.71861 | \n",
+ " 4.034357 | \n",
+ " 0.000024 | \n",
+ " 0.064732 | \n",
+ " 8.687873e-05 | \n",
+ " 0.032951 | \n",
+ " 0.001000 | \n",
+ " 0.693341 | \n",
+ "
\n",
+ " \n",
+ " | 4 | \n",
+ " 4.71861 | \n",
+ " 4.034361 | \n",
+ " 0.000004 | \n",
+ " 0.011417 | \n",
+ " 1.469822e-04 | \n",
+ " 0.005867 | \n",
+ " 0.001000 | \n",
+ " 0.693430 | \n",
+ "
\n",
+ " \n",
+ " | ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ "
\n",
+ " \n",
+ " | 453595 | \n",
+ " 4.71861 | \n",
+ " 4.034357 | \n",
+ " 0.000017 | \n",
+ " 0.046998 | \n",
+ " 9.346657e-05 | \n",
+ " 0.023850 | \n",
+ " 0.001000 | \n",
+ " 0.693454 | \n",
+ "
\n",
+ " \n",
+ " | 453596 | \n",
+ " 4.71861 | \n",
+ " 4.034361 | \n",
+ " 0.000005 | \n",
+ " 0.012991 | \n",
+ " 1.396932e-04 | \n",
+ " 0.006651 | \n",
+ " 0.001000 | \n",
+ " 0.693443 | \n",
+ "
\n",
+ " \n",
+ " | 453597 | \n",
+ " 4.71861 | \n",
+ " 4.034355 | \n",
+ " 0.000274 | \n",
+ " 0.102937 | \n",
+ " 6.420708e-05 | \n",
+ " 0.052594 | \n",
+ " 0.099533 | \n",
+ " 0.637713 | \n",
+ "
\n",
+ " \n",
+ " | 453598 | \n",
+ " 4.71861 | \n",
+ " 4.034357 | \n",
+ " 0.000020 | \n",
+ " 0.055051 | \n",
+ " 9.006723e-05 | \n",
+ " 0.027972 | \n",
+ " 0.000999 | \n",
+ " 0.693187 | \n",
+ "
\n",
+ " \n",
+ " | 453599 | \n",
+ " 4.71861 | \n",
+ " 4.034351 | \n",
+ " 0.040832 | \n",
+ " 0.140043 | \n",
+ " 1.392182e-07 | \n",
+ " 0.032936 | \n",
+ " 0.696523 | \n",
+ " 0.000000 | \n",
+ "
\n",
+ " \n",
+ "
\n",
+ "
453600 rows × 8 columns
\n",
+ "
"
+ ],
+ "text/plain": [
+ " 0 1 2 3 4 5 \\\n",
+ "0 4.71861 4.034358 0.000011 0.032582 1.027002e-04 0.016514 \n",
+ "1 4.71861 4.034358 0.000014 0.038600 9.816560e-05 0.019569 \n",
+ "2 4.71861 4.034357 0.000017 0.046832 9.354418e-05 0.023765 \n",
+ "3 4.71861 4.034357 0.000024 0.064732 8.687873e-05 0.032951 \n",
+ "4 4.71861 4.034361 0.000004 0.011417 1.469822e-04 0.005867 \n",
+ "... ... ... ... ... ... ... \n",
+ "453595 4.71861 4.034357 0.000017 0.046998 9.346657e-05 0.023850 \n",
+ "453596 4.71861 4.034361 0.000005 0.012991 1.396932e-04 0.006651 \n",
+ "453597 4.71861 4.034355 0.000274 0.102937 6.420708e-05 0.052594 \n",
+ "453598 4.71861 4.034357 0.000020 0.055051 9.006723e-05 0.027972 \n",
+ "453599 4.71861 4.034351 0.040832 0.140043 1.392182e-07 0.032936 \n",
+ "\n",
+ " 6 7 \n",
+ "0 0.001000 0.693400 \n",
+ "1 0.001000 0.693466 \n",
+ "2 0.001000 0.693392 \n",
+ "3 0.001000 0.693341 \n",
+ "4 0.001000 0.693430 \n",
+ "... ... ... \n",
+ "453595 0.001000 0.693454 \n",
+ "453596 0.001000 0.693443 \n",
+ "453597 0.099533 0.637713 \n",
+ "453598 0.000999 0.693187 \n",
+ "453599 0.696523 0.000000 \n",
+ "\n",
+ "[453600 rows x 8 columns]"
+ ]
+ },
+ "execution_count": 7,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "pd.DataFrame(preprocess.scaler_X.inverse_transform(X_train.loc[:, X.columns != \"Class\"]))"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 8,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "image/png": "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CofDmjFjhrxer6qrq+1tvb292rdvnxYsWCBJSktLU3R0tCPT3t6ulpYWO5Oenq5gMKhDhw7ZmYMHDyoYDDoyLS0tam9vtzNVVVXyeDxKS0uzM/v373c8Ul9VVSWfz6fp06df7WEDAIBxYERF6Gtf+5pef/11tba2qrm5WU888YT27t2rpUuXKiIiQoWFhdq4caMqKirU0tKi/Px83XzzzcrLy5MkWZal5cuXq7i4WHv27FFjY6MeeeQRzZkzRwsXLpQkzZo1S4sXL1ZBQYHq6upUV1engoIC5eTkaObMmZKkrKwszZ49W36/X42NjdqzZ49KSkpUUFBgX8HJy8uTx+NRfn6+WlpaVFFRoY0bN6qoqOgjv6oDAADuEDWS8KlTp+T3+9Xe3i7LsnTnnXeqsrJSmZmZkqTHH39cPT09WrFihQKBgObNm6eqqirFx8fb+3j22WcVFRWlhx56SD09Pbr//vv14osvasKECXZm+/btWrNmjf102ZIlS7R161Z7+4QJE7Rr1y6tWLFCd999t2JjY5WXl6fNmzfbGcuyVF1drZUrV2ru3LlKTExUUVGRioqKrmymAADAuBNhDD9qeSihUEiWZSkYDI7K/ULT1+5yvG7dlH3NPwMAALcZ7vmb3zUGAABciyIEAABciyIEAABciyIEAABciyIEAABciyIEAABciyIEAABciyIEAABciyIEAABciyIEAABciyIEAABciyIEAABciyIEAABciyIEAABciyIEAABciyIEAABciyIEAABciyIEAABciyIEAABciyIEAABciyIEAABciyIEAABciyIEAABciyIEAABciyIEAABciyIEAABciyIEAABciyIEAABciyIEAABciyIEAABca0RFqLS0VJ/5zGcUHx+v5ORkfeELX9Bvf/tbRyY/P18RERGOZf78+Y5MOBzW6tWrlZSUpLi4OC1ZskTHjx93ZAKBgPx+vyzLkmVZ8vv96urqcmTa2tqUm5uruLg4JSUlac2aNert7XVkmpublZGRodjYWE2ePFkbNmyQMWYkhw0AAMapERWhffv2aeXKlaqrq1N1dbU+/PBDZWVlqbu725FbvHix2tvb7WX37t2O7YWFhaqoqFB5eblqamp07tw55eTkqL+/387k5eWpqalJlZWVqqysVFNTk/x+v729v79f2dnZ6u7uVk1NjcrLy7Vz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e3t7tW/fPi1YsECSlJaWpujoaEemvb1dLS0tdiY9PV3BYFCHDh2yMwcPHlQwGHRkWlpa1N7ebmeqqqrk8XiUlpZ22fF6PB4lJCQ4FgAAMD5d86/GSkpKlJubq49//OPq7OzUN77xDYVCIS1btkwREREqLCzUxo0bdfvtt+v222/Xxo0bdfPNNysvL0+SZFmWli9fruLiYt1yyy2aOHGiSkpKNGfOHC1cuFCSNGvWLC1evFgFBQX63ve+J0n6yle+opycHM2cOVOSlJWVpdmzZ8vv9+ub3/ym3n//fZWUlKigoIByAwAAJI1CETp+/Lj+4R/+Qe+9955uvfVWzZ8/X3V1dZo2bZok6fHHH1dPT49WrFihQCCgefPmqaqqSvHx8fY+nn32WUVFRemhhx5ST0+P7r//fr344ouaMGGCndm+fbvWrFljP122ZMkSbd261d4+YcIE7dq1SytWrNDdd9+t2NhY5eXlafPmzdf6kAEAwBgVYYwxN3oQf85CoZAsy1IwGByVK0nT1+5yvG7dlH3NPwMAALcZ7vmb3zUGAABciyIEAABciyIEAABciyIEAABciyIEAABciyIEAABciyIEAABciyIEAABciyIEAABciyIEAABciyIEAABciyIEAABciyIEAABciyIEAABciyIEAABciyIEAABciyIEAABciyIEAABciyIEAABciyIEAABciyIEAABciyIEAABciyIEAABciyIEAABcK+pGDwAAALjH9LW7HK9bN2XfoJH8AVeEAACAa1GEAACAa1GEAACAa1GEAACAa1GEAACAa1GEAACAa7miCG3btk0zZszQTTfdpLS0NL3++us3ekgAAODPwLgvQq+88ooKCwv1xBNPqLGxUffcc48eeOABtbW13eihAQCAG2zcF6GysjItX75cX/7ylzVr1ix961vf0tSpU/Xcc8/d6KEBAIAbbFz/ZOne3l41NDRo7dq1jvVZWVk6cODAJd8TDocVDoft18FgUJIUCoVGZYwD4Q8crz/+L//zke9peWrRqIwFAIBrKfXJ//3IzGidXy/s1xgzZG5cF6H33ntP/f39SklJcaxPSUlRR0fHJd9TWlqqp556atD6qVOnjsoYr4T1rRs9AgAAro3RPqedPXtWlmVddvu4LkIXREREOF4bYwatu2DdunUqKiqyXw8MDOj999/XLbfcctn3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",
+ "text/plain": [
+ ""
]
},
"metadata": {},
@@ -168,16 +3650,44 @@
}
],
"source": [
- "timestep=251\n",
- "# plt.imshow(np.array(X[\"Barite\"][(timestep*2500):(timestep*2500+2500)]).reshape(50,50), origin='lower')\n",
+ "_ = plt.hist(X_train[\"Barite\"], bins = 100)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 9,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "# timestep=251\n",
+ "# plt.figure(dpi=150)\n",
+ "# plt.imshow(np.array(X[\"Barite\"][(timestep*2500):(timestep*2500+2500)]).reshape(50,50), origin='lower', cmap='viridis')\n",
+ "# plt.colorbar(label=\"Barite-Konzentration\")\n",
+ "# plt.title(f\"Barite-Verteilung (last iteration)\")\n",
+ "# plt.savefig(\"/Users/hannessigner/Documents/Work/BMBF/GreenHPC2021UP/Treffen/2025-02-20-PERFACCT/Vorbereitung/images/barite_distribution_second_dataset.pdf\")\n",
+ "# plt.show()"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 10,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "image/png": "iVBORw0KGgoAAAANSUhEUgAAAjEAAAGdCAYAAADjWSL8AAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjAsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvlHJYcgAAAAlwSFlzAAAPYQAAD2EBqD+naQAAIN9JREFUeJzt3XtwlOX99/HPmsMS0mQlCexmdcXgLxVosMVgIwF/YAnBKqLjTIMFGdqiYkFkOZTDQ1W0ZSOowFQUC2UKBSFOtWmdDlVirSkYqRhNK4dCHU6hsI22cRMkzYnr+cOHnWcTDqK7JFfyfs3sH3vvdzfX7SWT99zsLg5jjBEAAIBlLuvoBQAAAHwRRAwAALASEQMAAKxExAAAACsRMQAAwEpEDAAAsBIRAwAArETEAAAAK8V39AJi5fTp0zp+/LhSUlLkcDg6ejkAAOBzMMaovr5eXq9Xl112/mstXTZijh8/Lp/P19HLAAAAX0B1dbWuvPLK88502YhJSUmR9Nl/hNTU1A5eDQAA+Dzq6urk8/nCv8fPp8tGzJm/QkpNTSViAACwzOd5Kwhv7AUAAFYiYgAAgJWIGAAAYCUiBgAAWImIAQAAViJiAACAlYgYAABgJSIGAABYiYgBAABWImIAAICViBgAAGAlIgYAAFiJiAEAAFYiYgAAgJXiO3oBtlpRdiDi/qzRX+2glQAA0D1xJQYAAFiJiAEAAFYiYgAAgJWIGAAAYCUiBgAAWOmiI+bPf/6zbr/9dnm9XjkcDv32t7+NeNwYo8WLF8vr9SopKUkjR47Unj17ImYaGxs1Y8YMZWRkKDk5WePGjdOxY8ciZmprazVp0iS5XC65XC5NmjRJn3zyyUWfIAAA6JouOmI+/fRTff3rX9eqVavO+viyZcu0fPlyrVq1Srt27ZLH49Ho0aNVX18fnvH7/SotLVVJSYl27NihkydPauzYsWptbQ3PTJgwQVVVVXr11Vf16quvqqqqSpMmTfoCpwgAALoihzHGfOEnOxwqLS3VnXfeKemzqzBer1d+v1/z58+X9NlVF7fbraVLl2rq1KkKhULq3bu3Nm7cqPHjx0uSjh8/Lp/Pp61bt2rMmDHat2+fBg4cqJ07dyovL0+StHPnTg0dOlR///vfde21115wbXV1dXK5XAqFQkpNTf2ip3hOfE8MAADRdzG/v6P6nphDhw4pGAyqsLAwfMzpdGrEiBGqqKiQJFVWVqq5uTlixuv1KicnJzzz9ttvy+VyhQNGkm688Ua5XK7wTFuNjY2qq6uLuAEAgK4rqhETDAYlSW63O+K42+0OPxYMBpWYmKhevXqdd6ZPnz7tXr9Pnz7hmbaKi4vD759xuVzy+Xxf+nwAAEDnFZNPJzkcjoj7xph2x9pqO3O2+fO9zsKFCxUKhcK36urqL7ByAABgi6hGjMfjkaR2V0tqamrCV2c8Ho+amppUW1t73pl//etf7V7/o48+aneV5wyn06nU1NSIGwAA6LqiGjFZWVnyeDwqKysLH2tqalJ5ebny8/MlSbm5uUpISIiYOXHihHbv3h2eGTp0qEKhkN55553wzF/+8heFQqHwDAAA6N4u+l+xPnnypD788MPw/UOHDqmqqkppaWm66qqr5Pf7FQgElJ2drezsbAUCAfXs2VMTJkyQJLlcLk2ZMkVz5sxRenq60tLSNHfuXA0aNEgFBQWSpAEDBuiWW27Rfffdp5///OeSpPvvv19jx479XJ9MAgAAXd9FR8y7776rm2++OXx/9uzZkqTJkydr/fr1mjdvnhoaGjRt2jTV1tYqLy9P27ZtU0pKSvg5K1asUHx8vIqKitTQ0KBRo0Zp/fr1iouLC8+88MILeuihh8KfYho3btw5v5sGAAB0P1/qe2I6M74nBgAA+3TY98QAAABcKkQMAACwEhEDAACsRMQAAAArETEAAMBKRAwAALASEQMAAKxExAAAACsRMQAAwEpEDAAAsBIRAwAArETEAAAAKxExAADASkQMAACwEhEDAACsRMQAAAArETEAAMBKRAwAALASEQMAAKxExAAAACsRMQAAwEpEDAAAsBIRAwAArETEAAAAKxExAADASkQMAACwEhEDAACsRMQAAAArETEAAMBKRAwAALASEQMAAKxExAAAACsRMQAAwEpEDAAAsBIRAwAArETEAAAAKxExAADASkQMAACwEhEDAACsRMQAAAArETEAAMBKRAwAALASEQMAAKxExAAAACsRMQAAwEpEDAAAsBIRAwAArETEAAAAKxExAADASkQMAACwEhEDAACsRMQAAAArETEAAMBKRAwAALASEQMAAKxExAAAACsRMQAAwEpRj5iWlhb9+Mc/VlZWlpKSktSvXz89/vjjOn36dHjGGKPFixfL6/UqKSlJI0eO1J49eyJep7GxUTNmzFBGRoaSk5M1btw4HTt2LNrLBQAAlop6xCxdulTPP/+8Vq1apX379mnZsmV68skn9cwzz4Rnli1bpuXLl2vVqlXatWuXPB6PRo8erfr6+vCM3+9XaWmpSkpKtGPHDp08eVJjx45Va2trtJcMAAAsFB/tF3z77bd1xx136LbbbpMkXX311dqyZYveffddSZ9dhVm5cqUWLVqku+66S5K0YcMGud1ubd68WVOnTlUoFNK6deu0ceNGFRQUSJI2bdokn8+n119/XWPGjIn2sgEAgGWifiVm+PDh+uMf/6gDBw5Ikv76179qx44duvXWWyVJhw4dUjAYVGFhYfg5TqdTI0aMUEVFhSSpsrJSzc3NETNer1c5OTnhmbYaGxtVV1cXcQMAAF1X1K/EzJ8/X6FQSP3791dcXJxaW1u1ZMkSffe735UkBYNBSZLb7Y54ntvt1pEjR8IziYmJ6tWrV7uZM89vq7i4WI899li0TwcAAHRSUb8S8+KLL2rTpk3avHmz3nvvPW3YsEFPPfWUNmzYEDHncDgi7htj2h1r63wzCxcuVCgUCt+qq6u/3IkAAIBOLepXYn70ox9pwYIFuvvuuyVJgwYN0pEjR1RcXKzJkyfL4/FI+uxqS2ZmZvh5NTU14aszHo9HTU1Nqq2tjbgaU1NTo/z8/LP+XKfTKafTGe3TAQAAnVTUr8ScOnVKl10W+bJxcXHhj1hnZWXJ4/GorKws/HhTU5PKy8vDgZKbm6uEhISImRMnTmj37t3njBgAANC9RP1KzO23364lS5boqquu0te+9jW9//77Wr58uX7wgx9I+uyvkfx+vwKBgLKzs5Wdna1AIKCePXtqwoQJkiSXy6UpU6Zozpw5Sk9PV1pamubOnatBgwaFP60EAAC6t6hHzDPPPKOHH35Y06ZNU01Njbxer6ZOnapHHnkkPDNv3jw1NDRo2rRpqq2tVV5enrZt26aUlJTwzIoVKxQfH6+ioiI1NDRo1KhRWr9+veLi4qK9ZAAAYCGHMcZ09CJioa6uTi6XS6FQSKmpqVF//RVlByLuzxr91aj/DAAAupuL+f3Nv50EAACsRMQAAAArETEAAMBKRAwAALASEQMAAKxExAAAACsRMQAAwEpEDAAAsBIRAwAArETEAAAAKxExAADASkQMAACwEhEDAACsRMQAAAArETEAAMBKRAwAALASEQMAAKxExAAAACsRMQAAwEpEDAAAsBIRAwAArETEAAAAKxExAADASkQMAACwEhEDAACsRMQAAAArETEAAMBKRAwAALASEQMAAKxExAAAACsRMQAAwEpEDAAAsBIRAwAArETEAAAAKxExAADASkQMAACwEhEDAACsRMQAAAArETEAAMBKRAwAALASEQMAAKxExAAAACsRMQAAwEpEDAAAsBIRAwAArETEAAAAKxExAADASkQMAACwEhEDAACsRMQAAAArETEAAMBKRAwAALASEQMAAKxExAAAACsRMQAAwEpEDAAAsBIRAwAArETEAAAAK8UkYv75z3/qnnvuUXp6unr27KlvfOMbqqysDD9ujNHixYvl9XqVlJSkkSNHas+ePRGv0djYqBkzZigjI0PJyckaN26cjh07FovlAgAAC0U9YmprazVs2DAlJCToD3/4g/bu3aunn35al19+eXhm2bJlWr58uVatWqVdu3bJ4/Fo9OjRqq+vD8/4/X6VlpaqpKREO3bs0MmTJzV27Fi1trZGe8kAAMBCDmOMieYLLliwQG+99Za2b99+1seNMfJ6vfL7/Zo/f76kz666uN1uLV26VFOnTlUoFFLv3r21ceNGjR8/XpJ0/Phx+Xw+bd26VWPGjLngOurq6uRyuRQKhZSamhq9E/x/VpQdiLg/a/RXo/4zAADobi7m93fUr8S88sorGjJkiL7zne+oT58+Gjx4sNauXRt+/NChQwoGgyosLAwfczqdGjFihCoqKiRJlZWVam5ujpjxer3KyckJz7TV2Niourq6iBsAAOi6oh4xBw8e1OrVq5Wdna3XXntNDzzwgB566CH96le/kiQFg0FJktvtjnie2+0OPxYMBpWYmKhevXqdc6at4uJiuVyu8M3n80X71AAAQCcS9Yg5ffq0rr/+egUCAQ0ePFhTp07Vfffdp9WrV0fMORyOiPvGmHbH2jrfzMKFCxUKhcK36urqL3ciAACgU4t6xGRmZmrgwIERxwYMGKCjR49KkjwejyS1u6JSU1MTvjrj8XjU1NSk2trac8605XQ6lZqaGnEDAABdV9QjZtiwYdq/f3/EsQMHDqhv376SpKysLHk8HpWVlYUfb2pqUnl5ufLz8yVJubm5SkhIiJg5ceKEdu/eHZ4BAADdW3y0X3DWrFnKz89XIBBQUVGR3nnnHa1Zs0Zr1qyR9NlfI/n9fgUCAWVnZys7O1uBQEA9e/bUhAkTJEkul0tTpkzRnDlzlJ6errS0NM2dO1eDBg1SQUFBtJcMAAAsFPWIueGGG1RaWqqFCxfq8ccfV1ZWllauXKmJEyeGZ+bNm6eGhgZNmzZNtbW1ysvL07Zt25SSkhKeWbFiheLj41VUVKSGhgaNGjVK69evV1xcXLSXDAAALBT174npLPieGAAA7NOh3xMDAABwKRAxAADASkQMAACwEhEDAACsRMQAAAArETEAAMBKRAwAALASEQMAAKxExAAAACsRMQAAwEpEDAAAsBIRAwAArETEAAAAKxExAADASkQMAACwEhEDAACsRMQAAAArETEAAMBKRAwAALASEQMAAKxExAAAACsRMQAAwEpEDAAAsBIRAwAArETEAAAAKxExAADASkQMAACwEhEDAACsRMQAAAArETEAAMBKRAwAALASEQMAAKxExAAAACsRMQAAwEpEDAAAsBIRAwAArETEAAAAKxExAADASkQMAACwEhEDAACsRMQAAAArETEAAMBKRAwAALASEQMAAKxExAAAACsRMQAAwEpEDAAAsBIRAwAArETEAAAAKxExAADASkQMAACwEhEDAACsRMQAAAArETEAAMBKRAwAALASEQMAAKxExAAAACvFPGKKi4vlcDjk9/vDx4wxWrx4sbxer5KSkjRy5Ejt2bMn4nmNjY2aMWOGMjIylJycrHHjxunYsWOxXi4AALBETCNm165dWrNmja677rqI48uWLdPy5cu1atUq7dq1Sx6PR6NHj1Z9fX14xu/3q7S0VCUlJdqxY4dOnjypsWPHqrW1NZZLBgAAlohZxJw8eVITJ07U2rVr1atXr/BxY4xWrlypRYsW6a677lJOTo42bNigU6dOafPmzZKkUCikdevW6emnn1ZBQYEGDx6sTZs26YMPPtDrr78eqyUDAACLxCxipk+frttuu00FBQURxw8dOqRgMKjCwsLwMafTqREjRqiiokKSVFlZqebm5ogZr9ernJyc8ExbjY2Nqquri7gBAICuKz4WL1pSUqL33ntPu3btavdYMBiUJLnd7ojjbrdbR44cCc8kJiZGXME5M3Pm+W0VFxfrsccei8byAQCABaJ+Jaa6ulozZ87Upk2b1KNHj3POORyOiPvGmHbH2jrfzMKFCxUKhcK36urqi188AACwRtQjprKyUjU1NcrNzVV8fLzi4+NVXl6un/3sZ4qPjw9fgWl7RaWmpib8mMfjUVNTk2pra88505bT6VRqamrEDQAAdF1Rj5hRo0bpgw8+UFVVVfg2ZMgQTZw4UVVVVerXr588Ho/KysrCz2lqalJ5ebny8/MlSbm5uUpISIiYOXHihHbv3h2eAQAA3VvU3xOTkpKinJyciGPJyclKT08PH/f7/QoEAsrOzlZ2drYCgYB69uypCRMmSJJcLpemTJmiOXPmKD09XWlpaZo7d64GDRrU7o3CAACge4rJG3svZN68eWpoaNC0adNUW1urvLw8bdu2TSkpKeGZFStWKD4+XkVFRWpoaNCoUaO0fv16xcXFdcSSAQBAJ+MwxpiOXkQs1NXVyeVyKRQKxeT9MSvKDkTcnzX6q1H/GQAAdDcX8/ubfzsJAABYiYgBAABWImIAAICViBgAAGAlIgYAAFiJiAEAAFYiYgAAgJWIGAAAYCUiBgAAWImIAQAAViJiAACAlYgYAABgJSIGAABYiYgBAABWImIAAICViBgAAGAlIgYAAFiJiAEAAFYiYgAAgJWIGAAAYCUiBgAAWImIAQAAViJiAACAlYgYAABgJSIGAABYiYgBAABWImIAAICViBgAAGAlIgYAAFiJiAEAAFYiYgAAgJWIGAAAYCUiBgAAWImIAQAAViJiAACAlYgYAABgJSIGAABYiYgBAABWImIAAICViBgAAGAlIgYAAFiJiAEAAFYiYgAAgJWIGAAAYCUiBgAAWImIAQAAViJiAACAlYgYAABgJSIGAABYiYgBAABWImIAAICViBgAAGAlIgYAAFiJiAEAAFYiYgAAgJWIGAAAYCUiBgAAWImIAQAAVop6xBQXF+uGG25QSkqK+vTpozvvvFP79++PmDHGaPHixfJ6vUpKStLIkSO1Z8+eiJnGxkbNmDFDGRkZSk5O1rhx43Ts2LFoLxcAAFgq6hFTXl6u6dOna+fOnSorK1NLS4sKCwv16aefhmeWLVum5cuXa9WqVdq1a5c8Ho9Gjx6t+vr68Izf71dpaalKSkq0Y8cOnTx5UmPHjlVra2u0lwwAACzkMMaYWP6Ajz76SH369FF5ebn+93//V8YYeb1e+f1+zZ8/X9JnV13cbreWLl2qqVOnKhQKqXfv3tq4caPGjx8vSTp+/Lh8Pp+2bt2qMWPGXPDn1tXVyeVyKRQKKTU1NerntaLsQMT9WaO/GvWfAQBAd3Mxv79j/p6YUCgkSUpLS5MkHTp0SMFgUIWFheEZp9OpESNGqKKiQpJUWVmp5ubmiBmv16ucnJzwTFuNjY2qq6uLuAEAgK4rphFjjNHs2bM1fPhw5eTkSJKCwaAkye12R8y63e7wY8FgUImJierVq9c5Z9oqLi6Wy+UK33w+X7RPBwAAdCIxjZgHH3xQf/vb37Rly5Z2jzkcjoj7xph2x9o638zChQsVCoXCt+rq6i++cAAA0OnFLGJmzJihV155RX/605905ZVXho97PB5JandFpaamJnx1xuPxqKmpSbW1teecacvpdCo1NTXiBgAAuq6oR4wxRg8++KB+85vf6I033lBWVlbE41lZWfJ4PCorKwsfa2pqUnl5ufLz8yVJubm5SkhIiJg5ceKEdu/eHZ4BAADdW3y0X3D69OnavHmzfve73yklJSV8xcXlcikpKUkOh0N+v1+BQEDZ2dnKzs5WIBBQz549NWHChPDslClTNGfOHKWnpystLU1z587VoEGDVFBQEO0lAwAAC0U9YlavXi1JGjlyZMTxX/7yl/re974nSZo3b54aGho0bdo01dbWKi8vT9u2bVNKSkp4fsWKFYqPj1dRUZEaGho0atQorV+/XnFxcdFeMgAAsFDMvyemo/A9MQAA2KdTfU8MAABALBAxAADASkQMAACwEhEDAACsRMQAAAArETEAAMBKRAwAALASEQMAAKxExAAAACsRMQAAwEpEDAAAsBIRAwAArETEAAAAKxExAADASkQMAACwEhEDAACsRMQAAAArETEAAMBKRAwAALASEQMAAKxExAAAACsRMQAAwEpEDAAAsBIRAwAArETEAAAAKxExAADASkQMAACwEhEDAACsRMQAAAArETEAAMBKRAwAALASEQMAAKxExAAAACsRMQAAwEpEDAAAsBIRAwAArETEAAAAKxExAADASkQMAACwEhEDAACsRMQAAAArETEAAMBKRAwAALASEQMAAKxExAAAACsRMQAAwEpEDAAAsBIRAwAArETEAAAAKxExAADASkQMAACwEhEDAACsRMQAAAArETEAAMBKRAwAALASEQMAAKxExAAAACt1+oh57rnnlJWVpR49eig3N1fbt2/v6CUBAIBOoFNHzIsvvii/369Fixbp/fff10033aRvf/vbOnr0aEcvDQAAdLBOHTHLly/XlClTdO+992rAgAFauXKlfD6fVq9e3dFLAwAAHSy+oxdwLk1NTaqsrNSCBQsijhcWFqqioqLdfGNjoxobG8P3Q6GQJKmuri4m6/vvpycj7hf/9r0LPmf6t/4nJmsBAKCrOPN72xhzwdlOGzEff/yxWltb5Xa7I4673W4Fg8F288XFxXrsscfaHff5fDFb48X6Px29AAAALFFfXy+Xy3XemU4bMWc4HI6I+8aYdsckaeHChZo9e3b4/unTp/Wf//xH6enpZ53/Murq6uTz+VRdXa3U1NSovjY+H/agc2AfOgf2oeOxB9FjjFF9fb28Xu8FZzttxGRkZCguLq7dVZeampp2V2ckyel0yul0Rhy7/PLLY7lEpaam8j9rB2MPOgf2oXNgHzoeexAdF7oCc0anfWNvYmKicnNzVVZWFnG8rKxM+fn5HbQqAADQWXTaKzGSNHv2bE2aNElDhgzR0KFDtWbNGh09elQPPPBARy8NAAB0sE4dMePHj9e///1vPf744zpx4oRycnK0detW9e3bt0PX5XQ69eijj7b76ytcOuxB58A+dA7sQ8djDzqGw3yezzABAAB0Mp32PTEAAADnQ8QAAAArETEAAMBKRAwAALASESPpueeeU1ZWlnr06KHc3Fxt3779vPPl5eXKzc1Vjx491K9fPz3//PPtZl5++WUNHDhQTqdTAwcOVGlpaayW32VEex/Wrl2rm266Sb169VKvXr1UUFCgd955J5anYL1Y/Fk4o6SkRA6HQ3feeWeUV931xGIfPvnkE02fPl2ZmZnq0aOHBgwYoK1bt8bqFLqEWOzDypUrde211yopKUk+n0+zZs3Sf//731idQtdnurmSkhKTkJBg1q5da/bu3WtmzpxpkpOTzZEjR846f/DgQdOzZ08zc+ZMs3fvXrN27VqTkJBgXnrppfBMRUWFiYuLM4FAwOzbt88EAgETHx9vdu7cealOyzqx2IcJEyaYZ5991rz//vtm37595vvf/75xuVzm2LFjl+q0rBKLPTjj8OHD5oorrjA33XSTueOOO2J8JnaLxT40NjaaIUOGmFtvvdXs2LHDHD582Gzfvt1UVVVdqtOyTiz2YdOmTcbpdJoXXnjBHDp0yLz22msmMzPT+P3+S3VaXU63j5hvfvOb5oEHHog41r9/f7NgwYKzzs+bN8/0798/4tjUqVPNjTfeGL5fVFRkbrnlloiZMWPGmLvvvjtKq+56YrEPbbW0tJiUlBSzYcOGL7/gLihWe9DS0mKGDRtmfvGLX5jJkycTMRcQi31YvXq16devn2lqaor+gruoWOzD9OnTzbe+9a2ImdmzZ5vhw4dHadXdT7f+66SmpiZVVlaqsLAw4nhhYaEqKirO+py333673fyYMWP07rvvqrm5+bwz53rN7i5W+9DWqVOn1NzcrLS0tOgsvAuJ5R48/vjj6t27t6ZMmRL9hXcxsdqHV155RUOHDtX06dPldruVk5OjQCCg1tbW2JyI5WK1D8OHD1dlZWX4r7UPHjyorVu36rbbbovBWXQPnfobe2Pt448/Vmtra7t/UNLtdrf7hyfPCAaDZ51vaWnRxx9/rMzMzHPOnOs1u7tY7UNbCxYs0BVXXKGCgoLoLb6LiNUevPXWW1q3bp2qqqpitfQuJVb7cPDgQb3xxhuaOHGitm7dqn/84x+aPn26Wlpa9Mgjj8TsfGwVq324++679dFHH2n48OEyxqilpUU//OEPtWDBgpidS1fXrSPmDIfDEXHfGNPu2IXm2x6/2NdEbPbhjGXLlmnLli1688031aNHjyistmuK5h7U19frnnvu0dq1a5WRkRH9xXZh0f6zcPr0afXp00dr1qxRXFyccnNzdfz4cT355JNEzHlEex/efPNNLVmyRM8995zy8vL04YcfaubMmcrMzNTDDz8c5dV3D906YjIyMhQXF9eurGtqatoV9Rkej+es8/Hx8UpPTz/vzLles7uL1T6c8dRTTykQCOj111/XddddF93FdxGx2IM9e/bo8OHDuv3228OPnz59WpIUHx+v/fv365prronymdgtVn8WMjMzlZCQoLi4uPDMgAEDFAwG1dTUpMTExCifid1itQ8PP/ywJk2apHvvvVeSNGjQIH366ae6//77tWjRIl12Wbd+h8cX0q3/iyUmJio3N1dlZWURx8vKypSfn3/W5wwdOrTd/LZt2zRkyBAlJCScd+Zcr9ndxWofJOnJJ5/UT37yE7366qsaMmRI9BffRcRiD/r3768PPvhAVVVV4du4ceN08803q6qqSj6fL2bnY6tY/VkYNmyYPvzww3BEStKBAweUmZlJwJxFrPbh1KlT7UIlLi5O5rMP2UTxDLqRjng3cWdy5mN069atM3v37jV+v98kJyebw4cPG2OMWbBggZk0aVJ4/szH6GbNmmX27t1r1q1b1+5jdG+99ZaJi4szTzzxhNm3b5954okn+Ij1BcRiH5YuXWoSExPNSy+9ZE6cOBG+1dfXX/Lzs0Es9qAtPp10YbHYh6NHj5qvfOUr5sEHHzT79+83v//9702fPn3MT3/600t+fraIxT48+uijJiUlxWzZssUcPHjQbNu2zVxzzTWmqKjokp9fV9HtI8YYY5599lnTt29fk5iYaK6//npTXl4efmzy5MlmxIgREfNvvvmmGTx4sElMTDRXX321Wb16dbvX/PWvf22uvfZak5CQYPr3729efvnlWJ+G9aK9D3379jWS2t0effTRS3A2dorFn4X/HxHz+cRiHyoqKkxeXp5xOp2mX79+ZsmSJaalpSXWp2K1aO9Dc3OzWbx4sbnmmmtMjx49jM/nM9OmTTO1tbWX4Gy6JocxXMMCAAD26dbviQEAAPYiYgAAgJWIGAAAYCUiBgAAWImIAQAAViJiAACAlYgYAABgJSIGAABYiYgBAABWImIAAICViBgAAGAlIgYAAFjp/wJHL+KRHQBUEAAAAABJRU5ErkJggg==",
+ "text/plain": [
+ ""
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ }
+ ],
+ "source": [
+ "hist_data = X[\"Ba\"]\n",
"\n",
- "plt.figure(dpi=150)\n",
- "plt.imshow(np.array(X[\"Barite\"][(timestep*2500):(timestep*2500+2500)]).reshape(50,50), origin='lower', cmap='viridis')\n",
- "plt.colorbar(label=\"Barite-Konzentration\")\n",
- "plt.title(f\"Barite-Verteilung (last iteration)\")\n",
- "plt.savefig(\"/Users/hannessigner/Documents/Work/BMBF/GreenHPC2021UP/Treffen/2025-02-20-PERFACCT/Vorbereitung/images/barite_distribution_second_dataset.pdf\")\n",
- "plt.show()\n",
- "# plt.contour(np.array(X[\"Class\"][(timestep*2500):(timestep*2500+2500)]).reshape(50,50), origin='lower', colors='red')"
+ "_ = plt.hist(hist_data, bins=100, alpha=0.5, label='Barite-Konzentration', density=True)"
]
},
{
@@ -187,15 +3697,6 @@
"## Custom Loss function"
]
},
- {
- "cell_type": "code",
- "execution_count": 8,
- "metadata": {},
- "outputs": [],
- "source": [
- "column_dict = {\"Ba\": X.columns.get_loc(\"Ba\"), \"Barite\":X.columns.get_loc(\"Barite\"), \"Sr\":X.columns.get_loc(\"Sr\"), \"Celestite\":X.columns.get_loc(\"Celestite\"), \"H\":X.columns.get_loc(\"H\"), \"H\":X.columns.get_loc(\"H\"), \"O\":X.columns.get_loc(\"O\")}"
- ]
- },
{
"cell_type": "markdown",
"metadata": {},
@@ -205,7 +3706,47 @@
},
{
"cell_type": "code",
- "execution_count": 9,
+ "execution_count": 11,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "# column_dict = {\"Ba\": X.columns.get_loc(\"Ba\"), \"Barite\":X.columns.get_loc(\"Barite\"), \"Sr\":X.columns.get_loc(\"Sr\"), \"Celestite\":X.columns.get_loc(\"Celestite\"), \"H\":X.columns.get_loc(\"H\"), \"H\":X.columns.get_loc(\"H\"), \"O\":X.columns.get_loc(\"O\")}\n",
+ "\n",
+ "column_dict = {}\n",
+ "for i in species_columns:\n",
+ " column_dict[i] = X.columns.get_loc(i)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 12,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "{'H': 0,\n",
+ " 'O': 1,\n",
+ " 'Ba': 2,\n",
+ " 'Cl': 3,\n",
+ " 'S': 4,\n",
+ " 'Sr': 5,\n",
+ " 'Barite': 6,\n",
+ " 'Celestite': 7}"
+ ]
+ },
+ "execution_count": 12,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "column_dict"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 13,
"metadata": {},
"outputs": [],
"source": [
@@ -230,12 +3771,12 @@
},
{
"cell_type": "code",
- "execution_count": 11,
+ "execution_count": 14,
"metadata": {},
"outputs": [],
"source": [
"# model_origin = model_definition(\"large\")\n",
- "model_standard = model_definition(\"large\")\n",
+ "model_minmax = model_definition(\"large\")\n",
"\n",
"lr_schedule = keras.optimizers.schedules.ExponentialDecay(\n",
" initial_learning_rate=0.001,\n",
@@ -248,32 +3789,14 @@
"h2 = 0.5283208497548787\t\n",
"h3 = 0.5099528144902471\n",
"\n",
- "scaler_type = \"standard\"\n",
+ "scaler_type = \"minmax\"\n",
"loss_variant = \"huber_mass_balance\"\n",
"delta = 1.7642791340966357\n",
"\n",
"\n",
"\n",
"optimizer = keras.optimizers.Adam(learning_rate=lr_schedule)\n",
- "model_standard.compile(optimizer=optimizer, loss=keras.losses.Huber, metrics=[huber_metric(preprocess, scaler_type, delta), mass_balance_metric(preprocess, column_dict, scaler_type)])"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 12,
- "metadata": {},
- "outputs": [
- {
- "name": "stderr",
- "output_type": "stream",
- "text": [
- "/Users/hannessigner/miniforge3/envs/ai/lib/python3.12/site-packages/keras/src/saving/saving_lib.py:757: UserWarning: Skipping variable loading for optimizer 'adam', because it has 1 variables whereas the saved optimizer has 17 variables. \n",
- " saveable.load_own_variables(weights_store.get(inner_path))\n"
- ]
- }
- ],
- "source": [
- "model_standard.load_weights(\"/Users/hannessigner/Documents/Work/model-training/results/models/model_large_standard_plots.weights.h5\")"
+ "model_minmax.compile(optimizer=optimizer, loss=custom_loss(preprocess, column_dict, 1, 1, 1, scaler_type, loss_variant, 1), metrics=[huber_metric(preprocess, scaler_type, delta), mass_balance_metric(preprocess, column_dict, scaler_type)])"
]
},
{
@@ -290,7 +3813,27 @@
},
{
"cell_type": "code",
- "execution_count": 140,
+ "execution_count": 17,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ ".loss(results, predicted)>"
+ ]
+ },
+ "execution_count": 17,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "custom_loss(preprocess, column_dict, 1, 2, 3, scaler_type, loss_variant, delta)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 30,
"metadata": {},
"outputs": [
{
@@ -298,213 +3841,44 @@
"output_type": "stream",
"text": [
"Epoch 1/100\n",
- "\u001b[1m886/886\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m11s\u001b[0m 12ms/step - huber: 0.0017 - loss: 0.0017 - mass_balance: 0.3256 - val_huber: 1.7820e-06 - val_loss: 1.7883e-06 - val_mass_balance: 0.0179\n",
- "Epoch 2/100\n",
- "\u001b[1m886/886\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m12s\u001b[0m 14ms/step - huber: 3.6365e-06 - loss: 3.6365e-06 - mass_balance: 0.0357 - val_huber: 1.0599e-06 - val_loss: 1.0632e-06 - val_mass_balance: 0.0272\n",
- "Epoch 3/100\n",
- "\u001b[1m886/886\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m13s\u001b[0m 14ms/step - huber: 3.2707e-06 - loss: 3.2707e-06 - mass_balance: 0.0349 - val_huber: 2.2936e-06 - val_loss: 2.2951e-06 - val_mass_balance: 0.0279\n",
- "Epoch 4/100\n",
- "\u001b[1m886/886\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m11s\u001b[0m 12ms/step - huber: 5.9091e-06 - loss: 5.9091e-06 - mass_balance: 0.0556 - val_huber: 9.4613e-07 - val_loss: 9.4744e-07 - val_mass_balance: 0.0351\n",
- "Epoch 5/100\n",
- "\u001b[1m886/886\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m11s\u001b[0m 12ms/step - huber: 5.0407e-06 - loss: 5.0407e-06 - mass_balance: 0.0454 - val_huber: 2.7434e-07 - val_loss: 2.7471e-07 - val_mass_balance: 0.0094\n",
- "Epoch 6/100\n",
- "\u001b[1m886/886\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m11s\u001b[0m 13ms/step - huber: 3.8974e-06 - loss: 3.8974e-06 - mass_balance: 0.0443 - val_huber: 1.5533e-06 - val_loss: 1.5547e-06 - val_mass_balance: 0.0100\n",
- "Epoch 7/100\n",
- "\u001b[1m886/886\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m11s\u001b[0m 12ms/step - huber: 4.6106e-06 - loss: 4.6106e-06 - mass_balance: 0.0436 - val_huber: 2.3968e-07 - val_loss: 2.3995e-07 - val_mass_balance: 0.0160\n",
- "Epoch 8/100\n",
- "\u001b[1m886/886\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m10s\u001b[0m 12ms/step - huber: 2.3941e-06 - loss: 2.3941e-06 - mass_balance: 0.0286 - val_huber: 6.2510e-07 - val_loss: 6.2563e-07 - val_mass_balance: 0.0122\n",
- "Epoch 9/100\n",
- "\u001b[1m886/886\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m11s\u001b[0m 12ms/step - huber: 2.7688e-06 - loss: 2.7688e-06 - mass_balance: 0.0300 - val_huber: 3.8816e-07 - val_loss: 3.8871e-07 - val_mass_balance: 0.0142\n",
- "Epoch 10/100\n",
- "\u001b[1m886/886\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m10s\u001b[0m 12ms/step - huber: 1.8705e-06 - loss: 1.8705e-06 - mass_balance: 0.0227 - val_huber: 9.5129e-06 - val_loss: 9.5159e-06 - val_mass_balance: 0.1338\n",
- "Epoch 11/100\n",
- "\u001b[1m886/886\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m10s\u001b[0m 12ms/step - huber: 4.2374e-06 - loss: 4.2374e-06 - mass_balance: 0.0409 - val_huber: 1.6615e-06 - val_loss: 1.6623e-06 - val_mass_balance: 0.0099\n",
- "Epoch 12/100\n",
- "\u001b[1m886/886\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m11s\u001b[0m 12ms/step - huber: 1.8771e-06 - loss: 1.8771e-06 - mass_balance: 0.0301 - val_huber: 2.1160e-07 - val_loss: 2.1189e-07 - val_mass_balance: 0.0084\n",
- "Epoch 13/100\n",
- "\u001b[1m886/886\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m11s\u001b[0m 12ms/step - huber: 1.6555e-06 - loss: 1.6555e-06 - mass_balance: 0.0226 - val_huber: 2.8582e-07 - val_loss: 2.8625e-07 - val_mass_balance: 0.0170\n",
- "Epoch 14/100\n",
- "\u001b[1m886/886\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m11s\u001b[0m 13ms/step - huber: 1.9529e-06 - loss: 1.9529e-06 - mass_balance: 0.0244 - val_huber: 1.9382e-07 - val_loss: 1.9414e-07 - val_mass_balance: 0.0050\n",
- "Epoch 15/100\n",
- "\u001b[1m886/886\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m11s\u001b[0m 12ms/step - huber: 2.1099e-06 - loss: 2.1099e-06 - mass_balance: 0.0267 - val_huber: 1.4789e-07 - val_loss: 1.4816e-07 - val_mass_balance: 0.0049\n",
- "Epoch 16/100\n",
- "\u001b[1m886/886\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m10s\u001b[0m 12ms/step - huber: 1.2296e-06 - loss: 1.2296e-06 - mass_balance: 0.0204 - val_huber: 3.1999e-07 - val_loss: 3.2032e-07 - val_mass_balance: 0.0137\n",
- "Epoch 17/100\n",
- "\u001b[1m886/886\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m11s\u001b[0m 12ms/step - huber: 1.0951e-06 - loss: 1.0951e-06 - mass_balance: 0.0168 - val_huber: 3.2870e-07 - val_loss: 3.2919e-07 - val_mass_balance: 0.0052\n",
- "Epoch 18/100\n",
- "\u001b[1m886/886\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m11s\u001b[0m 12ms/step - huber: 1.2877e-06 - loss: 1.2877e-06 - mass_balance: 0.0203 - val_huber: 2.2930e-06 - val_loss: 2.2935e-06 - val_mass_balance: 0.0134\n",
- "Epoch 19/100\n",
- "\u001b[1m886/886\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m11s\u001b[0m 12ms/step - huber: 1.0542e-06 - loss: 1.0542e-06 - mass_balance: 0.0170 - val_huber: 2.5138e-07 - val_loss: 2.5181e-07 - val_mass_balance: 0.0134\n",
- "Epoch 20/100\n",
- "\u001b[1m886/886\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m11s\u001b[0m 13ms/step - huber: 1.2272e-06 - loss: 1.2272e-06 - mass_balance: 0.0144 - val_huber: 1.6538e-07 - val_loss: 1.6561e-07 - val_mass_balance: 0.0094\n",
- "Epoch 21/100\n",
- "\u001b[1m886/886\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m11s\u001b[0m 13ms/step - huber: 8.7993e-07 - loss: 8.7993e-07 - mass_balance: 0.0140 - val_huber: 1.9755e-07 - val_loss: 1.9786e-07 - val_mass_balance: 0.0137\n",
- "Epoch 22/100\n",
- "\u001b[1m886/886\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m11s\u001b[0m 13ms/step - huber: 1.1537e-06 - loss: 1.1537e-06 - mass_balance: 0.0147 - val_huber: 1.4816e-06 - val_loss: 1.4826e-06 - val_mass_balance: 0.0193\n",
- "Epoch 23/100\n",
- "\u001b[1m886/886\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m11s\u001b[0m 12ms/step - huber: 1.2142e-06 - loss: 1.2142e-06 - mass_balance: 0.0187 - val_huber: 2.7344e-07 - val_loss: 2.7369e-07 - val_mass_balance: 0.0207\n",
- "Epoch 24/100\n",
- "\u001b[1m886/886\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m11s\u001b[0m 13ms/step - huber: 1.0449e-06 - loss: 1.0449e-06 - mass_balance: 0.0154 - val_huber: 2.3383e-07 - val_loss: 2.3414e-07 - val_mass_balance: 0.0174\n",
- "Epoch 25/100\n",
- "\u001b[1m886/886\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m11s\u001b[0m 13ms/step - huber: 8.1110e-07 - loss: 8.1110e-07 - mass_balance: 0.0129 - val_huber: 1.6466e-07 - val_loss: 1.6491e-07 - val_mass_balance: 0.0123\n",
- "Epoch 26/100\n",
- "\u001b[1m886/886\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m11s\u001b[0m 13ms/step - huber: 6.6245e-07 - loss: 6.6245e-07 - mass_balance: 0.0105 - val_huber: 1.8921e-07 - val_loss: 1.8949e-07 - val_mass_balance: 0.0062\n",
- "Epoch 27/100\n",
- "\u001b[1m886/886\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m11s\u001b[0m 13ms/step - huber: 1.0430e-06 - loss: 1.0430e-06 - mass_balance: 0.0137 - val_huber: 2.2946e-06 - val_loss: 2.2947e-06 - val_mass_balance: 0.0285\n",
- "Epoch 28/100\n",
- "\u001b[1m886/886\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m11s\u001b[0m 13ms/step - huber: 8.5799e-07 - loss: 8.5799e-07 - mass_balance: 0.0124 - val_huber: 1.6085e-06 - val_loss: 1.6097e-06 - val_mass_balance: 0.0476\n",
- "Epoch 29/100\n",
- "\u001b[1m886/886\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m11s\u001b[0m 13ms/step - huber: 5.9749e-07 - loss: 5.9749e-07 - mass_balance: 0.0129 - val_huber: 1.3087e-07 - val_loss: 1.3109e-07 - val_mass_balance: 0.0076\n",
- "Epoch 30/100\n",
- "\u001b[1m886/886\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m11s\u001b[0m 12ms/step - huber: 4.6137e-07 - loss: 4.6137e-07 - mass_balance: 0.0104 - val_huber: 1.2886e-07 - val_loss: 1.2906e-07 - val_mass_balance: 0.0055\n",
- "Epoch 31/100\n",
- "\u001b[1m886/886\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m11s\u001b[0m 12ms/step - huber: 9.8563e-07 - loss: 9.8563e-07 - mass_balance: 0.0108 - val_huber: 1.0379e-07 - val_loss: 1.0399e-07 - val_mass_balance: 0.0075\n",
- "Epoch 32/100\n",
- "\u001b[1m886/886\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m11s\u001b[0m 13ms/step - huber: 5.5951e-07 - loss: 5.5951e-07 - mass_balance: 0.0089 - val_huber: 1.0108e-07 - val_loss: 1.0128e-07 - val_mass_balance: 0.0036\n",
- "Epoch 33/100\n",
- "\u001b[1m886/886\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m11s\u001b[0m 12ms/step - huber: 5.4310e-07 - loss: 5.4310e-07 - mass_balance: 0.0084 - val_huber: 1.9739e-07 - val_loss: 1.9754e-07 - val_mass_balance: 0.0126\n",
- "Epoch 34/100\n",
- "\u001b[1m886/886\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m11s\u001b[0m 12ms/step - huber: 7.1620e-07 - loss: 7.1620e-07 - mass_balance: 0.0102 - val_huber: 9.9565e-08 - val_loss: 9.9822e-08 - val_mass_balance: 0.0032\n",
- "Epoch 35/100\n",
- "\u001b[1m886/886\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m11s\u001b[0m 13ms/step - huber: 4.1445e-07 - loss: 4.1445e-07 - mass_balance: 0.0075 - val_huber: 1.7280e-07 - val_loss: 1.7302e-07 - val_mass_balance: 0.0052\n",
- "Epoch 36/100\n",
- "\u001b[1m886/886\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m11s\u001b[0m 12ms/step - huber: 4.5508e-07 - loss: 4.5508e-07 - mass_balance: 0.0082 - val_huber: 9.3598e-08 - val_loss: 9.3766e-08 - val_mass_balance: 0.0040\n",
- "Epoch 37/100\n",
- "\u001b[1m886/886\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m11s\u001b[0m 13ms/step - huber: 3.4892e-07 - loss: 3.4892e-07 - mass_balance: 0.0055 - val_huber: 1.0471e-07 - val_loss: 1.0494e-07 - val_mass_balance: 0.0028\n",
- "Epoch 38/100\n",
- "\u001b[1m886/886\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m11s\u001b[0m 13ms/step - huber: 5.4049e-07 - loss: 5.4049e-07 - mass_balance: 0.0067 - val_huber: 1.8168e-07 - val_loss: 1.8192e-07 - val_mass_balance: 0.0125\n",
- "Epoch 39/100\n",
- "\u001b[1m886/886\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m11s\u001b[0m 12ms/step - huber: 3.5648e-07 - loss: 3.5648e-07 - mass_balance: 0.0072 - val_huber: 1.1691e-07 - val_loss: 1.1713e-07 - val_mass_balance: 0.0084\n",
- "Epoch 40/100\n",
- "\u001b[1m886/886\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m11s\u001b[0m 12ms/step - huber: 5.2925e-07 - loss: 5.2925e-07 - mass_balance: 0.0068 - val_huber: 1.2699e-07 - val_loss: 1.2714e-07 - val_mass_balance: 0.0073\n",
- "Epoch 41/100\n",
- "\u001b[1m886/886\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m11s\u001b[0m 12ms/step - huber: 6.8157e-07 - loss: 6.8157e-07 - mass_balance: 0.0082 - val_huber: 9.2547e-08 - val_loss: 9.2727e-08 - val_mass_balance: 0.0053\n",
- "Epoch 42/100\n",
- "\u001b[1m886/886\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m11s\u001b[0m 13ms/step - huber: 4.2154e-07 - loss: 4.2154e-07 - mass_balance: 0.0062 - val_huber: 3.1872e-07 - val_loss: 3.1913e-07 - val_mass_balance: 0.0188\n",
- "Epoch 43/100\n",
- "\u001b[1m886/886\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m12s\u001b[0m 13ms/step - huber: 4.6397e-07 - loss: 4.6397e-07 - mass_balance: 0.0075 - val_huber: 7.5362e-08 - val_loss: 7.5552e-08 - val_mass_balance: 0.0023\n",
- "Epoch 44/100\n",
- "\u001b[1m886/886\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m11s\u001b[0m 13ms/step - huber: 3.3704e-07 - loss: 3.3704e-07 - mass_balance: 0.0051 - val_huber: 1.3457e-06 - val_loss: 1.3462e-06 - val_mass_balance: 0.0181\n",
- "Epoch 45/100\n",
- "\u001b[1m886/886\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m11s\u001b[0m 13ms/step - huber: 3.9907e-07 - loss: 3.9907e-07 - mass_balance: 0.0074 - val_huber: 1.3853e-07 - val_loss: 1.3872e-07 - val_mass_balance: 0.0061\n",
- "Epoch 46/100\n",
- "\u001b[1m886/886\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m12s\u001b[0m 14ms/step - huber: 4.5175e-07 - loss: 4.5175e-07 - mass_balance: 0.0051 - val_huber: 8.2388e-08 - val_loss: 8.2547e-08 - val_mass_balance: 0.0024\n",
- "Epoch 47/100\n",
- "\u001b[1m886/886\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m12s\u001b[0m 13ms/step - huber: 5.5090e-07 - loss: 5.5090e-07 - mass_balance: 0.0059 - val_huber: 8.1999e-08 - val_loss: 8.2180e-08 - val_mass_balance: 0.0060\n",
- "Epoch 48/100\n",
- "\u001b[1m886/886\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m12s\u001b[0m 14ms/step - huber: 3.7537e-07 - loss: 3.7537e-07 - mass_balance: 0.0058 - val_huber: 8.6734e-08 - val_loss: 8.6913e-08 - val_mass_balance: 0.0023\n",
- "Epoch 49/100\n",
- "\u001b[1m886/886\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m11s\u001b[0m 13ms/step - huber: 2.2086e-07 - loss: 2.2086e-07 - mass_balance: 0.0039 - val_huber: 2.5805e-07 - val_loss: 2.5836e-07 - val_mass_balance: 0.0115\n",
- "Epoch 50/100\n",
- "\u001b[1m886/886\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m11s\u001b[0m 13ms/step - huber: 4.9772e-07 - loss: 4.9772e-07 - mass_balance: 0.0049 - val_huber: 7.4335e-08 - val_loss: 7.4479e-08 - val_mass_balance: 0.0051\n",
- "Epoch 51/100\n",
- "\u001b[1m886/886\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m11s\u001b[0m 13ms/step - huber: 2.6298e-07 - loss: 2.6298e-07 - mass_balance: 0.0040 - val_huber: 2.9356e-07 - val_loss: 2.9396e-07 - val_mass_balance: 0.0153\n",
- "Epoch 52/100\n",
- "\u001b[1m886/886\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m11s\u001b[0m 13ms/step - huber: 3.1579e-07 - loss: 3.1579e-07 - mass_balance: 0.0046 - val_huber: 6.1345e-08 - val_loss: 6.1500e-08 - val_mass_balance: 0.0015\n",
- "Epoch 53/100\n",
- "\u001b[1m886/886\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m12s\u001b[0m 13ms/step - huber: 4.0401e-07 - loss: 4.0401e-07 - mass_balance: 0.0040 - val_huber: 6.8173e-08 - val_loss: 6.8338e-08 - val_mass_balance: 0.0031\n",
- "Epoch 54/100\n",
- "\u001b[1m886/886\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m12s\u001b[0m 13ms/step - huber: 3.0981e-07 - loss: 3.0981e-07 - mass_balance: 0.0039 - val_huber: 7.3257e-08 - val_loss: 7.3372e-08 - val_mass_balance: 0.0027\n",
- "Epoch 55/100\n",
- "\u001b[1m886/886\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m12s\u001b[0m 14ms/step - huber: 3.1865e-07 - loss: 3.1865e-07 - mass_balance: 0.0040 - val_huber: 1.2419e-06 - val_loss: 1.2431e-06 - val_mass_balance: 0.0053\n",
- "Epoch 56/100\n",
- "\u001b[1m886/886\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m12s\u001b[0m 14ms/step - huber: 6.0064e-07 - loss: 6.0064e-07 - mass_balance: 0.0047 - val_huber: 3.9193e-07 - val_loss: 3.9218e-07 - val_mass_balance: 0.0049\n",
- "Epoch 57/100\n",
- "\u001b[1m886/886\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m12s\u001b[0m 14ms/step - huber: 2.6542e-07 - loss: 2.6542e-07 - mass_balance: 0.0039 - val_huber: 1.4826e-07 - val_loss: 1.4861e-07 - val_mass_balance: 0.0055\n",
- "Epoch 58/100\n",
- "\u001b[1m886/886\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m12s\u001b[0m 13ms/step - huber: 3.2763e-07 - loss: 3.2763e-07 - mass_balance: 0.0036 - val_huber: 6.0788e-08 - val_loss: 6.0924e-08 - val_mass_balance: 0.0016\n",
- "Epoch 59/100\n",
- "\u001b[1m886/886\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m12s\u001b[0m 14ms/step - huber: 2.4258e-07 - loss: 2.4258e-07 - mass_balance: 0.0032 - val_huber: 7.3100e-08 - val_loss: 7.3274e-08 - val_mass_balance: 0.0022\n",
- "Epoch 60/100\n",
- "\u001b[1m886/886\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m11s\u001b[0m 13ms/step - huber: 3.4027e-07 - loss: 3.4027e-07 - mass_balance: 0.0033 - val_huber: 6.3018e-08 - val_loss: 6.3153e-08 - val_mass_balance: 0.0026\n",
- "Epoch 61/100\n",
- "\u001b[1m886/886\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m12s\u001b[0m 14ms/step - huber: 2.4080e-07 - loss: 2.4080e-07 - mass_balance: 0.0031 - val_huber: 5.8896e-08 - val_loss: 5.9048e-08 - val_mass_balance: 0.0014\n",
- "Epoch 62/100\n",
- "\u001b[1m886/886\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m12s\u001b[0m 13ms/step - huber: 2.3142e-07 - loss: 2.3142e-07 - mass_balance: 0.0027 - val_huber: 6.3233e-08 - val_loss: 6.3371e-08 - val_mass_balance: 0.0020\n",
- "Epoch 63/100\n",
- "\u001b[1m886/886\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m12s\u001b[0m 14ms/step - huber: 2.8354e-07 - loss: 2.8354e-07 - mass_balance: 0.0030 - val_huber: 6.7132e-08 - val_loss: 6.7247e-08 - val_mass_balance: 0.0044\n",
- "Epoch 64/100\n",
- "\u001b[1m886/886\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m12s\u001b[0m 13ms/step - huber: 2.3620e-07 - loss: 2.3620e-07 - mass_balance: 0.0029 - val_huber: 6.1996e-08 - val_loss: 6.2151e-08 - val_mass_balance: 0.0022\n",
- "Epoch 65/100\n",
- "\u001b[1m886/886\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m12s\u001b[0m 14ms/step - huber: 1.6679e-07 - loss: 1.6679e-07 - mass_balance: 0.0024 - val_huber: 1.5507e-07 - val_loss: 1.5522e-07 - val_mass_balance: 0.0027\n",
- "Epoch 66/100\n",
- "\u001b[1m886/886\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m13s\u001b[0m 14ms/step - huber: 1.7355e-07 - loss: 1.7355e-07 - mass_balance: 0.0026 - val_huber: 6.2313e-08 - val_loss: 6.2457e-08 - val_mass_balance: 0.0019\n",
- "Epoch 67/100\n",
- "\u001b[1m886/886\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m12s\u001b[0m 14ms/step - huber: 1.6055e-07 - loss: 1.6055e-07 - mass_balance: 0.0023 - val_huber: 2.4914e-07 - val_loss: 2.4929e-07 - val_mass_balance: 0.0073\n",
- "Epoch 68/100\n",
- "\u001b[1m886/886\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m11s\u001b[0m 13ms/step - huber: 2.5462e-07 - loss: 2.5462e-07 - mass_balance: 0.0030 - val_huber: 5.7153e-08 - val_loss: 5.7288e-08 - val_mass_balance: 0.0014\n",
- "Epoch 69/100\n",
- "\u001b[1m886/886\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m11s\u001b[0m 13ms/step - huber: 1.3305e-07 - loss: 1.3305e-07 - mass_balance: 0.0022 - val_huber: 8.5180e-08 - val_loss: 8.5357e-08 - val_mass_balance: 0.0036\n",
- "Epoch 70/100\n",
- "\u001b[1m886/886\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m12s\u001b[0m 13ms/step - huber: 2.4093e-07 - loss: 2.4093e-07 - mass_balance: 0.0025 - val_huber: 6.4853e-08 - val_loss: 6.4947e-08 - val_mass_balance: 0.0016\n",
- "Epoch 71/100\n",
- "\u001b[1m886/886\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m12s\u001b[0m 13ms/step - huber: 2.1562e-07 - loss: 2.1562e-07 - mass_balance: 0.0023 - val_huber: 5.4525e-08 - val_loss: 5.4632e-08 - val_mass_balance: 0.0015\n",
- "Epoch 72/100\n",
- "\u001b[1m886/886\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m11s\u001b[0m 13ms/step - huber: 2.5656e-07 - loss: 2.5656e-07 - mass_balance: 0.0022 - val_huber: 1.1401e-07 - val_loss: 1.1415e-07 - val_mass_balance: 0.0028\n",
- "Epoch 73/100\n",
- "\u001b[1m886/886\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m11s\u001b[0m 13ms/step - huber: 2.4231e-07 - loss: 2.4231e-07 - mass_balance: 0.0024 - val_huber: 5.4870e-08 - val_loss: 5.4978e-08 - val_mass_balance: 0.0017\n",
- "Epoch 74/100\n",
- "\u001b[1m886/886\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m11s\u001b[0m 13ms/step - huber: 1.5940e-07 - loss: 1.5940e-07 - mass_balance: 0.0021 - val_huber: 7.8957e-08 - val_loss: 7.9112e-08 - val_mass_balance: 0.0020\n",
- "Epoch 75/100\n",
- "\u001b[1m886/886\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m11s\u001b[0m 12ms/step - huber: 2.2732e-07 - loss: 2.2732e-07 - mass_balance: 0.0022 - val_huber: 5.2756e-08 - val_loss: 5.2866e-08 - val_mass_balance: 0.0013\n",
- "Epoch 76/100\n",
- "\u001b[1m886/886\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m12s\u001b[0m 13ms/step - huber: 1.8865e-07 - loss: 1.8865e-07 - mass_balance: 0.0020 - val_huber: 2.3236e-07 - val_loss: 2.3246e-07 - val_mass_balance: 0.0073\n",
- "Epoch 77/100\n",
- "\u001b[1m886/886\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m12s\u001b[0m 13ms/step - huber: 2.2688e-07 - loss: 2.2688e-07 - mass_balance: 0.0024 - val_huber: 5.5447e-08 - val_loss: 5.5538e-08 - val_mass_balance: 0.0015\n",
- "Epoch 78/100\n",
- "\u001b[1m886/886\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m13s\u001b[0m 14ms/step - huber: 3.3183e-07 - loss: 3.3183e-07 - mass_balance: 0.0022 - val_huber: 5.5350e-08 - val_loss: 5.5469e-08 - val_mass_balance: 0.0022\n",
- "Epoch 79/100\n",
- "\u001b[1m886/886\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m12s\u001b[0m 14ms/step - huber: 1.5005e-07 - loss: 1.5005e-07 - mass_balance: 0.0019 - val_huber: 6.8170e-08 - val_loss: 6.8285e-08 - val_mass_balance: 0.0020\n",
- "Epoch 80/100\n",
- "\u001b[1m886/886\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m12s\u001b[0m 13ms/step - huber: 1.9014e-07 - loss: 1.9014e-07 - mass_balance: 0.0020 - val_huber: 5.6487e-08 - val_loss: 5.6580e-08 - val_mass_balance: 0.0018\n",
- "Epoch 81/100\n",
- "\u001b[1m886/886\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m12s\u001b[0m 13ms/step - huber: 1.6479e-07 - loss: 1.6479e-07 - mass_balance: 0.0018 - val_huber: 1.1170e-07 - val_loss: 1.1179e-07 - val_mass_balance: 0.0017\n",
- "Epoch 82/100\n",
- "\u001b[1m886/886\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m12s\u001b[0m 13ms/step - huber: 1.8905e-07 - loss: 1.8905e-07 - mass_balance: 0.0019 - val_huber: 5.3920e-08 - val_loss: 5.4031e-08 - val_mass_balance: 0.0020\n",
- "Epoch 83/100\n",
- "\u001b[1m886/886\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m12s\u001b[0m 13ms/step - huber: 2.1552e-07 - loss: 2.1552e-07 - mass_balance: 0.0019 - val_huber: 5.1053e-08 - val_loss: 5.1167e-08 - val_mass_balance: 0.0018\n",
- "Epoch 84/100\n",
- "\u001b[1m886/886\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m12s\u001b[0m 14ms/step - huber: 2.1627e-07 - loss: 2.1627e-07 - mass_balance: 0.0019 - val_huber: 5.0605e-08 - val_loss: 5.0708e-08 - val_mass_balance: 0.0014\n",
- "Epoch 85/100\n",
- "\u001b[1m886/886\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m11s\u001b[0m 13ms/step - huber: 2.1048e-07 - loss: 2.1048e-07 - mass_balance: 0.0019 - val_huber: 9.7042e-08 - val_loss: 9.7174e-08 - val_mass_balance: 0.0039\n",
- "Epoch 86/100\n",
- "\u001b[1m886/886\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m12s\u001b[0m 13ms/step - huber: 1.6892e-07 - loss: 1.6892e-07 - mass_balance: 0.0018 - val_huber: 5.0322e-08 - val_loss: 5.0422e-08 - val_mass_balance: 0.0013\n",
- "Epoch 87/100\n",
- "\u001b[1m886/886\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m12s\u001b[0m 13ms/step - huber: 1.3645e-07 - loss: 1.3645e-07 - mass_balance: 0.0016 - val_huber: 5.6177e-08 - val_loss: 5.6303e-08 - val_mass_balance: 0.0022\n",
- "Epoch 88/100\n",
- "\u001b[1m886/886\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m12s\u001b[0m 13ms/step - huber: 1.8010e-07 - loss: 1.8010e-07 - mass_balance: 0.0017 - val_huber: 5.0597e-08 - val_loss: 5.0689e-08 - val_mass_balance: 0.0016\n",
- "Epoch 89/100\n",
- "\u001b[1m886/886\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m12s\u001b[0m 14ms/step - huber: 2.3124e-07 - loss: 2.3124e-07 - mass_balance: 0.0018 - val_huber: 5.0465e-08 - val_loss: 5.0577e-08 - val_mass_balance: 0.0016\n",
- "Epoch 90/100\n",
- "\u001b[1m886/886\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m12s\u001b[0m 14ms/step - huber: 1.0222e-07 - loss: 1.0222e-07 - mass_balance: 0.0015 - val_huber: 1.3106e-07 - val_loss: 1.3116e-07 - val_mass_balance: 0.0024\n",
- "Epoch 91/100\n",
- "\u001b[1m886/886\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m12s\u001b[0m 13ms/step - huber: 2.3599e-07 - loss: 2.3599e-07 - mass_balance: 0.0018 - val_huber: 5.4327e-08 - val_loss: 5.4405e-08 - val_mass_balance: 0.0017\n",
- "Epoch 92/100\n",
- "\u001b[1m886/886\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m11s\u001b[0m 13ms/step - huber: 1.7827e-07 - loss: 1.7827e-07 - mass_balance: 0.0017 - val_huber: 5.2719e-08 - val_loss: 5.2807e-08 - val_mass_balance: 0.0014\n",
- "Epoch 93/100\n",
- "\u001b[1m886/886\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m12s\u001b[0m 13ms/step - huber: 2.5623e-07 - loss: 2.5623e-07 - mass_balance: 0.0018 - val_huber: 5.1424e-08 - val_loss: 5.1525e-08 - val_mass_balance: 0.0015\n",
- "Epoch 94/100\n",
- "\u001b[1m886/886\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m12s\u001b[0m 13ms/step - huber: 1.2912e-07 - loss: 1.2912e-07 - mass_balance: 0.0015 - val_huber: 8.7227e-08 - val_loss: 8.7398e-08 - val_mass_balance: 0.0026\n",
- "Epoch 95/100\n",
- "\u001b[1m886/886\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m12s\u001b[0m 13ms/step - huber: 2.0414e-07 - loss: 2.0414e-07 - mass_balance: 0.0017 - val_huber: 4.8705e-08 - val_loss: 4.8795e-08 - val_mass_balance: 0.0013\n",
- "Epoch 96/100\n",
- "\u001b[1m886/886\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m12s\u001b[0m 14ms/step - huber: 1.7018e-07 - loss: 1.7018e-07 - mass_balance: 0.0016 - val_huber: 4.9206e-08 - val_loss: 4.9310e-08 - val_mass_balance: 0.0013\n",
- "Epoch 97/100\n",
- "\u001b[1m886/886\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m12s\u001b[0m 13ms/step - huber: 1.9203e-07 - loss: 1.9203e-07 - mass_balance: 0.0015 - val_huber: 4.9359e-08 - val_loss: 4.9445e-08 - val_mass_balance: 0.0016\n",
- "Epoch 98/100\n",
- "\u001b[1m886/886\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m12s\u001b[0m 14ms/step - huber: 2.3841e-07 - loss: 2.3841e-07 - mass_balance: 0.0016 - val_huber: 4.8478e-08 - val_loss: 4.8569e-08 - val_mass_balance: 0.0013\n",
- "Epoch 99/100\n",
- "\u001b[1m886/886\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m12s\u001b[0m 13ms/step - huber: 1.1876e-07 - loss: 1.1876e-07 - mass_balance: 0.0014 - val_huber: 5.1804e-08 - val_loss: 5.1912e-08 - val_mass_balance: 0.0018\n",
- "Epoch 100/100\n",
- "\u001b[1m886/886\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m12s\u001b[0m 14ms/step - huber: 1.6521e-07 - loss: 1.6521e-07 - mass_balance: 0.0015 - val_huber: 5.6042e-08 - val_loss: 5.6124e-08 - val_mass_balance: 0.0014\n",
- "Training took 1148.3874678611755 seconds\n"
+ "\u001b[1m547/886\u001b[0m \u001b[32m━━━━━━━━━━━━\u001b[0m\u001b[37m━━━━━━━━\u001b[0m \u001b[1m3s\u001b[0m 12ms/step - huber: nan - loss: nan - mass_balance: nan"
+ ]
+ },
+ {
+ "ename": "KeyboardInterrupt",
+ "evalue": "",
+ "output_type": "error",
+ "traceback": [
+ "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m",
+ "\u001b[0;31mKeyboardInterrupt\u001b[0m Traceback (most recent call last)",
+ "Cell \u001b[0;32mIn[30], line 1\u001b[0m\n\u001b[0;32m----> 1\u001b[0m history_standard \u001b[38;5;241m=\u001b[39m model_training(model_minmax)\n",
+ "Cell \u001b[0;32mIn[27], line 5\u001b[0m, in \u001b[0;36mmodel_training\u001b[0;34m(model)\u001b[0m\n\u001b[1;32m 3\u001b[0m start \u001b[38;5;241m=\u001b[39m time\u001b[38;5;241m.\u001b[39mtime()\n\u001b[1;32m 4\u001b[0m callback \u001b[38;5;241m=\u001b[39m keras\u001b[38;5;241m.\u001b[39mcallbacks\u001b[38;5;241m.\u001b[39mEarlyStopping(monitor\u001b[38;5;241m=\u001b[39m\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mloss\u001b[39m\u001b[38;5;124m'\u001b[39m, patience\u001b[38;5;241m=\u001b[39m\u001b[38;5;241m30\u001b[39m)\n\u001b[0;32m----> 5\u001b[0m history \u001b[38;5;241m=\u001b[39m model\u001b[38;5;241m.\u001b[39mfit(X_train\u001b[38;5;241m.\u001b[39mloc[:, X_train\u001b[38;5;241m.\u001b[39mcolumns \u001b[38;5;241m!=\u001b[39m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mClass\u001b[39m\u001b[38;5;124m\"\u001b[39m], \n\u001b[1;32m 6\u001b[0m y_train\u001b[38;5;241m.\u001b[39mloc[:, y_train\u001b[38;5;241m.\u001b[39mcolumns \u001b[38;5;241m!=\u001b[39m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mClass\u001b[39m\u001b[38;5;124m\"\u001b[39m], \n\u001b[1;32m 7\u001b[0m batch_size\u001b[38;5;241m=\u001b[39m\u001b[38;5;241m512\u001b[39m, \n\u001b[1;32m 8\u001b[0m epochs\u001b[38;5;241m=\u001b[39m\u001b[38;5;241m100\u001b[39m, \n\u001b[1;32m 9\u001b[0m validation_data\u001b[38;5;241m=\u001b[39m(X_val\u001b[38;5;241m.\u001b[39mloc[:, X_val\u001b[38;5;241m.\u001b[39mcolumns \u001b[38;5;241m!=\u001b[39m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mClass\u001b[39m\u001b[38;5;124m\"\u001b[39m], y_val\u001b[38;5;241m.\u001b[39mloc[:, y_val\u001b[38;5;241m.\u001b[39mcolumns \u001b[38;5;241m!=\u001b[39m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mClass\u001b[39m\u001b[38;5;124m\"\u001b[39m]),\n\u001b[1;32m 10\u001b[0m callbacks\u001b[38;5;241m=\u001b[39m[callback])\n\u001b[1;32m 13\u001b[0m end \u001b[38;5;241m=\u001b[39m time\u001b[38;5;241m.\u001b[39mtime()\n\u001b[1;32m 15\u001b[0m \u001b[38;5;28mprint\u001b[39m(\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mTraining took \u001b[39m\u001b[38;5;132;01m{}\u001b[39;00m\u001b[38;5;124m seconds\u001b[39m\u001b[38;5;124m\"\u001b[39m\u001b[38;5;241m.\u001b[39mformat(end \u001b[38;5;241m-\u001b[39m start))\n",
+ "File \u001b[0;32m~/bin/miniconda3/envs/training/lib/python3.11/site-packages/keras/src/utils/traceback_utils.py:117\u001b[0m, in \u001b[0;36mfilter_traceback..error_handler\u001b[0;34m(*args, **kwargs)\u001b[0m\n\u001b[1;32m 115\u001b[0m filtered_tb \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;01mNone\u001b[39;00m\n\u001b[1;32m 116\u001b[0m \u001b[38;5;28;01mtry\u001b[39;00m:\n\u001b[0;32m--> 117\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m fn(\u001b[38;5;241m*\u001b[39margs, \u001b[38;5;241m*\u001b[39m\u001b[38;5;241m*\u001b[39mkwargs)\n\u001b[1;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[1;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[0;32m~/bin/miniconda3/envs/training/lib/python3.11/site-packages/keras/src/backend/tensorflow/trainer.py:320\u001b[0m, in \u001b[0;36mTensorFlowTrainer.fit\u001b[0;34m(self, x, y, batch_size, epochs, verbose, callbacks, validation_split, validation_data, shuffle, class_weight, sample_weight, initial_epoch, steps_per_epoch, validation_steps, validation_batch_size, validation_freq)\u001b[0m\n\u001b[1;32m 318\u001b[0m \u001b[38;5;28;01mfor\u001b[39;00m step, iterator \u001b[38;5;129;01min\u001b[39;00m epoch_iterator\u001b[38;5;241m.\u001b[39menumerate_epoch():\n\u001b[1;32m 319\u001b[0m callbacks\u001b[38;5;241m.\u001b[39mon_train_batch_begin(step)\n\u001b[0;32m--> 320\u001b[0m logs \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mtrain_function(iterator)\n\u001b[1;32m 321\u001b[0m callbacks\u001b[38;5;241m.\u001b[39mon_train_batch_end(step, logs)\n\u001b[1;32m 322\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mstop_training:\n",
+ "File \u001b[0;32m~/bin/miniconda3/envs/training/lib/python3.11/site-packages/tensorflow/python/util/traceback_utils.py:150\u001b[0m, in \u001b[0;36mfilter_traceback..error_handler\u001b[0;34m(*args, **kwargs)\u001b[0m\n\u001b[1;32m 148\u001b[0m filtered_tb \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;01mNone\u001b[39;00m\n\u001b[1;32m 149\u001b[0m \u001b[38;5;28;01mtry\u001b[39;00m:\n\u001b[0;32m--> 150\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m fn(\u001b[38;5;241m*\u001b[39margs, \u001b[38;5;241m*\u001b[39m\u001b[38;5;241m*\u001b[39mkwargs)\n\u001b[1;32m 151\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[1;32m 152\u001b[0m filtered_tb \u001b[38;5;241m=\u001b[39m _process_traceback_frames(e\u001b[38;5;241m.\u001b[39m__traceback__)\n",
+ "File \u001b[0;32m~/bin/miniconda3/envs/training/lib/python3.11/site-packages/tensorflow/python/eager/polymorphic_function/polymorphic_function.py:833\u001b[0m, in \u001b[0;36mFunction.__call__\u001b[0;34m(self, *args, **kwds)\u001b[0m\n\u001b[1;32m 830\u001b[0m compiler \u001b[38;5;241m=\u001b[39m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mxla\u001b[39m\u001b[38;5;124m\"\u001b[39m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_jit_compile \u001b[38;5;28;01melse\u001b[39;00m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mnonXla\u001b[39m\u001b[38;5;124m\"\u001b[39m\n\u001b[1;32m 832\u001b[0m \u001b[38;5;28;01mwith\u001b[39;00m OptionalXlaContext(\u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_jit_compile):\n\u001b[0;32m--> 833\u001b[0m result \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_call(\u001b[38;5;241m*\u001b[39margs, \u001b[38;5;241m*\u001b[39m\u001b[38;5;241m*\u001b[39mkwds)\n\u001b[1;32m 835\u001b[0m new_tracing_count \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mexperimental_get_tracing_count()\n\u001b[1;32m 836\u001b[0m without_tracing \u001b[38;5;241m=\u001b[39m (tracing_count \u001b[38;5;241m==\u001b[39m new_tracing_count)\n",
+ "File \u001b[0;32m~/bin/miniconda3/envs/training/lib/python3.11/site-packages/tensorflow/python/eager/polymorphic_function/polymorphic_function.py:878\u001b[0m, in \u001b[0;36mFunction._call\u001b[0;34m(self, *args, **kwds)\u001b[0m\n\u001b[1;32m 875\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_lock\u001b[38;5;241m.\u001b[39mrelease()\n\u001b[1;32m 876\u001b[0m \u001b[38;5;66;03m# In this case we have not created variables on the first call. So we can\u001b[39;00m\n\u001b[1;32m 877\u001b[0m \u001b[38;5;66;03m# run the first trace but we should fail if variables are created.\u001b[39;00m\n\u001b[0;32m--> 878\u001b[0m results \u001b[38;5;241m=\u001b[39m tracing_compilation\u001b[38;5;241m.\u001b[39mcall_function(\n\u001b[1;32m 879\u001b[0m args, kwds, \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_variable_creation_config\n\u001b[1;32m 880\u001b[0m )\n\u001b[1;32m 881\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_created_variables:\n\u001b[1;32m 882\u001b[0m \u001b[38;5;28;01mraise\u001b[39;00m \u001b[38;5;167;01mValueError\u001b[39;00m(\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mCreating variables on a non-first call to a function\u001b[39m\u001b[38;5;124m\"\u001b[39m\n\u001b[1;32m 883\u001b[0m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124m decorated with tf.function.\u001b[39m\u001b[38;5;124m\"\u001b[39m)\n",
+ "File \u001b[0;32m~/bin/miniconda3/envs/training/lib/python3.11/site-packages/tensorflow/python/eager/polymorphic_function/tracing_compilation.py:139\u001b[0m, in \u001b[0;36mcall_function\u001b[0;34m(args, kwargs, tracing_options)\u001b[0m\n\u001b[1;32m 137\u001b[0m bound_args \u001b[38;5;241m=\u001b[39m function\u001b[38;5;241m.\u001b[39mfunction_type\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[1;32m 138\u001b[0m flat_inputs \u001b[38;5;241m=\u001b[39m function\u001b[38;5;241m.\u001b[39mfunction_type\u001b[38;5;241m.\u001b[39munpack_inputs(bound_args)\n\u001b[0;32m--> 139\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m function\u001b[38;5;241m.\u001b[39m_call_flat( \u001b[38;5;66;03m# pylint: disable=protected-access\u001b[39;00m\n\u001b[1;32m 140\u001b[0m flat_inputs, captured_inputs\u001b[38;5;241m=\u001b[39mfunction\u001b[38;5;241m.\u001b[39mcaptured_inputs\n\u001b[1;32m 141\u001b[0m )\n",
+ "File \u001b[0;32m~/bin/miniconda3/envs/training/lib/python3.11/site-packages/tensorflow/python/eager/polymorphic_function/concrete_function.py:1322\u001b[0m, in \u001b[0;36mConcreteFunction._call_flat\u001b[0;34m(self, tensor_inputs, captured_inputs)\u001b[0m\n\u001b[1;32m 1318\u001b[0m possible_gradient_type \u001b[38;5;241m=\u001b[39m gradients_util\u001b[38;5;241m.\u001b[39mPossibleTapeGradientTypes(args)\n\u001b[1;32m 1319\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m (possible_gradient_type \u001b[38;5;241m==\u001b[39m gradients_util\u001b[38;5;241m.\u001b[39mPOSSIBLE_GRADIENT_TYPES_NONE\n\u001b[1;32m 1320\u001b[0m \u001b[38;5;129;01mand\u001b[39;00m executing_eagerly):\n\u001b[1;32m 1321\u001b[0m \u001b[38;5;66;03m# No tape is watching; skip to running the function.\u001b[39;00m\n\u001b[0;32m-> 1322\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_inference_function\u001b[38;5;241m.\u001b[39mcall_preflattened(args)\n\u001b[1;32m 1323\u001b[0m forward_backward \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_select_forward_and_backward_functions(\n\u001b[1;32m 1324\u001b[0m args,\n\u001b[1;32m 1325\u001b[0m possible_gradient_type,\n\u001b[1;32m 1326\u001b[0m executing_eagerly)\n\u001b[1;32m 1327\u001b[0m forward_function, args_with_tangents \u001b[38;5;241m=\u001b[39m forward_backward\u001b[38;5;241m.\u001b[39mforward()\n",
+ "File \u001b[0;32m~/bin/miniconda3/envs/training/lib/python3.11/site-packages/tensorflow/python/eager/polymorphic_function/atomic_function.py:216\u001b[0m, in \u001b[0;36mAtomicFunction.call_preflattened\u001b[0;34m(self, args)\u001b[0m\n\u001b[1;32m 214\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21mcall_preflattened\u001b[39m(\u001b[38;5;28mself\u001b[39m, args: Sequence[core\u001b[38;5;241m.\u001b[39mTensor]) \u001b[38;5;241m-\u001b[39m\u001b[38;5;241m>\u001b[39m Any:\n\u001b[1;32m 215\u001b[0m \u001b[38;5;250m \u001b[39m\u001b[38;5;124;03m\"\"\"Calls with flattened tensor inputs and returns the structured output.\"\"\"\u001b[39;00m\n\u001b[0;32m--> 216\u001b[0m flat_outputs \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mcall_flat(\u001b[38;5;241m*\u001b[39margs)\n\u001b[1;32m 217\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mfunction_type\u001b[38;5;241m.\u001b[39mpack_output(flat_outputs)\n",
+ "File \u001b[0;32m~/bin/miniconda3/envs/training/lib/python3.11/site-packages/tensorflow/python/eager/polymorphic_function/atomic_function.py:251\u001b[0m, in \u001b[0;36mAtomicFunction.call_flat\u001b[0;34m(self, *args)\u001b[0m\n\u001b[1;32m 249\u001b[0m \u001b[38;5;28;01mwith\u001b[39;00m record\u001b[38;5;241m.\u001b[39mstop_recording():\n\u001b[1;32m 250\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_bound_context\u001b[38;5;241m.\u001b[39mexecuting_eagerly():\n\u001b[0;32m--> 251\u001b[0m outputs \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_bound_context\u001b[38;5;241m.\u001b[39mcall_function(\n\u001b[1;32m 252\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mname,\n\u001b[1;32m 253\u001b[0m \u001b[38;5;28mlist\u001b[39m(args),\n\u001b[1;32m 254\u001b[0m \u001b[38;5;28mlen\u001b[39m(\u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mfunction_type\u001b[38;5;241m.\u001b[39mflat_outputs),\n\u001b[1;32m 255\u001b[0m )\n\u001b[1;32m 256\u001b[0m \u001b[38;5;28;01melse\u001b[39;00m:\n\u001b[1;32m 257\u001b[0m outputs \u001b[38;5;241m=\u001b[39m make_call_op_in_graph(\n\u001b[1;32m 258\u001b[0m \u001b[38;5;28mself\u001b[39m,\n\u001b[1;32m 259\u001b[0m \u001b[38;5;28mlist\u001b[39m(args),\n\u001b[1;32m 260\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_bound_context\u001b[38;5;241m.\u001b[39mfunction_call_options\u001b[38;5;241m.\u001b[39mas_attrs(),\n\u001b[1;32m 261\u001b[0m )\n",
+ "File \u001b[0;32m~/bin/miniconda3/envs/training/lib/python3.11/site-packages/tensorflow/python/eager/context.py:1552\u001b[0m, in \u001b[0;36mContext.call_function\u001b[0;34m(self, name, tensor_inputs, num_outputs)\u001b[0m\n\u001b[1;32m 1550\u001b[0m cancellation_context \u001b[38;5;241m=\u001b[39m cancellation\u001b[38;5;241m.\u001b[39mcontext()\n\u001b[1;32m 1551\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m cancellation_context \u001b[38;5;129;01mis\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m:\n\u001b[0;32m-> 1552\u001b[0m outputs \u001b[38;5;241m=\u001b[39m execute\u001b[38;5;241m.\u001b[39mexecute(\n\u001b[1;32m 1553\u001b[0m name\u001b[38;5;241m.\u001b[39mdecode(\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mutf-8\u001b[39m\u001b[38;5;124m\"\u001b[39m),\n\u001b[1;32m 1554\u001b[0m num_outputs\u001b[38;5;241m=\u001b[39mnum_outputs,\n\u001b[1;32m 1555\u001b[0m inputs\u001b[38;5;241m=\u001b[39mtensor_inputs,\n\u001b[1;32m 1556\u001b[0m attrs\u001b[38;5;241m=\u001b[39mattrs,\n\u001b[1;32m 1557\u001b[0m ctx\u001b[38;5;241m=\u001b[39m\u001b[38;5;28mself\u001b[39m,\n\u001b[1;32m 1558\u001b[0m )\n\u001b[1;32m 1559\u001b[0m \u001b[38;5;28;01melse\u001b[39;00m:\n\u001b[1;32m 1560\u001b[0m outputs \u001b[38;5;241m=\u001b[39m execute\u001b[38;5;241m.\u001b[39mexecute_with_cancellation(\n\u001b[1;32m 1561\u001b[0m name\u001b[38;5;241m.\u001b[39mdecode(\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mutf-8\u001b[39m\u001b[38;5;124m\"\u001b[39m),\n\u001b[1;32m 1562\u001b[0m num_outputs\u001b[38;5;241m=\u001b[39mnum_outputs,\n\u001b[0;32m (...)\u001b[0m\n\u001b[1;32m 1566\u001b[0m cancellation_manager\u001b[38;5;241m=\u001b[39mcancellation_context,\n\u001b[1;32m 1567\u001b[0m )\n",
+ "File \u001b[0;32m~/bin/miniconda3/envs/training/lib/python3.11/site-packages/tensorflow/python/eager/execute.py:53\u001b[0m, in \u001b[0;36mquick_execute\u001b[0;34m(op_name, num_outputs, inputs, attrs, ctx, name)\u001b[0m\n\u001b[1;32m 51\u001b[0m \u001b[38;5;28;01mtry\u001b[39;00m:\n\u001b[1;32m 52\u001b[0m ctx\u001b[38;5;241m.\u001b[39mensure_initialized()\n\u001b[0;32m---> 53\u001b[0m tensors \u001b[38;5;241m=\u001b[39m pywrap_tfe\u001b[38;5;241m.\u001b[39mTFE_Py_Execute(ctx\u001b[38;5;241m.\u001b[39m_handle, device_name, op_name,\n\u001b[1;32m 54\u001b[0m inputs, attrs, num_outputs)\n\u001b[1;32m 55\u001b[0m \u001b[38;5;28;01mexcept\u001b[39;00m core\u001b[38;5;241m.\u001b[39m_NotOkStatusException \u001b[38;5;28;01mas\u001b[39;00m e:\n\u001b[1;32m 56\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m name \u001b[38;5;129;01mis\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m:\n",
+ "\u001b[0;31mKeyboardInterrupt\u001b[0m: "
]
}
],
"source": [
- "history_origin = model_training(model_origin)"
+ "history_standard = model_training(model_minmax)"
]
},
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
+ "source": []
+ },
{
"cell_type": "markdown",
"metadata": {},
@@ -514,7 +3888,7 @@
},
{
"cell_type": "code",
- "execution_count": 206,
+ "execution_count": null,
"metadata": {},
"outputs": [
{
@@ -591,7 +3965,7 @@
},
{
"cell_type": "code",
- "execution_count": 13,
+ "execution_count": null,
"metadata": {},
"outputs": [],
"source": [
@@ -618,14 +3992,14 @@
},
{
"cell_type": "code",
- "execution_count": 15,
+ "execution_count": null,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
- "\u001b[1m14175/14175\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m19s\u001b[0m 1ms/step\n"
+ "\u001b[1m13497/13497\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m13s\u001b[0m 946us/step\n"
]
},
{
@@ -662,58 +4036,58 @@
" \n",
" \n",
" | 0 | \n",
- " 111.012405 | \n",
- " 55.506626 | \n",
- " 0.000005 | \n",
- " 0.033089 | \n",
- " 1.027101e-04 | \n",
- " 0.016652 | \n",
+ " 111.012451 | \n",
+ " 55.506569 | \n",
+ " 0.000023 | \n",
+ " 0.064478 | \n",
+ " 0.000088 | \n",
+ " 0.032301 | \n",
" 0.001007 | \n",
- " 1.000499 | \n",
+ " 1.000674 | \n",
"
\n",
" \n",
" | 1 | \n",
- " 111.012466 | \n",
- " 55.506611 | \n",
+ " 111.012566 | \n",
+ " 55.506607 | \n",
" 0.000014 | \n",
- " 0.039325 | \n",
- " 9.818448e-05 | \n",
- " 0.019741 | \n",
- " 0.000999 | \n",
- " 1.000658 | \n",
+ " 0.040900 | \n",
+ " 0.000097 | \n",
+ " 0.020535 | \n",
+ " 0.000996 | \n",
+ " 1.000632 | \n",
"
\n",
" \n",
" | 2 | \n",
- " 111.012413 | \n",
- " 55.506592 | \n",
- " 0.000019 | \n",
- " 0.047933 | \n",
- " 9.349755e-05 | \n",
- " 0.024046 | \n",
- " 0.001000 | \n",
- " 1.000488 | \n",
+ " 111.012398 | \n",
+ " 55.506557 | \n",
+ " 0.000026 | \n",
+ " 0.072086 | \n",
+ " 0.000086 | \n",
+ " 0.036106 | \n",
+ " 0.001020 | \n",
+ " 1.000213 | \n",
"
\n",
" \n",
" | 3 | \n",
- " 111.012444 | \n",
- " 55.506565 | \n",
- " 0.000026 | \n",
- " 0.066846 | \n",
- " 8.691217e-05 | \n",
- " 0.033495 | \n",
- " 0.001000 | \n",
- " 1.000390 | \n",
+ " 111.012497 | \n",
+ " 55.506580 | \n",
+ " 0.000019 | \n",
+ " 0.053724 | \n",
+ " 0.000091 | \n",
+ " 0.026933 | \n",
+ " 0.001002 | \n",
+ " 1.000540 | \n",
"
\n",
" \n",
" | 4 | \n",
- " 111.012314 | \n",
- " 55.506802 | \n",
- " -0.000003 | \n",
- " 0.011493 | \n",
- " 1.465212e-04 | \n",
- " 0.005892 | \n",
+ " 111.012413 | \n",
+ " 55.506561 | \n",
+ " 0.000024 | \n",
+ " 0.068850 | \n",
+ " 0.000086 | \n",
+ " 0.034488 | \n",
" 0.001008 | \n",
- " 1.000547 | \n",
+ " 1.000764 | \n",
"
\n",
" \n",
" | ... | \n",
@@ -727,96 +4101,96 @@
" ... | \n",
"
\n",
" \n",
- " | 453595 | \n",
- " 111.012428 | \n",
- " 55.506592 | \n",
- " 0.000019 | \n",
- " 0.048117 | \n",
- " 9.338620e-05 | \n",
- " 0.024139 | \n",
- " 0.001000 | \n",
- " 1.000609 | \n",
- "
\n",
- " \n",
- " | 453596 | \n",
- " 111.012207 | \n",
- " 55.506775 | \n",
- " -0.000004 | \n",
- " 0.013115 | \n",
- " 1.393944e-04 | \n",
- " 0.006700 | \n",
- " 0.001010 | \n",
- " 1.000573 | \n",
- "
\n",
- " \n",
- " | 453597 | \n",
- " 111.012375 | \n",
- " 55.506496 | \n",
- " 0.000076 | \n",
- " 0.108388 | \n",
- " 6.973010e-05 | \n",
- " 0.054192 | \n",
- " 0.104940 | \n",
- " 0.891979 | \n",
- "
\n",
- " \n",
- " | 453598 | \n",
- " 111.012413 | \n",
- " 55.506577 | \n",
+ " 431881 | \n",
+ " 111.012444 | \n",
+ " 55.506573 | \n",
" 0.000021 | \n",
- " 0.056582 | \n",
- " 9.015873e-05 | \n",
- " 0.028360 | \n",
- " 0.000999 | \n",
- " 1.000084 | \n",
+ " 0.059201 | \n",
+ " 0.000089 | \n",
+ " 0.029668 | \n",
+ " 0.001002 | \n",
+ " 1.000227 | \n",
"
\n",
" \n",
- " | 453599 | \n",
- " 111.010864 | \n",
- " 55.506218 | \n",
- " 0.041696 | \n",
- " 0.150536 | \n",
- " -6.480219e-08 | \n",
- " 0.033591 | \n",
- " 1.006944 | \n",
- " -0.000072 | \n",
+ " 431882 | \n",
+ " 111.012390 | \n",
+ " 55.506599 | \n",
+ " 0.000015 | \n",
+ " 0.043200 | \n",
+ " 0.000096 | \n",
+ " 0.021682 | \n",
+ " 0.001003 | \n",
+ " 1.000601 | \n",
+ "
\n",
+ " \n",
+ " | 431883 | \n",
+ " 111.012375 | \n",
+ " 55.506573 | \n",
+ " 0.000021 | \n",
+ " 0.059442 | \n",
+ " 0.000089 | \n",
+ " 0.029788 | \n",
+ " 0.001006 | \n",
+ " 1.000706 | \n",
+ "
\n",
+ " \n",
+ " | 431884 | \n",
+ " 111.012329 | \n",
+ " 55.506592 | \n",
+ " 0.000017 | \n",
+ " 0.048028 | \n",
+ " 0.000093 | \n",
+ " 0.024095 | \n",
+ " 0.001003 | \n",
+ " 1.000729 | \n",
+ "
\n",
+ " \n",
+ " | 431885 | \n",
+ " 111.012352 | \n",
+ " 55.506573 | \n",
+ " 0.000021 | \n",
+ " 0.059048 | \n",
+ " 0.000089 | \n",
+ " 0.029592 | \n",
+ " 0.001007 | \n",
+ " 1.000770 | \n",
"
\n",
" \n",
"\n",
- "453600 rows × 8 columns
\n",
+ "431886 rows × 8 columns
\n",
""
],
"text/plain": [
- " H O Ba Cl S Sr \\\n",
- "0 111.012405 55.506626 0.000005 0.033089 1.027101e-04 0.016652 \n",
- "1 111.012466 55.506611 0.000014 0.039325 9.818448e-05 0.019741 \n",
- "2 111.012413 55.506592 0.000019 0.047933 9.349755e-05 0.024046 \n",
- "3 111.012444 55.506565 0.000026 0.066846 8.691217e-05 0.033495 \n",
- "4 111.012314 55.506802 -0.000003 0.011493 1.465212e-04 0.005892 \n",
- "... ... ... ... ... ... ... \n",
- "453595 111.012428 55.506592 0.000019 0.048117 9.338620e-05 0.024139 \n",
- "453596 111.012207 55.506775 -0.000004 0.013115 1.393944e-04 0.006700 \n",
- "453597 111.012375 55.506496 0.000076 0.108388 6.973010e-05 0.054192 \n",
- "453598 111.012413 55.506577 0.000021 0.056582 9.015873e-05 0.028360 \n",
- "453599 111.010864 55.506218 0.041696 0.150536 -6.480219e-08 0.033591 \n",
+ " H O Ba Cl S Sr \\\n",
+ "0 111.012451 55.506569 0.000023 0.064478 0.000088 0.032301 \n",
+ "1 111.012566 55.506607 0.000014 0.040900 0.000097 0.020535 \n",
+ "2 111.012398 55.506557 0.000026 0.072086 0.000086 0.036106 \n",
+ "3 111.012497 55.506580 0.000019 0.053724 0.000091 0.026933 \n",
+ "4 111.012413 55.506561 0.000024 0.068850 0.000086 0.034488 \n",
+ "... ... ... ... ... ... ... \n",
+ "431881 111.012444 55.506573 0.000021 0.059201 0.000089 0.029668 \n",
+ "431882 111.012390 55.506599 0.000015 0.043200 0.000096 0.021682 \n",
+ "431883 111.012375 55.506573 0.000021 0.059442 0.000089 0.029788 \n",
+ "431884 111.012329 55.506592 0.000017 0.048028 0.000093 0.024095 \n",
+ "431885 111.012352 55.506573 0.000021 0.059048 0.000089 0.029592 \n",
"\n",
" Barite Celestite \n",
- "0 0.001007 1.000499 \n",
- "1 0.000999 1.000658 \n",
- "2 0.001000 1.000488 \n",
- "3 0.001000 1.000390 \n",
- "4 0.001008 1.000547 \n",
+ "0 0.001007 1.000674 \n",
+ "1 0.000996 1.000632 \n",
+ "2 0.001020 1.000213 \n",
+ "3 0.001002 1.000540 \n",
+ "4 0.001008 1.000764 \n",
"... ... ... \n",
- "453595 0.001000 1.000609 \n",
- "453596 0.001010 1.000573 \n",
- "453597 0.104940 0.891979 \n",
- "453598 0.000999 1.000084 \n",
- "453599 1.006944 -0.000072 \n",
+ "431881 0.001002 1.000227 \n",
+ "431882 0.001003 1.000601 \n",
+ "431883 0.001006 1.000706 \n",
+ "431884 0.001003 1.000729 \n",
+ "431885 0.001007 1.000770 \n",
"\n",
- "[453600 rows x 8 columns]"
+ "[431886 rows x 8 columns]"
]
},
- "execution_count": 15,
+ "execution_count": 18,
"metadata": {},
"output_type": "execute_result"
}
@@ -827,7 +4201,7 @@
},
{
"cell_type": "code",
- "execution_count": 16,
+ "execution_count": null,
"metadata": {},
"outputs": [
{
@@ -1029,16 +4403,16 @@
},
{
"cell_type": "code",
- "execution_count": 17,
+ "execution_count": null,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
- "\u001b[1m3938/3938\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m5s\u001b[0m 1ms/step\n",
- "1.4382436864732173e-11\n",
- "2.354905159762666e-10\n"
+ "\u001b[1m3938/3938\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m4s\u001b[0m 958us/step\n",
+ "1.9593958053287786e-10\n",
+ "4.6533221720324036e-11\n"
]
}
],
@@ -1048,7 +4422,7 @@
},
{
"cell_type": "code",
- "execution_count": 18,
+ "execution_count": null,
"metadata": {},
"outputs": [],
"source": [
@@ -1057,7 +4431,7 @@
},
{
"cell_type": "code",
- "execution_count": 19,
+ "execution_count": null,
"metadata": {},
"outputs": [],
"source": [
@@ -1066,7 +4440,7 @@
},
{
"cell_type": "code",
- "execution_count": 20,
+ "execution_count": null,
"metadata": {},
"outputs": [],
"source": [
@@ -1077,23 +4451,23 @@
},
{
"cell_type": "code",
- "execution_count": 21,
+ "execution_count": null,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
- "0.8275611831239678\n"
+ "0.727858131891964\n"
]
},
{
"data": {
"text/plain": [
- "0.00032711808963035657"
+ "0.0"
]
},
- "execution_count": 21,
+ "execution_count": 23,
"metadata": {},
"output_type": "execute_result"
}
@@ -1105,7 +4479,7 @@
},
{
"cell_type": "code",
- "execution_count": 22,
+ "execution_count": null,
"metadata": {},
"outputs": [
{
@@ -1125,7 +4499,7 @@
},
{
"cell_type": "code",
- "execution_count": 87,
+ "execution_count": null,
"metadata": {},
"outputs": [],
"source": [
@@ -1135,7 +4509,7 @@
},
{
"cell_type": "code",
- "execution_count": 88,
+ "execution_count": null,
"metadata": {},
"outputs": [
{
@@ -1154,7 +4528,7 @@
},
{
"cell_type": "code",
- "execution_count": 89,
+ "execution_count": null,
"metadata": {},
"outputs": [],
"source": [
@@ -1163,7 +4537,7 @@
},
{
"cell_type": "code",
- "execution_count": 118,
+ "execution_count": null,
"metadata": {},
"outputs": [
{
@@ -1183,7 +4557,7 @@
},
{
"cell_type": "code",
- "execution_count": 104,
+ "execution_count": null,
"metadata": {},
"outputs": [],
"source": [
@@ -1194,7 +4568,7 @@
},
{
"cell_type": "code",
- "execution_count": 223,
+ "execution_count": null,
"metadata": {},
"outputs": [
{
@@ -1252,7 +4626,7 @@
},
{
"cell_type": "code",
- "execution_count": 24,
+ "execution_count": null,
"metadata": {},
"outputs": [
{
@@ -1391,7 +4765,7 @@
},
{
"cell_type": "code",
- "execution_count": 25,
+ "execution_count": null,
"metadata": {},
"outputs": [
{
@@ -1417,7 +4791,7 @@
},
{
"cell_type": "code",
- "execution_count": 14,
+ "execution_count": null,
"metadata": {},
"outputs": [
{
@@ -1449,7 +4823,7 @@
},
{
"cell_type": "code",
- "execution_count": 31,
+ "execution_count": null,
"metadata": {},
"outputs": [
{
@@ -1477,7 +4851,7 @@
},
{
"cell_type": "code",
- "execution_count": 32,
+ "execution_count": null,
"metadata": {},
"outputs": [
{
@@ -1505,7 +4879,7 @@
},
{
"cell_type": "code",
- "execution_count": 33,
+ "execution_count": null,
"metadata": {},
"outputs": [
{
@@ -1540,7 +4914,7 @@
},
{
"cell_type": "code",
- "execution_count": 53,
+ "execution_count": null,
"metadata": {},
"outputs": [],
"source": [
@@ -1551,7 +4925,7 @@
],
"metadata": {
"kernelspec": {
- "display_name": "ai",
+ "display_name": "training",
"language": "python",
"name": "python3"
},
@@ -1565,7 +4939,7 @@
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
- "version": "3.12.8"
+ "version": "3.11.11"
}
},
"nbformat": 4,
diff --git a/src/preprocessing.py b/src/preprocessing.py
index 413e203..0c0d429 100644
--- a/src/preprocessing.py
+++ b/src/preprocessing.py
@@ -110,10 +110,17 @@ def custom_loss(preprocess, column_dict, h1, h2, h3, scaler_type="minmax", loss_
if scaler_type == "minmax":
predicted_inverse = predicted * scale_y + min_y
results_inverse = results * scale_X + min_X
-
+
+ # inverse standard scaling
elif scaler_type == "standard":
predicted_inverse = predicted * scale_y + mean_y
results_inverse = results * scale_X + mean_X
+
+
+ # apply exp1m on the columns of predicted_inverse and results_inverse
+ predicted_inverse = tf.math.expm1(predicted_inverse)
+ results_inverse = tf.math.expm1(results_inverse)
+ print(predicted_inverse)
# mass balance
dBa = tf.keras.backend.abs(
@@ -124,11 +131,6 @@ def custom_loss(preprocess, column_dict, h1, h2, h3, scaler_type="minmax", loss_
(predicted_inverse[:, column_dict["Sr"]] + predicted_inverse[:, column_dict["Celestite"]]) -
(results_inverse[:, column_dict["Sr"]] + results_inverse[:, column_dict["Celestite"]])
)
-
- # H/O ratio has to be 2
- # h2o_ratio = tf.keras.backend.abs(
- # (predicted_inverse[:, column_dict["H"]] / predicted_inverse[:, column_dict["O"]]) - 2
- # )
# huber loss
huber_loss = tf.keras.losses.Huber(delta)(results, predicted)
@@ -184,31 +186,8 @@ def mass_balance_metric(preprocess, column_dict, scaler_type="minmax"):
def huber_metric(preprocess, scaler_type="minmax", delta=1.0):
- if scaler_type == "minmax":
- scale_X = tf.convert_to_tensor(preprocess.scaler_X.scale_, dtype=tf.float32)
- min_X = tf.convert_to_tensor(preprocess.scaler_X.min_, dtype=tf.float32)
- scale_y = tf.convert_to_tensor(preprocess.scaler_y.scale_, dtype=tf.float32)
- min_y = tf.convert_to_tensor(preprocess.scaler_y.min_, dtype=tf.float32)
-
- elif scaler_type == "standard":
- scale_X = tf.convert_to_tensor(preprocess.scaler_X.scale_, dtype=tf.float32)
- mean_X = tf.convert_to_tensor(preprocess.scaler_X.mean_, dtype=tf.float32)
- scale_y = tf.convert_to_tensor(preprocess.scaler_y.scale_, dtype=tf.float32)
- mean_y = tf.convert_to_tensor(preprocess.scaler_y.mean_, dtype=tf.float32)
-
-
- def huber(results, predicted):
-
- if scaler_type == "minmax":
- predicted_inverse = predicted * scale_y + min_y
- results_inverse = results * scale_X + min_X
-
- elif scaler_type == "standard":
- predicted_inverse = predicted * scale_y + mean_y
- results_inverse = results * scale_X + mean_X
-
+ def huber(results, predicted):
huber_loss = tf.keras.losses.Huber(delta)(results, predicted)
-
return huber_loss
return huber
@@ -245,8 +224,8 @@ class preprocessing:
def funcTranform(self, X, y):
for key in X.keys():
if "Class" not in key:
- X[key] = X[key].apply(self.func_dict_in[key])
- y[key] = y[key].apply(self.func_dict_in[key])
+ X[key] = X[key].apply(self.func_dict_in)
+ y[key] = y[key].apply(self.func_dict_in)
self.state["log"] = True
return X, y
@@ -255,8 +234,8 @@ class preprocessing:
for key in X.keys():
if "Class" not in key:
- X[key] = X[key].apply(self.func_dict_out[key])
- y[key] = y[key].apply(self.func_dict_out[key])
+ X[key] = X[key].apply(self.func_dict_out)
+ y[key] = y[key].apply(self.func_dict_out)
self.state["log"] = False
return X, y
@@ -363,7 +342,8 @@ class preprocessing:
def scale_inverse(self, X):
if("Class" in X.columns):
- X = pd.concat([self.scaler_X.inverse_transform(X.loc[:, X.columns != "Class"]), X.loc[:, "Class"]], axis=1)
+ print("Class column found")
+ X = pd.concat([pd.DataFrame(self.scaler_X.inverse_transform(X.loc[:, X.columns != "Class"]), columns=X.columns[:-1]), X.loc[:, "Class"]], axis=1)
else:
X = self.scaler_X.inverse_transform(X)
@@ -374,6 +354,12 @@ class preprocessing:
return X_train, y_train, X_test, y_test
+ def class_selection(self, X, y, class_label):
+ X = X[X['Class'] == class_label]
+ y = y[y['Class'] == class_label]
+
+ return X, y
+