diff --git a/EvsP.png b/EvsP.png new file mode 100644 index 0000000000000000000000000000000000000000..846998ca931b899a8375a209289cafafb77f9260 Binary files /dev/null and b/EvsP.png differ diff --git a/MachineLearning_binsInput_30Features.ipynb b/MachineLearning_binsInput_30Features.ipynb new file mode 100644 index 0000000000000000000000000000000000000000..fb86cfcff3f800117b36a159a7432d4a6f022d9d --- /dev/null +++ b/MachineLearning_binsInput_30Features.ipynb @@ -0,0 +1,2995 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [], + "source": [ + "import uproot4\n", + "from matplotlib import pyplot as plt\n", + "from hist import Hist \n", + "import hist\n", + "import awkward as ak\n", + "import numpy as np\n", + "import matplotlib.pyplot as plt\n", + "from matplotlib.gridspec import GridSpec\n", + "import matplotlib.image as mpimg\n", + "import seaborn as sns\n", + "import pandas as pd\n", + "import numpy as np\n", + "from sklearn.ensemble import RandomForestClassifier\n", + "from sklearn.tree import DecisionTreeClassifier\n", + "import keras\n", + "import tensorflow\n", + "from sklearn.metrics import confusion_matrix\n", + "from sklearn.metrics import classification_report\n", + "from sklearn.metrics import roc_auc_score\n", + "from sklearn.metrics import f1_score\n", + "from sklearn.metrics import f1_score\n", + "from sklearn.preprocessing import MinMaxScaler" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Loading mixed Dataset for model validation" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [], + "source": [ + "df_test = pd.read_csv(\"testDataAll_500k_30exp.csv\")" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [], + "source": [ + "X_test = df_test.drop(columns='target')\n", + "y_test = df_test['target']" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "The shape of test data is (12768, 29)\n" + ] + } + ], + "source": [ + "print(f\"The shape of test data is {X_test.shape}\")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Pion " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### File loading" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Total entries is 1000000\n" + ] + } + ], + "source": [ + "file=uproot4.open(\"pion1000k_real.edm4hep.root\")\n", + "\n", + "tree= file[\"events\"]\n", + "\n", + "entries=tree.num_entries\n", + "\n", + "print(f\"Total entries is {entries}\")" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [], + "source": [ + "pos_x= tree['ForwardTRDHits/ForwardTRDHits.position.x'].array()\n", + "pos_y= tree['ForwardTRDHits/ForwardTRDHits.position.y'].array()\n", + "pos_z= tree['ForwardTRDHits/ForwardTRDHits.position.z'].array()\n", + "ene= tree['ForwardTRDHits/ForwardTRDHits.EDep'].array()*(10**6) #to keV\n", + "\n", + "flat_posX=ak.flatten(pos_x)\n", + "flat_posY=ak.flatten(pos_y)\n", + "flat_posZ=ak.flatten(pos_z)\n", + "flat_ene=ak.flatten(ene) " + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": {}, + "outputs": [], + "source": [ + "data2={\n", + " \"position Z pion\":flat_posZ,\n", + " \"energyDeposit_pion\":flat_ene\n", + " \n", + "}\n", + "df_pion=pd.DataFrame(data=data2)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Feature generation and data cleaning" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": {}, + "outputs": [], + "source": [ + "data_idx = df_pion.index[(df_pion['position Z pion']>=3510) & (df_pion['position Z pion']<=3540) & \n", + " (df_pion['energyDeposit_pion']>1000)].tolist()" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": {}, + "outputs": [], + "source": [ + "#removing the defected points\n", + "df_pion=df_pion.drop(data_idx,axis=0)" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "30\n" + ] + }, + { + "data": { + "text/plain": [ + "array([3510. , 3511.03448276, 3512.06896552, 3513.10344828,\n", + " 3514.13793103, 3515.17241379, 3516.20689655, 3517.24137931,\n", + " 3518.27586207, 3519.31034483, 3520.34482759, 3521.37931034,\n", + " 3522.4137931 , 3523.44827586, 3524.48275862, 3525.51724138,\n", + " 3526.55172414, 3527.5862069 , 3528.62068966, 3529.65517241,\n", + " 3530.68965517, 3531.72413793, 3532.75862069, 3533.79310345,\n", + " 3534.82758621, 3535.86206897, 3536.89655172, 3537.93103448,\n", + " 3538.96551724, 3540. ])" + ] + }, + "execution_count": 10, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# The bin points applies to both electrons and pins\n", + "bin_points=np.linspace(3510, 3540, 30, endpoint=True)\n", + "print(len(bin_points))\n", + "bin_points" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": {}, + "outputs": [], + "source": [ + "#Creating array for positionsZ and energy depsoit according to the bins data points\n", + "itr=len(bin_points)\n", + "feature_pion=[]\n", + "for i in range(1,itr):\n", + " temp_pos=(np.array(df_pion[(df_pion['position Z pion']>=bin_points[i-1]) & \n", + " (df_pion['position Z pion']<=bin_points\n", + " [i])]['position Z pion']))\n", + " temp_ene=(np.array(df_pion[(df_pion['position Z pion']>=bin_points[i-1]) & \n", + " (df_pion['position Z pion']<=bin_points\n", + " [i])]['energyDeposit_pion']))\n", + " feature_pion.append((temp_pos,temp_ene))\n", + " \n", + "# [0][0] ---> position\n", + "# [1][1]-----> energy" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "<ipython-input-12-71feffc5ddd5>:1: VisibleDeprecationWarning: Creating an ndarray from ragged nested sequences (which is a list-or-tuple of lists-or-tuples-or ndarrays with different lengths or shapes) is deprecated. If you meant to do this, you must specify 'dtype=object' when creating the ndarray.\n", + " feature_pion = np.array(feature_pion)\n" + ] + } + ], + "source": [ + "feature_pion = np.array(feature_pion)" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Shape of feature pion is (29, 2)\n" + ] + } + ], + "source": [ + "print(f\"Shape of feature pion is {feature_pion.shape}\")" + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Number:- 0 (23049,)\n", + "Number:- 1 (20916,)\n", + "Number:- 2 (20032,)\n", + "Number:- 3 (19187,)\n", + "Number:- 4 (18328,)\n", + "Number:- 5 (18116,)\n", + "Number:- 6 (17556,)\n", + "Number:- 7 (17000,)\n", + "Number:- 8 (16427,)\n", + "Number:- 9 (16248,)\n", + "Number:- 10 (15927,)\n", + "Number:- 11 (15840,)\n", + "Number:- 12 (15461,)\n", + "Number:- 13 (15222,)\n", + "Number:- 14 (15224,)\n", + "Number:- 15 (15054,)\n", + "Number:- 16 (14890,)\n", + "Number:- 17 (14713,)\n", + "Number:- 18 (14420,)\n", + "Number:- 19 (14107,)\n", + "Number:- 20 (13888,)\n", + "Number:- 21 (13894,)\n", + "Number:- 22 (13474,)\n", + "Number:- 23 (13751,)\n", + "Number:- 24 (13397,)\n", + "Number:- 25 (13207,)\n", + "Number:- 26 (13370,)\n", + "Number:- 27 (12967,)\n", + "Number:- 28 (12882,)\n" + ] + } + ], + "source": [ + "#Printing the shape of individual arrays\n", + "itr=feature_pion.shape[0]\n", + "for i in range(0,itr):\n", + " print(f\"Number:- {i} {feature_pion[i][0].shape}\")" + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "metadata": {}, + "outputs": [], + "source": [ + "# Randomly samplin the energy deposits according to the position Z\n", + "# Creating first column of the new data frame\n", + "smallest_len=12882\n", + "temp=np.random.choice(feature_pion[0][1],smallest_len)\n", + "df_pionBin = pd.DataFrame(data={'in0':temp})\n", + "\n", + "for i in range(1,itr):\n", + " df_pionBin[str(\"in\"+str(i))]=np.random.choice(feature_pion[i][1],smallest_len)\n", + " " + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "<div>\n", + "<style scoped>\n", + " .dataframe tbody tr th:only-of-type {\n", + " vertical-align: middle;\n", + " }\n", + "\n", + " .dataframe tbody tr th {\n", + " vertical-align: top;\n", + " }\n", + "\n", + " .dataframe thead th {\n", + " text-align: right;\n", + " }\n", + "</style>\n", + "<table border=\"1\" class=\"dataframe\">\n", + " <thead>\n", + " <tr style=\"text-align: right;\">\n", + " <th></th>\n", + " <th>in0</th>\n", + " <th>in1</th>\n", + " <th>in2</th>\n", + " <th>in3</th>\n", + " <th>in4</th>\n", + " <th>in5</th>\n", + " <th>in6</th>\n", + " <th>in7</th>\n", + " <th>in8</th>\n", + " <th>in9</th>\n", + " <th>...</th>\n", + " <th>in20</th>\n", + " <th>in21</th>\n", + " <th>in22</th>\n", + " <th>in23</th>\n", + " <th>in24</th>\n", + " <th>in25</th>\n", + " <th>in26</th>\n", + " <th>in27</th>\n", + " <th>in28</th>\n", + " <th>target</th>\n", + " </tr>\n", + " </thead>\n", + " <tbody>\n", + " <tr>\n", + " <th>0</th>\n", + " <td>99.390381</td>\n", + " <td>1.358721</td>\n", + " <td>1.794776</td>\n", + " <td>1.117289</td>\n", + " <td>5.530591</td>\n", + " <td>1.414881</td>\n", + " <td>1.228974</td>\n", + " <td>1.100488</td>\n", + " <td>1.624217</td>\n", + " <td>7.845830</td>\n", + " <td>...</td>\n", + " <td>1.374624</td>\n", + " <td>3.648990</td>\n", + " <td>1.984284</td>\n", + " <td>1.289525</td>\n", + " <td>2.608770</td>\n", + " <td>1.089156</td>\n", + " <td>4.655114</td>\n", + " <td>1.202125</td>\n", + " <td>20.015781</td>\n", + " <td>0</td>\n", + " </tr>\n", + " <tr>\n", + " <th>1</th>\n", + " <td>1.851848</td>\n", + " <td>2.408679</td>\n", + " <td>11.812826</td>\n", + " <td>1.692822</td>\n", + " <td>13.642561</td>\n", + " <td>1.294679</td>\n", + " <td>1.431123</td>\n", + " <td>3.825247</td>\n", + " <td>1.832204</td>\n", + " <td>1.050278</td>\n", + " <td>...</td>\n", + " <td>1.185595</td>\n", + " <td>1.276301</td>\n", + " <td>2.590301</td>\n", + " <td>3.587598</td>\n", + " <td>1.594137</td>\n", + " <td>2.551234</td>\n", + " <td>1.077767</td>\n", + " <td>2.314217</td>\n", + " <td>2.132988</td>\n", + " <td>0</td>\n", + " </tr>\n", + " <tr>\n", + " <th>2</th>\n", + " <td>1.063873</td>\n", + " <td>1.308934</td>\n", + " <td>1.582774</td>\n", + " <td>19.682757</td>\n", + " <td>1.129457</td>\n", + " <td>3.985263</td>\n", + " <td>18.493638</td>\n", + " <td>1.660474</td>\n", + " <td>3.221639</td>\n", + " <td>2.235529</td>\n", + " <td>...</td>\n", + " <td>1.705688</td>\n", + " <td>1.797109</td>\n", + " <td>2.012609</td>\n", + " <td>2.520511</td>\n", + " <td>1.167340</td>\n", + " <td>5.604744</td>\n", + " <td>14.977544</td>\n", + " <td>2.764868</td>\n", + " <td>4.949721</td>\n", + " <td>0</td>\n", + " </tr>\n", + " <tr>\n", + " <th>3</th>\n", + " <td>2.314599</td>\n", + " <td>1.980319</td>\n", + " <td>1.446085</td>\n", + " <td>3.837313</td>\n", + " <td>1.774243</td>\n", + " <td>3.342167</td>\n", + " <td>2.389258</td>\n", + " <td>1.039139</td>\n", + " <td>3.174224</td>\n", + " <td>1.503907</td>\n", + " <td>...</td>\n", + " <td>1.002567</td>\n", + " <td>1.841061</td>\n", + " <td>1.235096</td>\n", + " <td>3.801699</td>\n", + " <td>1.939783</td>\n", + " <td>1.036920</td>\n", + " <td>6.374399</td>\n", + " <td>1.204326</td>\n", + " <td>3.509959</td>\n", + " <td>0</td>\n", + " </tr>\n", + " <tr>\n", + " <th>4</th>\n", + " <td>1.593321</td>\n", + " <td>7.971001</td>\n", + " <td>1.062046</td>\n", + " <td>7.197640</td>\n", + " <td>1.864911</td>\n", + " <td>11.418695</td>\n", + " <td>4.738466</td>\n", + " <td>1.670784</td>\n", + " <td>11.938234</td>\n", + " <td>6.511469</td>\n", + " <td>...</td>\n", + " <td>8.494744</td>\n", + " <td>3.461462</td>\n", + " <td>1.329122</td>\n", + " <td>2.440172</td>\n", + " <td>1.111974</td>\n", + " <td>1.179368</td>\n", + " <td>2.465917</td>\n", + " <td>2.618937</td>\n", + " <td>1.496768</td>\n", + " <td>0</td>\n", + " </tr>\n", + " <tr>\n", + " <th>...</th>\n", + " <td>...</td>\n", + " <td>...</td>\n", + " <td>...</td>\n", + " <td>...</td>\n", + " <td>...</td>\n", + " <td>...</td>\n", + " <td>...</td>\n", + " <td>...</td>\n", + " <td>...</td>\n", + " <td>...</td>\n", + " <td>...</td>\n", + " <td>...</td>\n", + " <td>...</td>\n", + " <td>...</td>\n", + " <td>...</td>\n", + " <td>...</td>\n", + " <td>...</td>\n", + " <td>...</td>\n", + " <td>...</td>\n", + " <td>...</td>\n", + " <td>...</td>\n", + " </tr>\n", + " <tr>\n", + " <th>12877</th>\n", + " <td>1.039198</td>\n", + " <td>2.531642</td>\n", + " <td>7.257586</td>\n", + " <td>2.067229</td>\n", + " <td>6.084874</td>\n", + " <td>1.320209</td>\n", + " <td>1.239421</td>\n", + " <td>3.150902</td>\n", + " <td>1.355268</td>\n", + " <td>7.897010</td>\n", + " <td>...</td>\n", + " <td>3.839145</td>\n", + " <td>1.392211</td>\n", + " <td>2.078668</td>\n", + " <td>1.397068</td>\n", + " <td>6.729046</td>\n", + " <td>1.998571</td>\n", + " <td>2.295608</td>\n", + " <td>1.836114</td>\n", + " <td>4.673814</td>\n", + " <td>0</td>\n", + " </tr>\n", + " <tr>\n", + " <th>12878</th>\n", + " <td>31.427127</td>\n", + " <td>3.137616</td>\n", + " <td>5.327185</td>\n", + " <td>1.744720</td>\n", + " <td>1.347757</td>\n", + " <td>1.355221</td>\n", + " <td>2.177313</td>\n", + " <td>1.183360</td>\n", + " <td>1.017218</td>\n", + " <td>9.397222</td>\n", + " <td>...</td>\n", + " <td>1.278452</td>\n", + " <td>1.351399</td>\n", + " <td>1.273799</td>\n", + " <td>2.728914</td>\n", + " <td>1.188071</td>\n", + " <td>2.089849</td>\n", + " <td>1.305492</td>\n", + " <td>1.487318</td>\n", + " <td>2.857626</td>\n", + " <td>0</td>\n", + " </tr>\n", + " <tr>\n", + " <th>12879</th>\n", + " <td>3.727543</td>\n", + " <td>5.077481</td>\n", + " <td>1.645886</td>\n", + " <td>13.854094</td>\n", + " <td>1.044044</td>\n", + " <td>3.044608</td>\n", + " <td>1.012556</td>\n", + " <td>3.528345</td>\n", + " <td>1.916340</td>\n", + " <td>1.922298</td>\n", + " <td>...</td>\n", + " <td>3.906141</td>\n", + " <td>1.114425</td>\n", + " <td>3.080813</td>\n", + " <td>1.633633</td>\n", + " <td>1.500489</td>\n", + " <td>9.260344</td>\n", + " <td>1.784277</td>\n", + " <td>1.362065</td>\n", + " <td>9.009044</td>\n", + " <td>0</td>\n", + " </tr>\n", + " <tr>\n", + " <th>12880</th>\n", + " <td>183.152733</td>\n", + " <td>3.309528</td>\n", + " <td>1.508301</td>\n", + " <td>1.018432</td>\n", + " <td>3.267637</td>\n", + " <td>2.956784</td>\n", + " <td>7.289199</td>\n", + " <td>1.266873</td>\n", + " <td>1.187660</td>\n", + " <td>1.234661</td>\n", + " <td>...</td>\n", + " <td>1.245500</td>\n", + " <td>3.058408</td>\n", + " <td>1.824053</td>\n", + " <td>1.022391</td>\n", + " <td>1.070111</td>\n", + " <td>5.954696</td>\n", + " <td>1.308339</td>\n", + " <td>1.175027</td>\n", + " <td>9.758899</td>\n", + " <td>0</td>\n", + " </tr>\n", + " <tr>\n", + " <th>12881</th>\n", + " <td>1.581556</td>\n", + " <td>12.558449</td>\n", + " <td>1.676512</td>\n", + " <td>6.424415</td>\n", + " <td>1.169316</td>\n", + " <td>44.380125</td>\n", + " <td>2.025925</td>\n", + " <td>1.460033</td>\n", + " <td>1.618831</td>\n", + " <td>6.233805</td>\n", + " <td>...</td>\n", + " <td>1.617864</td>\n", + " <td>1.502209</td>\n", + " <td>1.444281</td>\n", + " <td>1.604443</td>\n", + " <td>1.072749</td>\n", + " <td>4.669730</td>\n", + " <td>1.824029</td>\n", + " <td>1.285131</td>\n", + " <td>1.009629</td>\n", + " <td>0</td>\n", + " </tr>\n", + " </tbody>\n", + "</table>\n", + "<p>12882 rows × 30 columns</p>\n", + "</div>" + ], + "text/plain": [ + " in0 in1 in2 in3 in4 in5 \\\n", + "0 99.390381 1.358721 1.794776 1.117289 5.530591 1.414881 \n", + "1 1.851848 2.408679 11.812826 1.692822 13.642561 1.294679 \n", + "2 1.063873 1.308934 1.582774 19.682757 1.129457 3.985263 \n", + "3 2.314599 1.980319 1.446085 3.837313 1.774243 3.342167 \n", + "4 1.593321 7.971001 1.062046 7.197640 1.864911 11.418695 \n", + "... ... ... ... ... ... ... \n", + "12877 1.039198 2.531642 7.257586 2.067229 6.084874 1.320209 \n", + "12878 31.427127 3.137616 5.327185 1.744720 1.347757 1.355221 \n", + "12879 3.727543 5.077481 1.645886 13.854094 1.044044 3.044608 \n", + "12880 183.152733 3.309528 1.508301 1.018432 3.267637 2.956784 \n", + "12881 1.581556 12.558449 1.676512 6.424415 1.169316 44.380125 \n", + "\n", + " in6 in7 in8 in9 ... in20 in21 \\\n", + "0 1.228974 1.100488 1.624217 7.845830 ... 1.374624 3.648990 \n", + "1 1.431123 3.825247 1.832204 1.050278 ... 1.185595 1.276301 \n", + "2 18.493638 1.660474 3.221639 2.235529 ... 1.705688 1.797109 \n", + "3 2.389258 1.039139 3.174224 1.503907 ... 1.002567 1.841061 \n", + "4 4.738466 1.670784 11.938234 6.511469 ... 8.494744 3.461462 \n", + "... ... ... ... ... ... ... ... \n", + "12877 1.239421 3.150902 1.355268 7.897010 ... 3.839145 1.392211 \n", + "12878 2.177313 1.183360 1.017218 9.397222 ... 1.278452 1.351399 \n", + "12879 1.012556 3.528345 1.916340 1.922298 ... 3.906141 1.114425 \n", + "12880 7.289199 1.266873 1.187660 1.234661 ... 1.245500 3.058408 \n", + "12881 2.025925 1.460033 1.618831 6.233805 ... 1.617864 1.502209 \n", + "\n", + " in22 in23 in24 in25 in26 in27 in28 \\\n", + "0 1.984284 1.289525 2.608770 1.089156 4.655114 1.202125 20.015781 \n", + "1 2.590301 3.587598 1.594137 2.551234 1.077767 2.314217 2.132988 \n", + "2 2.012609 2.520511 1.167340 5.604744 14.977544 2.764868 4.949721 \n", + "3 1.235096 3.801699 1.939783 1.036920 6.374399 1.204326 3.509959 \n", + "4 1.329122 2.440172 1.111974 1.179368 2.465917 2.618937 1.496768 \n", + "... ... ... ... ... ... ... ... \n", + "12877 2.078668 1.397068 6.729046 1.998571 2.295608 1.836114 4.673814 \n", + "12878 1.273799 2.728914 1.188071 2.089849 1.305492 1.487318 2.857626 \n", + "12879 3.080813 1.633633 1.500489 9.260344 1.784277 1.362065 9.009044 \n", + "12880 1.824053 1.022391 1.070111 5.954696 1.308339 1.175027 9.758899 \n", + "12881 1.444281 1.604443 1.072749 4.669730 1.824029 1.285131 1.009629 \n", + "\n", + " target \n", + "0 0 \n", + "1 0 \n", + "2 0 \n", + "3 0 \n", + "4 0 \n", + "... ... \n", + "12877 0 \n", + "12878 0 \n", + "12879 0 \n", + "12880 0 \n", + "12881 0 \n", + "\n", + "[12882 rows x 30 columns]" + ] + }, + "execution_count": 16, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "#Generating equal number of truth data points\n", + "pion_truth=[]\n", + "for i in range(0,smallest_len):\n", + " pion_truth.append(0)\n", + "\n", + "#Adding the pion truth column\n", + "df_pionBin['target']=pion_truth\n", + "df_pionBin" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Electron " + ] + }, + { + "cell_type": "code", + "execution_count": 17, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Total entries is 1000000\n" + ] + } + ], + "source": [ + "file2=uproot4.open(\"ele1000k_real.edm4hep.root\")\n", + "\n", + "tree2= file2[\"events\"]\n", + "\n", + "entries2=tree2.num_entries\n", + "\n", + "print(f\"Total entries is {entries2}\")" + ] + }, + { + "cell_type": "code", + "execution_count": 18, + "metadata": {}, + "outputs": [], + "source": [ + "pos_xE= tree2['ForwardTRDHits/ForwardTRDHits.position.x'].array()\n", + "pos_yE= tree2['ForwardTRDHits/ForwardTRDHits.position.y'].array()\n", + "pos_zE= tree2['ForwardTRDHits/ForwardTRDHits.position.z'].array()\n", + "ene_E= tree2['ForwardTRDHits/ForwardTRDHits.EDep'].array()*(10**6) #to keV\n", + "\n", + "flat_posXE=ak.flatten(pos_xE)\n", + "flat_posYE=ak.flatten(pos_yE)\n", + "flat_posZE=ak.flatten(pos_zE)\n", + "flat_eneE=ak.flatten(ene_E) " + ] + }, + { + "cell_type": "code", + "execution_count": 19, + "metadata": {}, + "outputs": [], + "source": [ + "data1={\n", + " \"position Z ele\":flat_posZE,\n", + " \"energyDeposit_ele\":flat_eneE\n", + " \n", + "}\n", + "df_ele=pd.DataFrame(data=data1)" + ] + }, + { + "cell_type": "code", + "execution_count": 20, + "metadata": {}, + "outputs": [], + "source": [ + "#Creating array for positionsZ and energy depsoit according to the bins data points\n", + "itr=len(bin_points)\n", + "feature_ele=[]\n", + "for i in range(1,itr):\n", + " temp_posE=(np.array(df_ele[(df_ele['position Z ele']>=bin_points[i-1]) & \n", + " (df_ele['position Z ele']<=bin_points\n", + " [i])]['position Z ele']))\n", + " temp_eneE=(np.array(df_ele[(df_ele['position Z ele']>=bin_points[i-1]) & \n", + " (df_ele['position Z ele']<=bin_points\n", + " [i])]['energyDeposit_ele']))\n", + " feature_ele.append((temp_posE,temp_eneE))\n", + " \n", + "# [0][0] ---> position\n", + "# [1][1]-----> energy" + ] + }, + { + "cell_type": "code", + "execution_count": 21, + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "<ipython-input-21-04bebac0078c>:1: VisibleDeprecationWarning: Creating an ndarray from ragged nested sequences (which is a list-or-tuple of lists-or-tuples-or ndarrays with different lengths or shapes) is deprecated. If you meant to do this, you must specify 'dtype=object' when creating the ndarray.\n", + " feature_ele = np.array(feature_ele)\n" + ] + } + ], + "source": [ + "feature_ele = np.array(feature_ele)" + ] + }, + { + "cell_type": "code", + "execution_count": 22, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Shape of feature ele is (29, 2)\n" + ] + } + ], + "source": [ + "print(f\"Shape of feature ele is {feature_ele.shape}\")" + ] + }, + { + "cell_type": "code", + "execution_count": 23, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Number:- 0 (173536,)\n", + "Number:- 1 (142284,)\n", + "Number:- 2 (120138,)\n", + "Number:- 3 (102199,)\n", + "Number:- 4 (89764,)\n", + "Number:- 5 (80195,)\n", + "Number:- 6 (72857,)\n", + "Number:- 7 (67427,)\n", + "Number:- 8 (63190,)\n", + "Number:- 9 (60033,)\n", + "Number:- 10 (57798,)\n", + "Number:- 11 (55939,)\n", + "Number:- 12 (53927,)\n", + "Number:- 13 (52594,)\n", + "Number:- 14 (52585,)\n", + "Number:- 15 (51392,)\n", + "Number:- 16 (51152,)\n", + "Number:- 17 (50387,)\n", + "Number:- 18 (50212,)\n", + "Number:- 19 (49884,)\n", + "Number:- 20 (49311,)\n", + "Number:- 21 (49074,)\n", + "Number:- 22 (49024,)\n", + "Number:- 23 (49456,)\n", + "Number:- 24 (48604,)\n", + "Number:- 25 (48540,)\n", + "Number:- 26 (48465,)\n", + "Number:- 27 (48099,)\n", + "Number:- 28 (47979,)\n" + ] + } + ], + "source": [ + "#Printing the shape of individual arrays\n", + "itr=feature_ele.shape[0]\n", + "for i in range(0,itr):\n", + " print(f\"Number:- {i} {feature_ele[i][0].shape}\")" + ] + }, + { + "cell_type": "code", + "execution_count": 24, + "metadata": {}, + "outputs": [], + "source": [ + "# Randomly samplin the energy deposits according to the position Z\n", + "# Creating first column of the new data frame\n", + "smallest_len=47979\n", + "tempE=np.random.choice(feature_ele[0][1],smallest_len)\n", + "df_eleBin = pd.DataFrame(data={'in0':tempE})\n", + "\n", + "for i in range(1,itr):\n", + " df_eleBin[str(\"in\"+str(i))]=np.random.choice(feature_ele[i][1],smallest_len)\n", + " " + ] + }, + { + "cell_type": "code", + "execution_count": 25, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "<div>\n", + "<style scoped>\n", + " .dataframe tbody tr th:only-of-type {\n", + " vertical-align: middle;\n", + " }\n", + "\n", + " .dataframe tbody tr th {\n", + " vertical-align: top;\n", + " }\n", + "\n", + " .dataframe thead th {\n", + " text-align: right;\n", + " }\n", + "</style>\n", + "<table border=\"1\" class=\"dataframe\">\n", + " <thead>\n", + " <tr style=\"text-align: right;\">\n", + " <th></th>\n", + " <th>in0</th>\n", + " <th>in1</th>\n", + " <th>in2</th>\n", + " <th>in3</th>\n", + " <th>in4</th>\n", + " <th>in5</th>\n", + " <th>in6</th>\n", + " <th>in7</th>\n", + " <th>in8</th>\n", + " <th>in9</th>\n", + " <th>...</th>\n", + " <th>in20</th>\n", + " <th>in21</th>\n", + " <th>in22</th>\n", + " <th>in23</th>\n", + " <th>in24</th>\n", + " <th>in25</th>\n", + " <th>in26</th>\n", + " <th>in27</th>\n", + " <th>in28</th>\n", + " <th>target</th>\n", + " </tr>\n", + " </thead>\n", + " <tbody>\n", + " <tr>\n", + " <th>0</th>\n", + " <td>13.093444</td>\n", + " <td>1.346144</td>\n", + " <td>14.739175</td>\n", + " <td>5.636590</td>\n", + " <td>1.425617</td>\n", + " <td>1.440704</td>\n", + " <td>3.806684</td>\n", + " <td>2.031596</td>\n", + " <td>12.001562</td>\n", + " <td>1.831196</td>\n", + " <td>...</td>\n", + " <td>1.805253</td>\n", + " <td>1.341549</td>\n", + " <td>2.076435</td>\n", + " <td>2.194344</td>\n", + " <td>1.010873</td>\n", + " <td>1.001803</td>\n", + " <td>4.745355</td>\n", + " <td>9.273259</td>\n", + " <td>6.915572</td>\n", + " <td>1</td>\n", + " </tr>\n", + " <tr>\n", + " <th>1</th>\n", + " <td>15.161722</td>\n", + " <td>11.487216</td>\n", + " <td>14.830151</td>\n", + " <td>14.679372</td>\n", + " <td>6.771622</td>\n", + " <td>1.342169</td>\n", + " <td>10.986273</td>\n", + " <td>2.595998</td>\n", + " <td>1.017968</td>\n", + " <td>2.115972</td>\n", + " <td>...</td>\n", + " <td>21.766449</td>\n", + " <td>3.558880</td>\n", + " <td>2.774285</td>\n", + " <td>1.318201</td>\n", + " <td>1.855516</td>\n", + " <td>1.537803</td>\n", + " <td>2.296186</td>\n", + " <td>2.925824</td>\n", + " <td>3.682501</td>\n", + " <td>1</td>\n", + " </tr>\n", + " <tr>\n", + " <th>2</th>\n", + " <td>13.611666</td>\n", + " <td>17.037864</td>\n", + " <td>1.845764</td>\n", + " <td>1.735124</td>\n", + " <td>1.857131</td>\n", + " <td>3.043850</td>\n", + " <td>3.107853</td>\n", + " <td>1.074553</td>\n", + " <td>14.710394</td>\n", + " <td>1.312976</td>\n", + " <td>...</td>\n", + " <td>1.424868</td>\n", + " <td>1.178671</td>\n", + " <td>6.557468</td>\n", + " <td>5.735378</td>\n", + " <td>1.516246</td>\n", + " <td>3.273487</td>\n", + " <td>2.923805</td>\n", + " <td>1.503804</td>\n", + " <td>1.075231</td>\n", + " <td>1</td>\n", + " </tr>\n", + " <tr>\n", + " <th>3</th>\n", + " <td>2.553848</td>\n", + " <td>13.147331</td>\n", + " <td>21.570151</td>\n", + " <td>19.098563</td>\n", + " <td>7.635237</td>\n", + " <td>2.353764</td>\n", + " <td>4.975900</td>\n", + " <td>11.548703</td>\n", + " <td>9.926492</td>\n", + " <td>1.987690</td>\n", + " <td>...</td>\n", + " <td>2.573646</td>\n", + " <td>1.888843</td>\n", + " <td>1.558123</td>\n", + " <td>1.708603</td>\n", + " <td>1.172546</td>\n", + " <td>7.944781</td>\n", + " <td>1.490361</td>\n", + " <td>1.942587</td>\n", + " <td>2.189687</td>\n", + " <td>1</td>\n", + " </tr>\n", + " <tr>\n", + " <th>4</th>\n", + " <td>2.169147</td>\n", + " <td>9.763184</td>\n", + " <td>3.160552</td>\n", + " <td>4.794355</td>\n", + " <td>5.244932</td>\n", + " <td>2.904468</td>\n", + " <td>1.221390</td>\n", + " <td>18.623754</td>\n", + " <td>1.368158</td>\n", + " <td>1.300394</td>\n", + " <td>...</td>\n", + " <td>4.151040</td>\n", + " <td>5.740467</td>\n", + " <td>2.267707</td>\n", + " <td>9.801783</td>\n", + " <td>1.454320</td>\n", + " <td>1.076277</td>\n", + " <td>1.097234</td>\n", + " <td>2.925328</td>\n", + " <td>55.718545</td>\n", + " <td>1</td>\n", + " </tr>\n", + " <tr>\n", + " <th>...</th>\n", + " <td>...</td>\n", + " <td>...</td>\n", + " <td>...</td>\n", + " <td>...</td>\n", + " <td>...</td>\n", + " <td>...</td>\n", + " <td>...</td>\n", + " <td>...</td>\n", + " <td>...</td>\n", + " <td>...</td>\n", + " <td>...</td>\n", + " <td>...</td>\n", + " <td>...</td>\n", + " <td>...</td>\n", + " <td>...</td>\n", + " <td>...</td>\n", + " <td>...</td>\n", + " <td>...</td>\n", + " <td>...</td>\n", + " <td>...</td>\n", + " <td>...</td>\n", + " </tr>\n", + " <tr>\n", + " <th>47974</th>\n", + " <td>17.838380</td>\n", + " <td>12.045761</td>\n", + " <td>8.465907</td>\n", + " <td>16.584820</td>\n", + " <td>1.670174</td>\n", + " <td>1.592379</td>\n", + " <td>1.968215</td>\n", + " <td>1.445054</td>\n", + " <td>1.562072</td>\n", + " <td>5.917523</td>\n", + " <td>...</td>\n", + " <td>2.601949</td>\n", + " <td>1.046346</td>\n", + " <td>2.998616</td>\n", + " <td>1.011712</td>\n", + " <td>1.588708</td>\n", + " <td>2.912637</td>\n", + " <td>2.321258</td>\n", + " <td>1.216528</td>\n", + " <td>1.099142</td>\n", + " <td>1</td>\n", + " </tr>\n", + " <tr>\n", + " <th>47975</th>\n", + " <td>21.994849</td>\n", + " <td>15.327947</td>\n", + " <td>19.672052</td>\n", + " <td>1.969731</td>\n", + " <td>19.746036</td>\n", + " <td>17.606377</td>\n", + " <td>6.373874</td>\n", + " <td>6.095897</td>\n", + " <td>1.391735</td>\n", + " <td>28.323419</td>\n", + " <td>...</td>\n", + " <td>3.189433</td>\n", + " <td>2.592566</td>\n", + " <td>1.437408</td>\n", + " <td>3.805080</td>\n", + " <td>1.447718</td>\n", + " <td>1.670726</td>\n", + " <td>5.050217</td>\n", + " <td>1.157777</td>\n", + " <td>2.603045</td>\n", + " <td>1</td>\n", + " </tr>\n", + " <tr>\n", + " <th>47976</th>\n", + " <td>17.457032</td>\n", + " <td>15.671370</td>\n", + " <td>15.799586</td>\n", + " <td>10.964981</td>\n", + " <td>1.311263</td>\n", + " <td>1.237227</td>\n", + " <td>3.975339</td>\n", + " <td>1.464436</td>\n", + " <td>1.903818</td>\n", + " <td>1.161755</td>\n", + " <td>...</td>\n", + " <td>3.414660</td>\n", + " <td>2.226209</td>\n", + " <td>2.325256</td>\n", + " <td>17.513426</td>\n", + " <td>1.224515</td>\n", + " <td>20.186406</td>\n", + " <td>3.000528</td>\n", + " <td>5.106187</td>\n", + " <td>1.485126</td>\n", + " <td>1</td>\n", + " </tr>\n", + " <tr>\n", + " <th>47977</th>\n", + " <td>1.114140</td>\n", + " <td>15.561718</td>\n", + " <td>8.745877</td>\n", + " <td>7.543946</td>\n", + " <td>12.739644</td>\n", + " <td>15.171360</td>\n", + " <td>6.290133</td>\n", + " <td>19.624295</td>\n", + " <td>4.519724</td>\n", + " <td>13.567201</td>\n", + " <td>...</td>\n", + " <td>1.200783</td>\n", + " <td>2.454861</td>\n", + " <td>1.222550</td>\n", + " <td>15.234652</td>\n", + " <td>1.467184</td>\n", + " <td>1.254256</td>\n", + " <td>1.169946</td>\n", + " <td>3.912523</td>\n", + " <td>5.227465</td>\n", + " <td>1</td>\n", + " </tr>\n", + " <tr>\n", + " <th>47978</th>\n", + " <td>1.332144</td>\n", + " <td>16.109972</td>\n", + " <td>4.867350</td>\n", + " <td>12.838045</td>\n", + " <td>1.334858</td>\n", + " <td>2.061917</td>\n", + " <td>10.388168</td>\n", + " <td>1.557445</td>\n", + " <td>1.649132</td>\n", + " <td>4.869783</td>\n", + " <td>...</td>\n", + " <td>4.659372</td>\n", + " <td>4.170268</td>\n", + " <td>27.166467</td>\n", + " <td>1.257684</td>\n", + " <td>11.866605</td>\n", + " <td>1.046613</td>\n", + " <td>6.042935</td>\n", + " <td>1.162315</td>\n", + " <td>1.279418</td>\n", + " <td>1</td>\n", + " </tr>\n", + " </tbody>\n", + "</table>\n", + "<p>47979 rows × 30 columns</p>\n", + "</div>" + ], + "text/plain": [ + " in0 in1 in2 in3 in4 in5 \\\n", + "0 13.093444 1.346144 14.739175 5.636590 1.425617 1.440704 \n", + "1 15.161722 11.487216 14.830151 14.679372 6.771622 1.342169 \n", + "2 13.611666 17.037864 1.845764 1.735124 1.857131 3.043850 \n", + "3 2.553848 13.147331 21.570151 19.098563 7.635237 2.353764 \n", + "4 2.169147 9.763184 3.160552 4.794355 5.244932 2.904468 \n", + "... ... ... ... ... ... ... \n", + "47974 17.838380 12.045761 8.465907 16.584820 1.670174 1.592379 \n", + "47975 21.994849 15.327947 19.672052 1.969731 19.746036 17.606377 \n", + "47976 17.457032 15.671370 15.799586 10.964981 1.311263 1.237227 \n", + "47977 1.114140 15.561718 8.745877 7.543946 12.739644 15.171360 \n", + "47978 1.332144 16.109972 4.867350 12.838045 1.334858 2.061917 \n", + "\n", + " in6 in7 in8 in9 ... in20 in21 \\\n", + "0 3.806684 2.031596 12.001562 1.831196 ... 1.805253 1.341549 \n", + "1 10.986273 2.595998 1.017968 2.115972 ... 21.766449 3.558880 \n", + "2 3.107853 1.074553 14.710394 1.312976 ... 1.424868 1.178671 \n", + "3 4.975900 11.548703 9.926492 1.987690 ... 2.573646 1.888843 \n", + "4 1.221390 18.623754 1.368158 1.300394 ... 4.151040 5.740467 \n", + "... ... ... ... ... ... ... ... \n", + "47974 1.968215 1.445054 1.562072 5.917523 ... 2.601949 1.046346 \n", + "47975 6.373874 6.095897 1.391735 28.323419 ... 3.189433 2.592566 \n", + "47976 3.975339 1.464436 1.903818 1.161755 ... 3.414660 2.226209 \n", + "47977 6.290133 19.624295 4.519724 13.567201 ... 1.200783 2.454861 \n", + "47978 10.388168 1.557445 1.649132 4.869783 ... 4.659372 4.170268 \n", + "\n", + " in22 in23 in24 in25 in26 in27 \\\n", + "0 2.076435 2.194344 1.010873 1.001803 4.745355 9.273259 \n", + "1 2.774285 1.318201 1.855516 1.537803 2.296186 2.925824 \n", + "2 6.557468 5.735378 1.516246 3.273487 2.923805 1.503804 \n", + "3 1.558123 1.708603 1.172546 7.944781 1.490361 1.942587 \n", + "4 2.267707 9.801783 1.454320 1.076277 1.097234 2.925328 \n", + "... ... ... ... ... ... ... \n", + "47974 2.998616 1.011712 1.588708 2.912637 2.321258 1.216528 \n", + "47975 1.437408 3.805080 1.447718 1.670726 5.050217 1.157777 \n", + "47976 2.325256 17.513426 1.224515 20.186406 3.000528 5.106187 \n", + "47977 1.222550 15.234652 1.467184 1.254256 1.169946 3.912523 \n", + "47978 27.166467 1.257684 11.866605 1.046613 6.042935 1.162315 \n", + "\n", + " in28 target \n", + "0 6.915572 1 \n", + "1 3.682501 1 \n", + "2 1.075231 1 \n", + "3 2.189687 1 \n", + "4 55.718545 1 \n", + "... ... ... \n", + "47974 1.099142 1 \n", + "47975 2.603045 1 \n", + "47976 1.485126 1 \n", + "47977 5.227465 1 \n", + "47978 1.279418 1 \n", + "\n", + "[47979 rows x 30 columns]" + ] + }, + "execution_count": 25, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "#Generating equal number of truth data points\n", + "ele_truth=[]\n", + "for i in range(0,smallest_len):\n", + " ele_truth.append(1)\n", + "\n", + "#Adding the pion truth column\n", + "df_eleBin['target']=ele_truth\n", + "df_eleBin" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Merging electrons and pions for training" + ] + }, + { + "cell_type": "code", + "execution_count": 26, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "<div>\n", + "<style scoped>\n", + " .dataframe tbody tr th:only-of-type {\n", + " vertical-align: middle;\n", + " }\n", + "\n", + " .dataframe tbody tr th {\n", + " vertical-align: top;\n", + " }\n", + "\n", + " .dataframe thead th {\n", + " text-align: right;\n", + " }\n", + "</style>\n", + "<table border=\"1\" class=\"dataframe\">\n", + " <thead>\n", + " <tr style=\"text-align: right;\">\n", + " <th></th>\n", + " <th>in0</th>\n", + " <th>in1</th>\n", + " <th>in2</th>\n", + " <th>in3</th>\n", + " <th>in4</th>\n", + " <th>in5</th>\n", + " <th>in6</th>\n", + " <th>in7</th>\n", + " <th>in8</th>\n", + " <th>in9</th>\n", + " <th>...</th>\n", + " <th>in20</th>\n", + " <th>in21</th>\n", + " <th>in22</th>\n", + " <th>in23</th>\n", + " <th>in24</th>\n", + " <th>in25</th>\n", + " <th>in26</th>\n", + " <th>in27</th>\n", + " <th>in28</th>\n", + " <th>target</th>\n", + " </tr>\n", + " </thead>\n", + " <tbody>\n", + " <tr>\n", + " <th>0</th>\n", + " <td>13.093444</td>\n", + " <td>1.346144</td>\n", + " <td>14.739175</td>\n", + " <td>5.636590</td>\n", + " <td>1.425617</td>\n", + " <td>1.440704</td>\n", + " <td>3.806684</td>\n", + " <td>2.031596</td>\n", + " <td>12.001562</td>\n", + " <td>1.831196</td>\n", + " <td>...</td>\n", + " <td>1.805253</td>\n", + " <td>1.341549</td>\n", + " <td>2.076435</td>\n", + " <td>2.194344</td>\n", + " <td>1.010873</td>\n", + " <td>1.001803</td>\n", + " <td>4.745355</td>\n", + " <td>9.273259</td>\n", + " <td>6.915572</td>\n", + " <td>1</td>\n", + " </tr>\n", + " <tr>\n", + " <th>1</th>\n", + " <td>15.161722</td>\n", + " <td>11.487216</td>\n", + " <td>14.830151</td>\n", + " <td>14.679372</td>\n", + " <td>6.771622</td>\n", + " <td>1.342169</td>\n", + " <td>10.986273</td>\n", + " <td>2.595998</td>\n", + " <td>1.017968</td>\n", + " <td>2.115972</td>\n", + " <td>...</td>\n", + " <td>21.766449</td>\n", + " <td>3.558880</td>\n", + " <td>2.774285</td>\n", + " <td>1.318201</td>\n", + " <td>1.855516</td>\n", + " <td>1.537803</td>\n", + " <td>2.296186</td>\n", + " <td>2.925824</td>\n", + " <td>3.682501</td>\n", + " <td>1</td>\n", + " </tr>\n", + " <tr>\n", + " <th>2</th>\n", + " <td>13.611666</td>\n", + " <td>17.037864</td>\n", + " <td>1.845764</td>\n", + " <td>1.735124</td>\n", + " <td>1.857131</td>\n", + " <td>3.043850</td>\n", + " <td>3.107853</td>\n", + " <td>1.074553</td>\n", + " <td>14.710394</td>\n", + " <td>1.312976</td>\n", + " <td>...</td>\n", + " <td>1.424868</td>\n", + " <td>1.178671</td>\n", + " <td>6.557468</td>\n", + " <td>5.735378</td>\n", + " <td>1.516246</td>\n", + " <td>3.273487</td>\n", + " <td>2.923805</td>\n", + " <td>1.503804</td>\n", + " <td>1.075231</td>\n", + " <td>1</td>\n", + " </tr>\n", + " <tr>\n", + " <th>3</th>\n", + " <td>2.553848</td>\n", + " <td>13.147331</td>\n", + " <td>21.570151</td>\n", + " <td>19.098563</td>\n", + " <td>7.635237</td>\n", + " <td>2.353764</td>\n", + " <td>4.975900</td>\n", + " <td>11.548703</td>\n", + " <td>9.926492</td>\n", + " <td>1.987690</td>\n", + " <td>...</td>\n", + " <td>2.573646</td>\n", + " <td>1.888843</td>\n", + " <td>1.558123</td>\n", + " <td>1.708603</td>\n", + " <td>1.172546</td>\n", + " <td>7.944781</td>\n", + " <td>1.490361</td>\n", + " <td>1.942587</td>\n", + " <td>2.189687</td>\n", + " <td>1</td>\n", + " </tr>\n", + " <tr>\n", + " <th>4</th>\n", + " <td>2.169147</td>\n", + " <td>9.763184</td>\n", + " <td>3.160552</td>\n", + " <td>4.794355</td>\n", + " <td>5.244932</td>\n", + " <td>2.904468</td>\n", + " <td>1.221390</td>\n", + " <td>18.623754</td>\n", + " <td>1.368158</td>\n", + " <td>1.300394</td>\n", + " <td>...</td>\n", + " <td>4.151040</td>\n", + " <td>5.740467</td>\n", + " <td>2.267707</td>\n", + " <td>9.801783</td>\n", + " <td>1.454320</td>\n", + " <td>1.076277</td>\n", + " <td>1.097234</td>\n", + " <td>2.925328</td>\n", + " <td>55.718545</td>\n", + " <td>1</td>\n", + " </tr>\n", + " <tr>\n", + " <th>...</th>\n", + " <td>...</td>\n", + " <td>...</td>\n", + " <td>...</td>\n", + " <td>...</td>\n", + " <td>...</td>\n", + " <td>...</td>\n", + " <td>...</td>\n", + " <td>...</td>\n", + " <td>...</td>\n", + " <td>...</td>\n", + " <td>...</td>\n", + " <td>...</td>\n", + " <td>...</td>\n", + " <td>...</td>\n", + " <td>...</td>\n", + " <td>...</td>\n", + " <td>...</td>\n", + " <td>...</td>\n", + " <td>...</td>\n", + " <td>...</td>\n", + " <td>...</td>\n", + " </tr>\n", + " <tr>\n", + " <th>47974</th>\n", + " <td>17.838380</td>\n", + " <td>12.045761</td>\n", + " <td>8.465907</td>\n", + " <td>16.584820</td>\n", + " <td>1.670174</td>\n", + " <td>1.592379</td>\n", + " <td>1.968215</td>\n", + " <td>1.445054</td>\n", + " <td>1.562072</td>\n", + " <td>5.917523</td>\n", + " <td>...</td>\n", + " <td>2.601949</td>\n", + " <td>1.046346</td>\n", + " <td>2.998616</td>\n", + " <td>1.011712</td>\n", + " <td>1.588708</td>\n", + " <td>2.912637</td>\n", + " <td>2.321258</td>\n", + " <td>1.216528</td>\n", + " <td>1.099142</td>\n", + " <td>1</td>\n", + " </tr>\n", + " <tr>\n", + " <th>47975</th>\n", + " <td>21.994849</td>\n", + " <td>15.327947</td>\n", + " <td>19.672052</td>\n", + " <td>1.969731</td>\n", + " <td>19.746036</td>\n", + " <td>17.606377</td>\n", + " <td>6.373874</td>\n", + " <td>6.095897</td>\n", + " <td>1.391735</td>\n", + " <td>28.323419</td>\n", + " <td>...</td>\n", + " <td>3.189433</td>\n", + " <td>2.592566</td>\n", + " <td>1.437408</td>\n", + " <td>3.805080</td>\n", + " <td>1.447718</td>\n", + " <td>1.670726</td>\n", + " <td>5.050217</td>\n", + " <td>1.157777</td>\n", + " <td>2.603045</td>\n", + " <td>1</td>\n", + " </tr>\n", + " <tr>\n", + " <th>47976</th>\n", + " <td>17.457032</td>\n", + " <td>15.671370</td>\n", + " <td>15.799586</td>\n", + " <td>10.964981</td>\n", + " <td>1.311263</td>\n", + " <td>1.237227</td>\n", + " <td>3.975339</td>\n", + " <td>1.464436</td>\n", + " <td>1.903818</td>\n", + " <td>1.161755</td>\n", + " <td>...</td>\n", + " <td>3.414660</td>\n", + " <td>2.226209</td>\n", + " <td>2.325256</td>\n", + " <td>17.513426</td>\n", + " <td>1.224515</td>\n", + " <td>20.186406</td>\n", + " <td>3.000528</td>\n", + " <td>5.106187</td>\n", + " <td>1.485126</td>\n", + " <td>1</td>\n", + " </tr>\n", + " <tr>\n", + " <th>47977</th>\n", + " <td>1.114140</td>\n", + " <td>15.561718</td>\n", + " <td>8.745877</td>\n", + " <td>7.543946</td>\n", + " <td>12.739644</td>\n", + " <td>15.171360</td>\n", + " <td>6.290133</td>\n", + " <td>19.624295</td>\n", + " <td>4.519724</td>\n", + " <td>13.567201</td>\n", + " <td>...</td>\n", + " <td>1.200783</td>\n", + " <td>2.454861</td>\n", + " <td>1.222550</td>\n", + " <td>15.234652</td>\n", + " <td>1.467184</td>\n", + " <td>1.254256</td>\n", + " <td>1.169946</td>\n", + " <td>3.912523</td>\n", + " <td>5.227465</td>\n", + " <td>1</td>\n", + " </tr>\n", + " <tr>\n", + " <th>47978</th>\n", + " <td>1.332144</td>\n", + " <td>16.109972</td>\n", + " <td>4.867350</td>\n", + " <td>12.838045</td>\n", + " <td>1.334858</td>\n", + " <td>2.061917</td>\n", + " <td>10.388168</td>\n", + " <td>1.557445</td>\n", + " <td>1.649132</td>\n", + " <td>4.869783</td>\n", + " <td>...</td>\n", + " <td>4.659372</td>\n", + " <td>4.170268</td>\n", + " <td>27.166467</td>\n", + " <td>1.257684</td>\n", + " <td>11.866605</td>\n", + " <td>1.046613</td>\n", + " <td>6.042935</td>\n", + " <td>1.162315</td>\n", + " <td>1.279418</td>\n", + " <td>1</td>\n", + " </tr>\n", + " </tbody>\n", + "</table>\n", + "<p>47979 rows × 30 columns</p>\n", + "</div>" + ], + "text/plain": [ + " in0 in1 in2 in3 in4 in5 \\\n", + "0 13.093444 1.346144 14.739175 5.636590 1.425617 1.440704 \n", + "1 15.161722 11.487216 14.830151 14.679372 6.771622 1.342169 \n", + "2 13.611666 17.037864 1.845764 1.735124 1.857131 3.043850 \n", + "3 2.553848 13.147331 21.570151 19.098563 7.635237 2.353764 \n", + "4 2.169147 9.763184 3.160552 4.794355 5.244932 2.904468 \n", + "... ... ... ... ... ... ... \n", + "47974 17.838380 12.045761 8.465907 16.584820 1.670174 1.592379 \n", + "47975 21.994849 15.327947 19.672052 1.969731 19.746036 17.606377 \n", + "47976 17.457032 15.671370 15.799586 10.964981 1.311263 1.237227 \n", + "47977 1.114140 15.561718 8.745877 7.543946 12.739644 15.171360 \n", + "47978 1.332144 16.109972 4.867350 12.838045 1.334858 2.061917 \n", + "\n", + " in6 in7 in8 in9 ... in20 in21 \\\n", + "0 3.806684 2.031596 12.001562 1.831196 ... 1.805253 1.341549 \n", + "1 10.986273 2.595998 1.017968 2.115972 ... 21.766449 3.558880 \n", + "2 3.107853 1.074553 14.710394 1.312976 ... 1.424868 1.178671 \n", + "3 4.975900 11.548703 9.926492 1.987690 ... 2.573646 1.888843 \n", + "4 1.221390 18.623754 1.368158 1.300394 ... 4.151040 5.740467 \n", + "... ... ... ... ... ... ... ... \n", + "47974 1.968215 1.445054 1.562072 5.917523 ... 2.601949 1.046346 \n", + "47975 6.373874 6.095897 1.391735 28.323419 ... 3.189433 2.592566 \n", + "47976 3.975339 1.464436 1.903818 1.161755 ... 3.414660 2.226209 \n", + "47977 6.290133 19.624295 4.519724 13.567201 ... 1.200783 2.454861 \n", + "47978 10.388168 1.557445 1.649132 4.869783 ... 4.659372 4.170268 \n", + "\n", + " in22 in23 in24 in25 in26 in27 \\\n", + "0 2.076435 2.194344 1.010873 1.001803 4.745355 9.273259 \n", + "1 2.774285 1.318201 1.855516 1.537803 2.296186 2.925824 \n", + "2 6.557468 5.735378 1.516246 3.273487 2.923805 1.503804 \n", + "3 1.558123 1.708603 1.172546 7.944781 1.490361 1.942587 \n", + "4 2.267707 9.801783 1.454320 1.076277 1.097234 2.925328 \n", + "... ... ... ... ... ... ... \n", + "47974 2.998616 1.011712 1.588708 2.912637 2.321258 1.216528 \n", + "47975 1.437408 3.805080 1.447718 1.670726 5.050217 1.157777 \n", + "47976 2.325256 17.513426 1.224515 20.186406 3.000528 5.106187 \n", + "47977 1.222550 15.234652 1.467184 1.254256 1.169946 3.912523 \n", + "47978 27.166467 1.257684 11.866605 1.046613 6.042935 1.162315 \n", + "\n", + " in28 target \n", + "0 6.915572 1 \n", + "1 3.682501 1 \n", + "2 1.075231 1 \n", + "3 2.189687 1 \n", + "4 55.718545 1 \n", + "... ... ... \n", + "47974 1.099142 1 \n", + "47975 2.603045 1 \n", + "47976 1.485126 1 \n", + "47977 5.227465 1 \n", + "47978 1.279418 1 \n", + "\n", + "[47979 rows x 30 columns]" + ] + }, + "execution_count": 26, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df_eleBin" + ] + }, + { + "cell_type": "code", + "execution_count": 27, + "metadata": {}, + "outputs": [], + "source": [ + "#Merging electrons and pions\n", + "df_trainData = pd.concat([df_eleBin,df_pionBin],ignore_index=True)\n", + "df_trainData = df_trainData.sample(frac=1,random_state=32)" + ] + }, + { + "cell_type": "code", + "execution_count": 28, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "<div>\n", + "<style scoped>\n", + " .dataframe tbody tr th:only-of-type {\n", + " vertical-align: middle;\n", + " }\n", + "\n", + " .dataframe tbody tr th {\n", + " vertical-align: top;\n", + " }\n", + "\n", + " .dataframe thead th {\n", + " text-align: right;\n", + " }\n", + "</style>\n", + "<table border=\"1\" class=\"dataframe\">\n", + " <thead>\n", + " <tr style=\"text-align: right;\">\n", + " <th></th>\n", + " <th>in0</th>\n", + " <th>in1</th>\n", + " <th>in2</th>\n", + " <th>in3</th>\n", + " <th>in4</th>\n", + " <th>in5</th>\n", + " <th>in6</th>\n", + " <th>in7</th>\n", + " <th>in8</th>\n", + " <th>in9</th>\n", + " <th>...</th>\n", + " <th>in20</th>\n", + " <th>in21</th>\n", + " <th>in22</th>\n", + " <th>in23</th>\n", + " <th>in24</th>\n", + " <th>in25</th>\n", + " <th>in26</th>\n", + " <th>in27</th>\n", + " <th>in28</th>\n", + " <th>target</th>\n", + " </tr>\n", + " </thead>\n", + " <tbody>\n", + " <tr>\n", + " <th>7475</th>\n", + " <td>14.155197</td>\n", + " <td>16.805274</td>\n", + " <td>8.686131</td>\n", + " <td>11.306310</td>\n", + " <td>1.336766</td>\n", + " <td>1.155026</td>\n", + " <td>32.627075</td>\n", + " <td>2.474590</td>\n", + " <td>15.721873</td>\n", + " <td>4.869783</td>\n", + " <td>...</td>\n", + " <td>1.224974</td>\n", + " <td>3.566521</td>\n", + " <td>2.622445</td>\n", + " <td>8.748748</td>\n", + " <td>4.526654</td>\n", + " <td>1.104551</td>\n", + " <td>7.899885</td>\n", + " <td>13.159288</td>\n", + " <td>13.512763</td>\n", + " <td>1</td>\n", + " </tr>\n", + " <tr>\n", + " <th>21325</th>\n", + " <td>14.888396</td>\n", + " <td>18.054787</td>\n", + " <td>2.545510</td>\n", + " <td>11.117986</td>\n", + " <td>6.300028</td>\n", + " <td>8.325430</td>\n", + " <td>15.608901</td>\n", + " <td>1.550291</td>\n", + " <td>1.893003</td>\n", + " <td>1.691536</td>\n", + " <td>...</td>\n", + " <td>1.661554</td>\n", + " <td>2.902077</td>\n", + " <td>1.783208</td>\n", + " <td>1.768985</td>\n", + " <td>5.487002</td>\n", + " <td>1.005871</td>\n", + " <td>1.182133</td>\n", + " <td>1.826541</td>\n", + " <td>3.018363</td>\n", + " <td>1</td>\n", + " </tr>\n", + " <tr>\n", + " <th>27446</th>\n", + " <td>12.378638</td>\n", + " <td>16.490103</td>\n", + " <td>2.808356</td>\n", + " <td>2.096644</td>\n", + " <td>11.173316</td>\n", + " <td>9.854752</td>\n", + " <td>4.682899</td>\n", + " <td>1.921046</td>\n", + " <td>1.089668</td>\n", + " <td>1.189329</td>\n", + " <td>...</td>\n", + " <td>1.111576</td>\n", + " <td>1.328680</td>\n", + " <td>1.062762</td>\n", + " <td>2.687879</td>\n", + " <td>2.916080</td>\n", + " <td>2.143459</td>\n", + " <td>2.069853</td>\n", + " <td>9.884095</td>\n", + " <td>1.599410</td>\n", + " <td>1</td>\n", + " </tr>\n", + " <tr>\n", + " <th>24675</th>\n", + " <td>18.158182</td>\n", + " <td>48.674974</td>\n", + " <td>2.289595</td>\n", + " <td>8.347245</td>\n", + " <td>14.513392</td>\n", + " <td>3.657429</td>\n", + " <td>3.599908</td>\n", + " <td>14.220771</td>\n", + " <td>18.619090</td>\n", + " <td>1.218537</td>\n", + " <td>...</td>\n", + " <td>1.037182</td>\n", + " <td>2.006152</td>\n", + " <td>2.960193</td>\n", + " <td>1.276843</td>\n", + " <td>2.895412</td>\n", + " <td>1.794512</td>\n", + " <td>5.754722</td>\n", + " <td>1.158862</td>\n", + " <td>1.097806</td>\n", + " <td>1</td>\n", + " </tr>\n", + " <tr>\n", + " <th>39907</th>\n", + " <td>7.749908</td>\n", + " <td>25.896086</td>\n", + " <td>10.328968</td>\n", + " <td>7.608128</td>\n", + " <td>17.750759</td>\n", + " <td>13.274530</td>\n", + " <td>2.196150</td>\n", + " <td>2.900059</td>\n", + " <td>1.334319</td>\n", + " <td>1.942363</td>\n", + " <td>...</td>\n", + " <td>3.746272</td>\n", + " <td>3.902924</td>\n", + " <td>1.037389</td>\n", + " <td>2.053100</td>\n", + " <td>2.397040</td>\n", + " <td>2.288236</td>\n", + " <td>1.331416</td>\n", + " <td>3.101941</td>\n", + " <td>2.898577</td>\n", + " <td>1</td>\n", + " </tr>\n", + " </tbody>\n", + "</table>\n", + "<p>5 rows × 30 columns</p>\n", + "</div>" + ], + "text/plain": [ + " in0 in1 in2 in3 in4 in5 \\\n", + "7475 14.155197 16.805274 8.686131 11.306310 1.336766 1.155026 \n", + "21325 14.888396 18.054787 2.545510 11.117986 6.300028 8.325430 \n", + "27446 12.378638 16.490103 2.808356 2.096644 11.173316 9.854752 \n", + "24675 18.158182 48.674974 2.289595 8.347245 14.513392 3.657429 \n", + "39907 7.749908 25.896086 10.328968 7.608128 17.750759 13.274530 \n", + "\n", + " in6 in7 in8 in9 ... in20 in21 \\\n", + "7475 32.627075 2.474590 15.721873 4.869783 ... 1.224974 3.566521 \n", + "21325 15.608901 1.550291 1.893003 1.691536 ... 1.661554 2.902077 \n", + "27446 4.682899 1.921046 1.089668 1.189329 ... 1.111576 1.328680 \n", + "24675 3.599908 14.220771 18.619090 1.218537 ... 1.037182 2.006152 \n", + "39907 2.196150 2.900059 1.334319 1.942363 ... 3.746272 3.902924 \n", + "\n", + " in22 in23 in24 in25 in26 in27 in28 \\\n", + "7475 2.622445 8.748748 4.526654 1.104551 7.899885 13.159288 13.512763 \n", + "21325 1.783208 1.768985 5.487002 1.005871 1.182133 1.826541 3.018363 \n", + "27446 1.062762 2.687879 2.916080 2.143459 2.069853 9.884095 1.599410 \n", + "24675 2.960193 1.276843 2.895412 1.794512 5.754722 1.158862 1.097806 \n", + "39907 1.037389 2.053100 2.397040 2.288236 1.331416 3.101941 2.898577 \n", + "\n", + " target \n", + "7475 1 \n", + "21325 1 \n", + "27446 1 \n", + "24675 1 \n", + "39907 1 \n", + "\n", + "[5 rows x 30 columns]" + ] + }, + "execution_count": 28, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df_trainData.head(5)" + ] + }, + { + "cell_type": "code", + "execution_count": 29, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "1 47979\n", + "0 12882\n", + "Name: target, dtype: int64" + ] + }, + "execution_count": 29, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df_trainData['target'].value_counts()" + ] + }, + { + "cell_type": "code", + "execution_count": 30, + "metadata": {}, + "outputs": [], + "source": [ + "#sampling the target=1 columns\n", + "df_trainNew = df_trainData[df_trainData['target']\n", + " ==1].sample(n=df_trainData\n", + " ['target'].value_counts().values[1],random_state=32)" + ] + }, + { + "cell_type": "code", + "execution_count": 31, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "(25764, 30)" + ] + }, + "execution_count": 31, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df_trainTemp = df_trainData[df_trainData['target']\n", + " ==0]\n", + "\n", + "#merging\n", + "df_trainData = pd.concat([df_trainNew,df_trainTemp],axis=0)\n", + "df_trainData = df_trainData.sample(frac=1,random_state=32)\n", + "df_trainData.shape" + ] + }, + { + "cell_type": "code", + "execution_count": 32, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "1 12882\n", + "0 12882\n", + "Name: target, dtype: int64" + ] + }, + "execution_count": 32, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "#creating independent and dependent features\n", + "X_train = df_trainData.drop(columns=\"target\")\n", + "y_train = df_trainData['target']\n", + "\n", + "y_train.value_counts()" + ] + }, + { + "cell_type": "code", + "execution_count": 33, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "The shape of X train is (25764, 29)\n", + "The shape of X test is (12768, 29)\n" + ] + } + ], + "source": [ + "print(f\"The shape of X train is {X_train.shape}\")\n", + "print(f\"The shape of X test is {X_test.shape}\")" + ] + }, + { + "cell_type": "code", + "execution_count": 34, + "metadata": {}, + "outputs": [], + "source": [ + "# Scaling the training features to the range [0,1]\n", + "scaler = MinMaxScaler()\n", + "X_train_scaled = scaler.fit_transform(X_train)\n" + ] + }, + { + "cell_type": "code", + "execution_count": 35, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array([[9.68909417e-04, 2.54768550e-04, 6.58208260e-02, ...,\n", + " 1.13366698e-03, 5.48946272e-03, 6.04943710e-03],\n", + " [1.05946876e-02, 4.51130781e-04, 1.92548980e-02, ...,\n", + " 1.18687863e-03, 6.54785800e-03, 1.87537872e-04],\n", + " [7.85831996e-05, 2.37009742e-03, 1.42639022e-04, ...,\n", + " 3.04162838e-04, 3.93390921e-02, 1.74461852e-04],\n", + " ...,\n", + " [2.29856727e-04, 3.46694047e-04, 2.35436556e-03, ...,\n", + " 9.31165089e-02, 1.13225760e-02, 1.37218081e-05],\n", + " [1.08759993e-02, 7.97842613e-03, 6.88976006e-03, ...,\n", + " 9.39851920e-03, 2.00243173e-02, 2.26450376e-03],\n", + " [7.72975364e-04, 4.98356577e-05, 2.34674670e-04, ...,\n", + " 8.45092375e-03, 1.50653541e-03, 4.07282720e-04]])" + ] + }, + "execution_count": 35, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "#scaling the test features\n", + "X_test_scaled = scaler.transform(X_test)\n", + "X_test_scaled" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Testing Classical models" + ] + }, + { + "cell_type": "code", + "execution_count": 36, + "metadata": {}, + "outputs": [], + "source": [ + "def plotPredict(predictions,y_test):\n", + " conf_matrix = confusion_matrix(y_test,predictions)\n", + " sns.heatmap(data=conf_matrix,annot=True,fmt='d')\n", + " plt.xlabel(\"Predicted\")\n", + " plt.ylabel(\"Actual\")\n", + " print(classification_report(y_test,predictions))\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "##### Random Forest" + ] + }, + { + "cell_type": "code", + "execution_count": 37, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "RandomForestClassifier(n_estimators=500)" + ] + }, + "execution_count": 37, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "model_rf = RandomForestClassifier(n_estimators=500)\n", + "model_rf.fit(X_train,y_train)" + ] + }, + { + "cell_type": "code", + "execution_count": 38, + "metadata": {}, + "outputs": [], + "source": [ + "predictions_rf = model_rf.predict(X_test)" + ] + }, + { + "cell_type": "code", + "execution_count": 39, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + " precision recall f1-score support\n", + "\n", + " 0 0.89 0.88 0.88 6384\n", + " 1 0.88 0.89 0.88 6384\n", + "\n", + " accuracy 0.88 12768\n", + " macro avg 0.88 0.88 0.88 12768\n", + "weighted avg 0.88 0.88 0.88 12768\n", + "\n" + ] + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "<Figure size 432x288 with 2 Axes>" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "plotPredict(predictions_rf,y_test)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "##### Decison tree" + ] + }, + { + "cell_type": "code", + "execution_count": 40, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "DecisionTreeClassifier()" + ] + }, + "execution_count": 40, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "model_dt=DecisionTreeClassifier()\n", + "model_dt.fit(X_train_scaled,y_train)" + ] + }, + { + "cell_type": "code", + "execution_count": 41, + "metadata": {}, + "outputs": [], + "source": [ + "predictions_dt = model_dt.predict(X_test_scaled)" + ] + }, + { + "cell_type": "code", + "execution_count": 42, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + " precision recall f1-score support\n", + "\n", + " 0 0.82 0.82 0.82 6384\n", + " 1 0.82 0.82 0.82 6384\n", + "\n", + " accuracy 0.82 12768\n", + " macro avg 0.82 0.82 0.82 12768\n", + "weighted avg 0.82 0.82 0.82 12768\n", + "\n" + ] + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "<Figure size 432x288 with 2 Axes>" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "plotPredict(predictions_dt,y_test)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "##### Neural Network " + ] + }, + { + "cell_type": "code", + "execution_count": 43, + "metadata": {}, + "outputs": [], + "source": [ + "# #84-85%\n", + "\n", + "# model_Snn = keras.Sequential()\n", + "# model_Snn.add(keras.layers.Dense(units=500,input_dim=69,activation=\"relu\"))\n", + "# model_Snn.add(keras.layers.BatchNormalization())\n", + "# model_Snn.add(keras.layers.Dropout(0.7))\n", + "# model_Snn.add(keras.layers.Dense(units=300,activation=\"relu\"))\n", + "# model_Snn.add(keras.layers.BatchNormalization())\n", + "# model_Snn.add(keras.layers.Dropout(0.7))\n", + "# model_Snn.add(keras.layers.Dense(units=200,activation=\"relu\"))\n", + "# model_Snn.add(keras.layers.BatchNormalization())\n", + "# model_Snn.add(keras.layers.Dropout(0.5))\n", + "# model_Snn.add(keras.layers.Dense(units=100,activation=\"relu\"))\n", + "# model_Snn.add(keras.layers.BatchNormalization())\n", + "# model_Snn.add(keras.layers.Dense(units=100,activation=\"relu\"))\n", + "# model_Snn.add(keras.layers.BatchNormalization())\n", + "# model_Snn.add(keras.layers.Dense(units=1,activation=\"sigmoid\"))\n", + "\n", + "# model_Snn.summary()" + ] + }, + { + "cell_type": "code", + "execution_count": 44, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Model: \"sequential\"\n", + "_________________________________________________________________\n", + " Layer (type) Output Shape Param # \n", + "=================================================================\n", + " dense (Dense) (None, 500) 15000 \n", + " \n", + " batch_normalization (BatchN (None, 500) 2000 \n", + " ormalization) \n", + " \n", + " dropout (Dropout) (None, 500) 0 \n", + " \n", + " dense_1 (Dense) (None, 300) 150300 \n", + " \n", + " batch_normalization_1 (Batc (None, 300) 1200 \n", + " hNormalization) \n", + " \n", + " dropout_1 (Dropout) (None, 300) 0 \n", + " \n", + " dense_2 (Dense) (None, 200) 60200 \n", + " \n", + " dense_3 (Dense) (None, 100) 20100 \n", + " \n", + " dense_4 (Dense) (None, 1) 101 \n", + " \n", + "=================================================================\n", + "Total params: 248,901\n", + "Trainable params: 247,301\n", + "Non-trainable params: 1,600\n", + "_________________________________________________________________\n" + ] + } + ], + "source": [ + "#84-85%\n", + "\n", + "model_Snn = keras.Sequential()\n", + "model_Snn.add(keras.layers.Dense(units=500,input_dim=29,activation=\"leaky_relu\"))\n", + "model_Snn.add(keras.layers.BatchNormalization())\n", + "model_Snn.add(keras.layers.Dropout(0.7))\n", + "model_Snn.add(keras.layers.Dense(units=300,activation=\"relu\"))\n", + "model_Snn.add(keras.layers.BatchNormalization())\n", + "model_Snn.add(keras.layers.Dropout(0.7))\n", + "model_Snn.add(keras.layers.Dense(units=200,activation=\"relu\"))\n", + "model_Snn.add(keras.layers.Dense(units=100,activation=\"relu\"))\n", + "model_Snn.add(keras.layers.Dense(units=1,activation=\"sigmoid\"))\n", + "\n", + "model_Snn.summary()" + ] + }, + { + "cell_type": "code", + "execution_count": 45, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 1/100\n", + "806/806 [==============================] - 7s 6ms/step - loss: 0.5463 - accuracy: 0.7334 - val_loss: 0.4531 - val_accuracy: 0.7909\n", + "Epoch 2/100\n", + "806/806 [==============================] - 5s 6ms/step - loss: 0.4594 - accuracy: 0.7889 - val_loss: 0.4015 - val_accuracy: 0.8146\n", + "Epoch 3/100\n", + "806/806 [==============================] - 5s 6ms/step - loss: 0.4267 - accuracy: 0.8071 - val_loss: 0.3802 - val_accuracy: 0.8346\n", + "Epoch 4/100\n", + "806/806 [==============================] - 5s 6ms/step - loss: 0.4102 - accuracy: 0.8161 - val_loss: 0.3524 - val_accuracy: 0.8429\n", + "Epoch 5/100\n", + "806/806 [==============================] - 5s 6ms/step - loss: 0.3971 - accuracy: 0.8226 - val_loss: 0.3652 - val_accuracy: 0.8351\n", + "Epoch 6/100\n", + "806/806 [==============================] - 5s 6ms/step - loss: 0.3910 - accuracy: 0.8288 - val_loss: 0.3438 - val_accuracy: 0.8508\n", + "Epoch 7/100\n", + "806/806 [==============================] - 5s 6ms/step - loss: 0.3841 - accuracy: 0.8291 - val_loss: 0.3474 - val_accuracy: 0.8481\n", + "Epoch 8/100\n", + "806/806 [==============================] - 5s 6ms/step - loss: 0.3815 - accuracy: 0.8330 - val_loss: 0.3522 - val_accuracy: 0.8478\n", + "Epoch 9/100\n", + "806/806 [==============================] - 5s 6ms/step - loss: 0.3782 - accuracy: 0.8317 - val_loss: 0.3311 - val_accuracy: 0.8568\n", + "Epoch 10/100\n", + "806/806 [==============================] - 5s 6ms/step - loss: 0.3738 - accuracy: 0.8351 - val_loss: 0.3364 - val_accuracy: 0.8553\n", + "Epoch 11/100\n", + "806/806 [==============================] - 5s 6ms/step - loss: 0.3733 - accuracy: 0.8400 - val_loss: 0.3388 - val_accuracy: 0.8558\n", + "Epoch 12/100\n", + "806/806 [==============================] - 5s 6ms/step - loss: 0.3696 - accuracy: 0.8387 - val_loss: 0.3283 - val_accuracy: 0.8589\n", + "Epoch 13/100\n", + "806/806 [==============================] - 5s 6ms/step - loss: 0.3673 - accuracy: 0.8411 - val_loss: 0.3226 - val_accuracy: 0.8596\n", + "Epoch 14/100\n", + "806/806 [==============================] - 5s 6ms/step - loss: 0.3664 - accuracy: 0.8425 - val_loss: 0.3190 - val_accuracy: 0.8634\n", + "Epoch 15/100\n", + "806/806 [==============================] - 5s 6ms/step - loss: 0.3591 - accuracy: 0.8462 - val_loss: 0.3209 - val_accuracy: 0.8609\n", + "Epoch 16/100\n", + "806/806 [==============================] - 5s 6ms/step - loss: 0.3633 - accuracy: 0.8430 - val_loss: 0.3178 - val_accuracy: 0.8629\n", + "Epoch 17/100\n", + "806/806 [==============================] - 5s 6ms/step - loss: 0.3573 - accuracy: 0.8460 - val_loss: 0.3193 - val_accuracy: 0.8625\n", + "Epoch 18/100\n", + "806/806 [==============================] - 5s 6ms/step - loss: 0.3558 - accuracy: 0.8468 - val_loss: 0.3306 - val_accuracy: 0.8574\n", + "Epoch 19/100\n", + "806/806 [==============================] - 5s 6ms/step - loss: 0.3550 - accuracy: 0.8481 - val_loss: 0.3179 - val_accuracy: 0.8640\n", + "Epoch 20/100\n", + "806/806 [==============================] - 5s 6ms/step - loss: 0.3531 - accuracy: 0.8484 - val_loss: 0.3145 - val_accuracy: 0.8643\n", + "Epoch 21/100\n", + "806/806 [==============================] - 5s 6ms/step - loss: 0.3530 - accuracy: 0.8478 - val_loss: 0.3174 - val_accuracy: 0.8629\n", + "Epoch 22/100\n", + "806/806 [==============================] - 5s 6ms/step - loss: 0.3530 - accuracy: 0.8487 - val_loss: 0.3108 - val_accuracy: 0.8694\n", + "Epoch 23/100\n", + "806/806 [==============================] - 5s 6ms/step - loss: 0.3499 - accuracy: 0.8513 - val_loss: 0.3159 - val_accuracy: 0.8663\n", + "Epoch 24/100\n", + "806/806 [==============================] - 5s 6ms/step - loss: 0.3519 - accuracy: 0.8484 - val_loss: 0.3207 - val_accuracy: 0.8665\n", + "Epoch 25/100\n", + "806/806 [==============================] - 5s 6ms/step - loss: 0.3497 - accuracy: 0.8491 - val_loss: 0.3170 - val_accuracy: 0.8668\n", + "Epoch 26/100\n", + "806/806 [==============================] - 5s 6ms/step - loss: 0.3484 - accuracy: 0.8506 - val_loss: 0.3093 - val_accuracy: 0.8714\n", + "Epoch 27/100\n", + "806/806 [==============================] - 5s 6ms/step - loss: 0.3451 - accuracy: 0.8514 - val_loss: 0.3109 - val_accuracy: 0.8680\n", + "Epoch 28/100\n", + "806/806 [==============================] - 5s 6ms/step - loss: 0.3431 - accuracy: 0.8528 - val_loss: 0.3135 - val_accuracy: 0.8659\n", + "Epoch 29/100\n", + "806/806 [==============================] - 5s 6ms/step - loss: 0.3441 - accuracy: 0.8521 - val_loss: 0.3141 - val_accuracy: 0.8653\n", + "Epoch 30/100\n", + "806/806 [==============================] - 5s 6ms/step - loss: 0.3481 - accuracy: 0.8505 - val_loss: 0.3106 - val_accuracy: 0.8703\n", + "Epoch 31/100\n", + "806/806 [==============================] - 6s 7ms/step - loss: 0.3390 - accuracy: 0.8571 - val_loss: 0.3188 - val_accuracy: 0.8647\n", + "Epoch 32/100\n", + "806/806 [==============================] - 5s 6ms/step - loss: 0.3419 - accuracy: 0.8546 - val_loss: 0.3137 - val_accuracy: 0.8694\n", + "Epoch 33/100\n", + "806/806 [==============================] - 5s 6ms/step - loss: 0.3430 - accuracy: 0.8539 - val_loss: 0.3064 - val_accuracy: 0.8677\n", + "Epoch 34/100\n", + "806/806 [==============================] - 5s 6ms/step - loss: 0.3383 - accuracy: 0.8548 - val_loss: 0.3133 - val_accuracy: 0.8674\n", + "Epoch 35/100\n", + "806/806 [==============================] - 4s 5ms/step - loss: 0.3404 - accuracy: 0.8545 - val_loss: 0.3121 - val_accuracy: 0.8698\n", + "Epoch 36/100\n", + "806/806 [==============================] - 5s 6ms/step - loss: 0.3390 - accuracy: 0.8562 - val_loss: 0.3084 - val_accuracy: 0.8707\n", + "Epoch 37/100\n", + "806/806 [==============================] - 5s 6ms/step - loss: 0.3417 - accuracy: 0.8541 - val_loss: 0.3052 - val_accuracy: 0.8719\n", + "Epoch 38/100\n", + "806/806 [==============================] - 5s 6ms/step - loss: 0.3417 - accuracy: 0.8544 - val_loss: 0.3078 - val_accuracy: 0.8718\n", + "Epoch 39/100\n", + "806/806 [==============================] - 5s 6ms/step - loss: 0.3407 - accuracy: 0.8540 - val_loss: 0.3059 - val_accuracy: 0.8698\n", + "Epoch 40/100\n", + "806/806 [==============================] - 5s 6ms/step - loss: 0.3447 - accuracy: 0.8538 - val_loss: 0.3037 - val_accuracy: 0.8695\n", + "Epoch 41/100\n", + "806/806 [==============================] - 5s 6ms/step - loss: 0.3404 - accuracy: 0.8551 - val_loss: 0.3046 - val_accuracy: 0.8710\n", + "Epoch 42/100\n", + "806/806 [==============================] - 5s 6ms/step - loss: 0.3397 - accuracy: 0.8526 - val_loss: 0.3042 - val_accuracy: 0.8702\n", + "Epoch 43/100\n", + "806/806 [==============================] - 5s 7ms/step - loss: 0.3345 - accuracy: 0.8587 - val_loss: 0.3031 - val_accuracy: 0.8708\n", + "Epoch 44/100\n", + "806/806 [==============================] - 7s 8ms/step - loss: 0.3321 - accuracy: 0.8596 - val_loss: 0.3042 - val_accuracy: 0.8721\n", + "Epoch 45/100\n", + "806/806 [==============================] - 5s 7ms/step - loss: 0.3362 - accuracy: 0.8564 - val_loss: 0.3046 - val_accuracy: 0.8702\n", + "Epoch 46/100\n", + "806/806 [==============================] - 5s 7ms/step - loss: 0.3352 - accuracy: 0.8581 - val_loss: 0.3022 - val_accuracy: 0.8732\n", + "Epoch 47/100\n", + "806/806 [==============================] - 5s 6ms/step - loss: 0.3368 - accuracy: 0.8585 - val_loss: 0.3081 - val_accuracy: 0.8698\n", + "Epoch 48/100\n", + "806/806 [==============================] - 5s 6ms/step - loss: 0.3331 - accuracy: 0.8582 - val_loss: 0.3059 - val_accuracy: 0.8698\n", + "Epoch 49/100\n", + "806/806 [==============================] - 6s 7ms/step - loss: 0.3328 - accuracy: 0.8555 - val_loss: 0.3035 - val_accuracy: 0.8732\n", + "Epoch 50/100\n", + "806/806 [==============================] - 5s 6ms/step - loss: 0.3347 - accuracy: 0.8578 - val_loss: 0.3032 - val_accuracy: 0.8699\n", + "Epoch 51/100\n", + "806/806 [==============================] - 4s 5ms/step - loss: 0.3366 - accuracy: 0.8568 - val_loss: 0.3059 - val_accuracy: 0.8730\n", + "Epoch 52/100\n", + "806/806 [==============================] - 4s 6ms/step - loss: 0.3277 - accuracy: 0.8614 - val_loss: 0.3017 - val_accuracy: 0.8736\n", + "Epoch 53/100\n", + "806/806 [==============================] - 5s 6ms/step - loss: 0.3347 - accuracy: 0.8593 - val_loss: 0.3012 - val_accuracy: 0.8730\n", + "Epoch 54/100\n", + "806/806 [==============================] - 6s 7ms/step - loss: 0.3336 - accuracy: 0.8602 - val_loss: 0.3063 - val_accuracy: 0.8704\n", + "Epoch 55/100\n", + "806/806 [==============================] - 5s 7ms/step - loss: 0.3303 - accuracy: 0.8615 - val_loss: 0.3029 - val_accuracy: 0.8706\n", + "Epoch 56/100\n", + "806/806 [==============================] - 6s 8ms/step - loss: 0.3308 - accuracy: 0.8588 - val_loss: 0.3048 - val_accuracy: 0.8703\n", + "Epoch 57/100\n", + "806/806 [==============================] - 5s 6ms/step - loss: 0.3336 - accuracy: 0.8585 - val_loss: 0.3036 - val_accuracy: 0.8739\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 58/100\n", + "806/806 [==============================] - 5s 6ms/step - loss: 0.3329 - accuracy: 0.8596 - val_loss: 0.3024 - val_accuracy: 0.8729\n", + "Epoch 59/100\n", + "806/806 [==============================] - 5s 6ms/step - loss: 0.3320 - accuracy: 0.8585 - val_loss: 0.3017 - val_accuracy: 0.8734\n", + "Epoch 60/100\n", + "806/806 [==============================] - 5s 6ms/step - loss: 0.3306 - accuracy: 0.8595 - val_loss: 0.3252 - val_accuracy: 0.8662\n", + "Epoch 61/100\n", + "806/806 [==============================] - 5s 6ms/step - loss: 0.3298 - accuracy: 0.8591 - val_loss: 0.3045 - val_accuracy: 0.8734\n", + "Epoch 62/100\n", + "806/806 [==============================] - 5s 6ms/step - loss: 0.3322 - accuracy: 0.8581 - val_loss: 0.3027 - val_accuracy: 0.8719\n", + "Epoch 63/100\n", + "806/806 [==============================] - 5s 6ms/step - loss: 0.3308 - accuracy: 0.8592 - val_loss: 0.3000 - val_accuracy: 0.8731\n", + "Epoch 64/100\n", + "806/806 [==============================] - 5s 6ms/step - loss: 0.3290 - accuracy: 0.8608 - val_loss: 0.3004 - val_accuracy: 0.8721\n", + "Epoch 65/100\n", + "806/806 [==============================] - 5s 6ms/step - loss: 0.3313 - accuracy: 0.8587 - val_loss: 0.3032 - val_accuracy: 0.8714\n", + "Epoch 66/100\n", + "806/806 [==============================] - 5s 6ms/step - loss: 0.3290 - accuracy: 0.8612 - val_loss: 0.2986 - val_accuracy: 0.8729\n", + "Epoch 67/100\n", + "806/806 [==============================] - 5s 7ms/step - loss: 0.3290 - accuracy: 0.8599 - val_loss: 0.3032 - val_accuracy: 0.8708\n", + "Epoch 68/100\n", + "806/806 [==============================] - 5s 6ms/step - loss: 0.3269 - accuracy: 0.8605 - val_loss: 0.3041 - val_accuracy: 0.8710\n", + "Epoch 69/100\n", + "806/806 [==============================] - 5s 7ms/step - loss: 0.3291 - accuracy: 0.8617 - val_loss: 0.3013 - val_accuracy: 0.8726\n", + "Epoch 70/100\n", + "806/806 [==============================] - 5s 6ms/step - loss: 0.3285 - accuracy: 0.8618 - val_loss: 0.3017 - val_accuracy: 0.8724\n", + "Epoch 71/100\n", + "806/806 [==============================] - 5s 6ms/step - loss: 0.3287 - accuracy: 0.8596 - val_loss: 0.3032 - val_accuracy: 0.8714\n", + "Epoch 72/100\n", + "806/806 [==============================] - 6s 7ms/step - loss: 0.3293 - accuracy: 0.8596 - val_loss: 0.3007 - val_accuracy: 0.8723\n", + "Epoch 73/100\n", + "806/806 [==============================] - 5s 6ms/step - loss: 0.3264 - accuracy: 0.8591 - val_loss: 0.3007 - val_accuracy: 0.8721\n", + "Epoch 74/100\n", + "806/806 [==============================] - 5s 6ms/step - loss: 0.3276 - accuracy: 0.8612 - val_loss: 0.3004 - val_accuracy: 0.8714\n", + "Epoch 75/100\n", + "806/806 [==============================] - 4s 6ms/step - loss: 0.3286 - accuracy: 0.8601 - val_loss: 0.3000 - val_accuracy: 0.8702\n", + "Epoch 76/100\n", + "806/806 [==============================] - 4s 5ms/step - loss: 0.3288 - accuracy: 0.8609 - val_loss: 0.2997 - val_accuracy: 0.8729\n", + "Epoch 77/100\n", + "806/806 [==============================] - 4s 6ms/step - loss: 0.3259 - accuracy: 0.8621 - val_loss: 0.3010 - val_accuracy: 0.8719\n", + "Epoch 78/100\n", + "806/806 [==============================] - 4s 6ms/step - loss: 0.3209 - accuracy: 0.8640 - val_loss: 0.3008 - val_accuracy: 0.8741\n", + "Epoch 79/100\n", + "806/806 [==============================] - 5s 6ms/step - loss: 0.3220 - accuracy: 0.8635 - val_loss: 0.3008 - val_accuracy: 0.8746\n", + "Epoch 80/100\n", + "806/806 [==============================] - 5s 6ms/step - loss: 0.3232 - accuracy: 0.8637 - val_loss: 0.2983 - val_accuracy: 0.8735\n", + "Epoch 81/100\n", + "806/806 [==============================] - 4s 6ms/step - loss: 0.3275 - accuracy: 0.8615 - val_loss: 0.2994 - val_accuracy: 0.8731\n", + "Epoch 82/100\n", + "806/806 [==============================] - 4s 6ms/step - loss: 0.3282 - accuracy: 0.8607 - val_loss: 0.3017 - val_accuracy: 0.8727\n", + "Epoch 83/100\n", + "806/806 [==============================] - 5s 6ms/step - loss: 0.3269 - accuracy: 0.8610 - val_loss: 0.3007 - val_accuracy: 0.8748\n", + "Epoch 84/100\n", + "806/806 [==============================] - 4s 5ms/step - loss: 0.3243 - accuracy: 0.8610 - val_loss: 0.2974 - val_accuracy: 0.8729\n", + "Epoch 85/100\n", + "806/806 [==============================] - 4s 5ms/step - loss: 0.3255 - accuracy: 0.8617 - val_loss: 0.2986 - val_accuracy: 0.8723\n", + "Epoch 86/100\n", + "806/806 [==============================] - 4s 6ms/step - loss: 0.3260 - accuracy: 0.8604 - val_loss: 0.3020 - val_accuracy: 0.8719\n", + "Epoch 87/100\n", + "806/806 [==============================] - 4s 6ms/step - loss: 0.3294 - accuracy: 0.8607 - val_loss: 0.2981 - val_accuracy: 0.8759\n", + "Epoch 88/100\n", + "806/806 [==============================] - 4s 5ms/step - loss: 0.3263 - accuracy: 0.8624 - val_loss: 0.2999 - val_accuracy: 0.8748\n", + "Epoch 89/100\n", + "806/806 [==============================] - 4s 5ms/step - loss: 0.3228 - accuracy: 0.8619 - val_loss: 0.3015 - val_accuracy: 0.8737\n", + "Epoch 90/100\n", + "806/806 [==============================] - 4s 5ms/step - loss: 0.3192 - accuracy: 0.8655 - val_loss: 0.2999 - val_accuracy: 0.8742\n", + "Epoch 91/100\n", + "806/806 [==============================] - 4s 5ms/step - loss: 0.3230 - accuracy: 0.8625 - val_loss: 0.3004 - val_accuracy: 0.8721\n", + "Epoch 92/100\n", + "806/806 [==============================] - 4s 6ms/step - loss: 0.3258 - accuracy: 0.8624 - val_loss: 0.2968 - val_accuracy: 0.8741\n", + "Epoch 93/100\n", + "806/806 [==============================] - 4s 5ms/step - loss: 0.3273 - accuracy: 0.8629 - val_loss: 0.3010 - val_accuracy: 0.8745\n", + "Epoch 94/100\n", + "806/806 [==============================] - 5s 6ms/step - loss: 0.3228 - accuracy: 0.8640 - val_loss: 0.2971 - val_accuracy: 0.8748\n", + "Epoch 95/100\n", + "806/806 [==============================] - 4s 6ms/step - loss: 0.3248 - accuracy: 0.8613 - val_loss: 0.3020 - val_accuracy: 0.8723\n", + "Epoch 96/100\n", + "806/806 [==============================] - 5s 6ms/step - loss: 0.3236 - accuracy: 0.8662 - val_loss: 0.3002 - val_accuracy: 0.8741\n", + "Epoch 97/100\n", + "806/806 [==============================] - 5s 6ms/step - loss: 0.3240 - accuracy: 0.8619 - val_loss: 0.2987 - val_accuracy: 0.8737\n", + "Epoch 98/100\n", + "806/806 [==============================] - 5s 6ms/step - loss: 0.3220 - accuracy: 0.8641 - val_loss: 0.2987 - val_accuracy: 0.8741\n", + "Epoch 99/100\n", + "806/806 [==============================] - 5s 6ms/step - loss: 0.3238 - accuracy: 0.8627 - val_loss: 0.2974 - val_accuracy: 0.8742\n", + "Epoch 100/100\n", + "806/806 [==============================] - 5s 6ms/step - loss: 0.3206 - accuracy: 0.8651 - val_loss: 0.2995 - val_accuracy: 0.8743\n" + ] + } + ], + "source": [ + "model_Snn.compile(optimizer=\"adam\",loss=\"binary_crossentropy\",metrics=['accuracy'])\n", + "\n", + "history=model_Snn.fit(x=X_train_scaled,y=y_train,epochs=100,\n", + " validation_data=(X_test_scaled,y_test))" + ] + }, + { + "cell_type": "code", + "execution_count": 46, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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oKCioc/POussOnbsiIhwyimnMHLkSBYuXFjhcT/66CMefPBBwsLCaNOmTVHOpdBFF11EdHQ0Xl5eXHLJJXTu3JnFixd7lOb333+fa665hr59++Lv78+TTz7J77//XjQxFMB9991HaGgobdu25dRTT3U7l7mrWbNmcdZZZzFixAh8fX25++67yczMZNGiRXh7e5Odnc3atWvJzc0lNjaWjh07Au6njq0OmtMoR5C/t3buU42DBzmA2jRhwgRmzpzJFVdcwQcffMCECROK1n3zzTdMmTKFjRs3UlBQQEZGBr169arwmImJicWmZm3Xrl2x9e+88w7PPvts0YM+LS2N/fv3e5TexMTEYjmdpk2bEh4ezq5du4iNjQUgKiqqaH15U82WPK5rOr28vGjTpg27du1i2LBhPP/880yePJk1a9Zwxhln8OyzzxIdHe126tjqoDmNcgT5+pCuxVNK1bqLLrqIn3/+mYSEBD777LOioJGdnc0FF1zA3Xffzd69e0lJSWH06NEe1Q+0atWq2NSsO3fuLPp7x44dXH/99UydOpXk5GRSUlLo2bNn0XHdTT9bKDo6mh07dhS9Tk9PJzk5uWgq16oqeVxjDPHx8UXHnTBhAr/++is7duxARJg0aRLgfurY6qBBoxxB/lo8pVRdaNmyJcOGDePqq6+mffv2RRMF5eTkkJ2dXTRX9zfffMP333/v0TEvvvhinnzySQ4ePEhCQgIvvvhi0br09HREhJYtWwK2st21HiAyMpKEhARycnLKPPb48eN56623WLFiBdnZ2TzwwAOccMIJRbmMqrr44ov56quvmD9/Prm5uTzzzDP4+/szePBgNmzYwI8//kh2djYBAQEEBgYWTQPrburY6qBBoxxap6FU3ZkwYQLz5s0rVjQVHBzMCy+8wMUXX0zz5s354IMPGDt2rEfHe/TRR2nXrh3t27dn5MiRxaZMjYuL46677uLEE08kMjKSVatWcdJJJxWtHz58OD169CAqKooWLVqUOvbpp5/O448/zgUXXECrVq3YsmULH3744VFcvdW1a1fee+89brvtNlq0aMGXX37Jl19+iZ+fH9nZ2dx33320aNGCqKgo9u3bx5NPPgm4nzq2Ouh0r+W4/p2lJBzM5Js7hlZjqpSqezrdqwKd7rXa2ZyG1mkopVQhDRrl0OIppZQqrtaDhoiMEpENIrJZ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\n", + "text/plain": [ + "<Figure size 432x288 with 1 Axes>" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "#Plotting the losses\n", + "loss=history.history['loss']\n", + "val_loss=history.history['val_loss']\n", + "index=np.arange(100)\n", + "sns.lineplot(x=index,y=loss)\n", + "sns.lineplot(x=index,y=val_loss)\n", + "plt.ylabel('loss',fontsize=15)\n", + "plt.xlabel('epochs',fontsize=15)\n", + "plt.title('Decrement in loss wrt epochs for 29 features')\n", + "plt.legend(['training loss','validation loss'],fontsize='large')\n", + "plt.show()" + ] + }, + { + "cell_type": "code", + "execution_count": 47, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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f/zxB+vWrSvsSTx48GA++ugjfHx8ePDBBxk9ejTLly8v9bh79+7l8OHDxMfH88svvzBixAiGDRtGaGioW9vefvvt+Pv7s3fvXrZv3875559PixYtyrye8tJ4//33s2bNGv7++2+aNGnCggUL8PDwYMeOHQwePJj333+fESNGkJyczK5du8o8h6sePXrwxBNPEBwczOuvv85ll13G9u3b8fX1BeC7777jyy+/5JNPPiErK4sRI0YQEBDAmjVrCAgI4O+//wbg6quvZvLkyQwdOhSAmTNn0rRpU0477bQyz13dNKdRhuy8fPKNjnCrVEnjxo3D39+/sI/JddddR2BgIA0aNGDcuHGsWLGizE5j3t7ePPHEE3h7e3PBBRcQEBDAhg0b3No2Ly+Pr7/+mieffBI/Pz86duzI2LFjy01zWWnMz8/no48+4vXXXycqKgpPT0/69OlDgwYN+OyzzxgwYACjRo3C29ub8PBwunTpUqnPaMyYMYSHh+Pl5cV9991HVlZWsevs3bs3w4YNw8PDg0OHDjFr1izeffddQkND8fb2pl+/foXHmTlzJsnJ9mFi0qRJXHXVVZVKQ3XRnEYZdAImVdMqkwM4HkRHF/XPzcvL49FHH+XLL78kMTGxMPexf/9+goODj9i34EZawM/Pj9TU0oeRK2vbxMREcnNzi6XD9XVJ5aUxKyuLzMxMWrdufcR+u3btKnV5Zbz00kuMHz+e3bt3IyIkJyezf//+UtO7a9cuwsLCSs1tNWvWjL59+/L1119zySWXMGvWLF5//fWjSlNV0ZxGGXQCJlXfldX5y3X5Z599xnfffcfs2bM5fPhwYRGWSxerKhcREYGXlxdxcXGFy8orNiovjY0aNcLX15ctW7YcsV90dHSpy8EO9peenl74fu/evYWv586dywsvvMDUqVM5ePAghw4dIjg4uNhn4voZRkdHk5SUxKFDh0o919ixY5k8eTJffvklvXv3JioqqsxrrQkaNMpQkNPQOg1VXzVu3JitW7eWu01KSgoNGjQgPDyc9PR0HnnkkWpPl6enJ5deeinjxo0jPT2d9evX88knnxxVGj08PLjuuuu499572b17N3l5ecyfP5+srCxGjx7N7NmzmTp1Krm5uRw4cKCwHqRLly588803pKens3nzZsaPH1/sfF5eXkRERJCbm8tTTz1VWLxUmqZNmzJ4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\n", + "text/plain": [ + "<Figure size 432x288 with 1 Axes>" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "#Plotting the accuracy\n", + "loss=history.history['accuracy']\n", + "val_loss=history.history['val_accuracy']\n", + "index=np.arange(100)\n", + "sns.lineplot(x=index,y=loss)\n", + "sns.lineplot(x=index,y=val_loss)\n", + "plt.ylabel('accuracy',fontsize=15)\n", + "plt.xlabel('epochs',fontsize=15)\n", + "plt.title('Accuracy w.r.t epochs for 29 features')\n", + "plt.legend(['training accuarcy','validation accuracy'],fontsize='large')\n", + "plt.show()" + ] + }, + { + "cell_type": "code", + "execution_count": 48, + "metadata": {}, + "outputs": [], + "source": [ + "predictions_snn=model_Snn.predict(X_test_scaled)" + ] + }, + { + "cell_type": "code", + "execution_count": 49, + "metadata": {}, + "outputs": [], + "source": [ + "threshold_limit =0.495\n", + "predictions_snn=np.where(predictions_snn>threshold_limit,1,0)" + ] + }, + { + "cell_type": "code", + "execution_count": 50, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + " precision recall f1-score support\n", + "\n", + " 0 0.88 0.87 0.87 6384\n", + " 1 0.87 0.88 0.87 6384\n", + "\n", + " accuracy 0.87 12768\n", + " macro avg 0.87 0.87 0.87 12768\n", + "weighted avg 0.87 0.87 0.87 12768\n", + "\n" + ] + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "<Figure size 432x288 with 2 Axes>" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "plotPredict(predictions_snn,y_test)" + ] + }, + { + "cell_type": "code", + "execution_count": 51, + "metadata": {}, + "outputs": [], + "source": [ + "##saving the model\n", + "\n", + "model_Snn.save(\"NN_model29bins.h5\")" + ] + }, + { + "cell_type": "code", + "execution_count": 52, + "metadata": {}, + "outputs": [], + "source": [ + "# ##loading the model\n", + "# model_Snn = keras.models.load_model(\"NN_78Percent.h5\")" + ] + }, + { + "cell_type": "code", + "execution_count": 53, + "metadata": {}, + "outputs": [], + "source": [ + "predictions_Snn = model_Snn.predict(X_test_scaled)" + ] + }, + { + "cell_type": "code", + "execution_count": 54, + "metadata": {}, + "outputs": [], + "source": [ + "predictionsSnn_edited = []\n", + "for i in range(0,len(predictions_Snn)):\n", + " predictionsSnn_edited.append(predictions_Snn[i][0])" + ] + }, + { + "cell_type": "code", + "execution_count": 55, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "<div>\n", + "<style scoped>\n", + " .dataframe tbody tr th:only-of-type {\n", + " vertical-align: middle;\n", + " }\n", + "\n", + " .dataframe tbody tr th {\n", + " vertical-align: top;\n", + " }\n", + "\n", + " .dataframe thead th {\n", + " text-align: right;\n", + " }\n", + "</style>\n", + "<table border=\"1\" class=\"dataframe\">\n", + " <thead>\n", + " <tr style=\"text-align: right;\">\n", + " <th></th>\n", + " <th>predictions</th>\n", + " <th>y_truth</th>\n", + " </tr>\n", + " </thead>\n", + " <tbody>\n", + " <tr>\n", + " <th>0</th>\n", + " <td>0.664388</td>\n", + " <td>1</td>\n", + " </tr>\n", + " <tr>\n", + " <th>1</th>\n", + " <td>0.995962</td>\n", + " <td>1</td>\n", + " </tr>\n", + " <tr>\n", + " <th>2</th>\n", + " <td>0.539339</td>\n", + " <td>1</td>\n", + " </tr>\n", + " <tr>\n", + " <th>3</th>\n", + " <td>0.977265</td>\n", + " <td>1</td>\n", + " </tr>\n", + " <tr>\n", + " <th>4</th>\n", + " <td>0.960730</td>\n", + " <td>1</td>\n", + " </tr>\n", + " <tr>\n", + " <th>...</th>\n", + " <td>...</td>\n", + " <td>...</td>\n", + " </tr>\n", + " <tr>\n", + " <th>12763</th>\n", + " <td>0.554519</td>\n", + " <td>0</td>\n", + " </tr>\n", + " <tr>\n", + " <th>12764</th>\n", + " <td>0.064122</td>\n", + " <td>0</td>\n", + " </tr>\n", + " <tr>\n", + " <th>12765</th>\n", + " <td>0.031323</td>\n", + " <td>0</td>\n", + " </tr>\n", + " <tr>\n", + " <th>12766</th>\n", + " <td>0.433908</td>\n", + " <td>0</td>\n", + " </tr>\n", + " <tr>\n", + " <th>12767</th>\n", + " <td>0.035364</td>\n", + " <td>0</td>\n", + " </tr>\n", + " </tbody>\n", + "</table>\n", + "<p>12768 rows × 2 columns</p>\n", + "</div>" + ], + "text/plain": [ + " predictions y_truth\n", + "0 0.664388 1\n", + "1 0.995962 1\n", + "2 0.539339 1\n", + "3 0.977265 1\n", + "4 0.960730 1\n", + "... ... ...\n", + "12763 0.554519 0\n", + "12764 0.064122 0\n", + "12765 0.031323 0\n", + "12766 0.433908 0\n", + "12767 0.035364 0\n", + "\n", + "[12768 rows x 2 columns]" + ] + }, + "execution_count": 55, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "data = {\n", + " \"predictions\":predictionsSnn_edited,\n", + " \"y_truth\":y_test\n", + "}\n", + "df_plot=pd.DataFrame(data=data)\n", + "df_plot" + ] + }, + { + "cell_type": "code", + "execution_count": 56, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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gVuAEek5wIPATcoGskcA90XESuCfkmYC+wF/boh6lhrNN1Vj/QpoLGvWrKFdu8b/M5kyZQpLlizhgAMOqEnr378/1113HbfeemvR95x44omMGzeOm266qdHrZ2brK+uch6S2kl4CFgATgTeAxRGxJmWZC/ROz3sDcwDS9iVkQ1s16UXeU7ivUZJekPTCwoULG6E1ja+qqorjjjuOHj16sPPOO3PjjTfWmXfy5MkceOCBdO3alb322otJkybVbFu0aBFnnHEGvXr1olu3bhxzzDG8//77DB06lKqqKrbddlu23XZbqqqqGDt2LMcffzwnn3wy2223HXfeeSdVVVUcffTRdO/enf79+3PbbbfVlD127FhOOOEETj31VDp37sygQYPWu4PxtddeS+/evencuTO77747Tz75ZNH6P/744xxyyCHrpZ122mkMHTqUzp07F33PoYceym9/+9tSPkoza2BlDR4RsTYi9gb6kPUWBjTivsZFxOCIGNyjR9Hb0Tdr69atY/jw4ey1117MmzePJ598khtuuIEJEzac3pk3bx5HHXUUl112GYsWLeL666/nuOOOozponnLKKXzwwQdMmzaNBQsWcP7557PNNtvw+OOP06tXL5YvX87y5cvp1asXAA8//DDHH388ixcv5qSTTmLkyJH06dOHqqoqHnzwQS655BKeeuqpmv2PHz+ekSNHsnjxYo4++mhGjx4NwKuvvspNN93ElClTWLZsGRMmTKCudVVefvlldt9991yf0cCBA5k1axZLly7N9T4z23xNcrZVRCwGngY+A3SVVD0u0geYl57PAyoA0vYuZBPnNelF3rPFmDJlCgsXLuS73/0uHTp0YJddduGss87ivvvu2yDvPffcw7Bhwxg2bBht2rThiCOOYPDgwTz22GO8/fbbPP7449x6661069aN9u3bb/ALv7bPfOYzHHPMMbRp04Z33nmHP/7xj1x77bV07NiRvffemzPPPJO77767Jv9BBx3EsGHDaNu2Laeccgp//3s27Ne2bVtWrlzJ9OnTWb16NZWVley6665F97l48eI6exh1qc6/ePHiXO8zs81XtuAhqYekrun51sARwAyyIHJ8ynYa8HB6Pj69Jm1/Ks2bjAdGStoqnam1G/CXsjSijGbPnk1VVRVdu3ateVxzzTXMnz+/aN4HHnhgvbzPPfccb7/9NnPmzKF79+5069at5H1XVHwUm6uqqujevft6B/Z+/frV3P4D4GMf+1jN806dOrFixQrWrFlD//79ueGGGxg7diw9e/Zk5MiRVFVVFd1nt27dWLZsWcl1BGryd+3aNdf7zGzzlbPnsRPwtKSpwBRgYkQ8ClwEfCtNfG8P3J7y3w5sn9K/BYwBiIhpwP3AdOB3wDkRsbaM7SiLiooKdt55ZxYvXlzzWLZsGY899ljRvKeccsp6ed9//33GjBlDRUUFixYtKvrrvK4L6QrTe/XqxaJFi9Y7sL/11lv07r3BNFNRX/3qV3nuueeYPXs2krjooouK5ttzzz157bXXSiqz2owZM6isrPT9q8yaQNmCR0RMjYhPRcSeEfGJiLgypb8ZEftFRP+I+Ld0FhURsSK97p+2v1lQ1tURsWtE7B4Rj5erDeW033770blzZ6699lo+/PBD1q5dyyuvvMKUKVM2yHvyySfzyCOPMGHCBNauXcuKFSuYNGkSc+fOZaeddmLo0KGcffbZvPfee6xevZpnn30WgB133JF3332XJUuW1FmPiooKDjzwQC6++GJWrFjB1KlTuf322zn55JPrbcOrr77KU089xcqVK+nYsSNbb701bdoU/5MbNmwYzzzzzHppq1evZsWKFaxbt441a9awYsUK1q796HfCM888w9ChQ+uth5k1vFZ9V91i+vTt26in0/bp27ekfG3btuXRRx/lggsuYOedd2blypXsvvvuXHXVVRvkraio4OGHH+Y73/kOJ554Im3btmW//fbjlltuAeCXv/wl559/PgMGDGDVqlV8/vOf53Of+xwDBgzgxBNPZJdddmHt2rVMnz69aF3uvfdevv71r9ecrXXFFVdw+OGH19uGlStXMmbMGGbMmEH79u058MADGTduXNG8++yzD126dOH5559n//33B+Css87irrvuqslz9dVX84tf/ILTTz+9pl5b0kWSZi2JsmmELdvgwYOj8PTRajNmzGDgwIFNUCMr5ve//z0//elPS77C/Je//CX3339/nXn8/dqWTFLJV5hv6nFe0osRMbjYNvc8rNkYMmQIQ4YMKSnv8OHDGT58eCPXyMzq4hsjmplZbg4eZmaWm4OHmZnl5uBhZma5OXiYmVluDh5mZpabg4eZmeXm4NFC/eEPf8h9C/OG8LOf/YzzzjuvpLwXXHBBzVXuZrZlcfCopbJv30ZdhrayxNuT1Ofggw/m1VdfbZCySrVq1Squuuoqvv3tb9ekvfTSS+y777506tSJfffdl5deeqlm24UXXsg111zDqlWrylpPM2t8vsK8ltlz5rDq8T80Wvkdhh7caGU3tocffpgBAwbU3FF31apVjBgxgvPOO4+zzz6bn/3sZ4wYMYLXX3+dDh06sNNOOzFgwADGjx/P8ccfX0/pZtaSuOfRjFVWVvL973+fPfbYg27dunHGGWewYsUKACZNmkSfPn1q8s6YMYNDDz2Url27MmjQIMaPH1+z7fTTT+ecc87hqKOOonPnzuy///688cYbAEQE559/Pj179mS77bbjk5/8JK+88krR+tReKnbSpEmsWbOG8847j6222opzzz2XiFhvlUEvFWu2ZXLwaOZ+9atfMWHCBN544w1ee+21onfVXb16NcOHD2fIkCEsWLCAn/zkJ5x00knrDWvdd999XH755bz33nv079+fSy+9FMhuRvjss8/y2muvsWTJEu6//3623377onWpvVTstGnT2HPPPddb/2PPPfdk2rRpNa8HDhxYs7KgmW05HDyaudGjR1NRUUH37t259NJLuffeezfIM3nyZJYvX86YMWPo0KEDhx12GF/60pfWy/vlL3+Z/fbbj3bt2nHSSSfVzE20b9+eZcuW8Y9//IOIYODAgey0005F61J7qdjly5fTpUuX9fJ06dJlvYWjOnfu7GVizbZADh7NXOGSsP369Su6jGtVVRUVFRXrLbRU31Kxy5cvB+Cwww5j9OjRnHPOOfTs2ZNRo0axdOnSonWpvVTstttuu0HepUuXrhdgli1b5mVizbZADh7N3Jw5c2qev/XWW/Tq1WuDPL169WLOnDmsW7duvbylLhV77rnn8uKLLzJ9+nRee+01fvjDHxbNV3up2EGDBjF16tT11gqYOnUqgwYNqnk9Y8YM9tqr8RbXMrOm4eDRzN18883MnTuXRYsWcfXVV/OVr3xlgzz7778/nTp14rrrrmP16tVMmjSJRx55hJEjR9Zb/pQpU3j++edZvXo122yzDR07dix5qdhDDz2Utm3bcuONN7Jy5UpuuukmIOvNVPNSsWZbJp+qW0u/iopGPZ22X8EwVCm++tWvMmTIEKqqqhgxYgSXXXbZBnk6dOjAI488wtlnn833v/99evfuzd13382AAQPqLX/p0qWcf/75vPnmm3Ts2JEvfvGL613HUWj48OGcd955VFVV0atXLzp06MBDDz3EmWeeyZgxYxg4cCAPPfQQHTp0AODtt99m+vTpHHPMMbnabGbNn5ehbcbLlFZWVvLzn/+8pPXCy2XcuHFMnz6dG264od68F1xwAbvuuitnn31241esiOb+/ZptDi9Day3KqFGjSs77ox/9qBFrYmZNyXMeZmaWm3sezdisWbOaugpmZkW552FmZrmVLXhIqpD0tKTpkqZJ+mZKHytpnqSX0mNYwXsuljRT0quSvliQfmRKmylpzObUq/DaCNty+Hs1a1zlHLZaA1wQEX+V1Bl4UdLEtO3HEXF9YWZJewAjgUFAL+AJSR9Pm28GjgDmAlMkjY+I6XkrtM022zBv3jx23HFH2rdvv949mqxlighWr17N/Pnz2WabbZq6OmZbrLIFj4h4G3g7PV8maQawsUugRwD3RcRK4J+SZgL7pW0zI+JNAEn3pby5g0efPn145513mD17NmvWrMn7dmum2rVrR5cuXdhhhx2auipmW6wmmTCXVAl8Cnge+CwwWtKpwAtkvZP3yALL5IK3zeWjYDOnVvr+RfYxChgF0LeOBZjatGlDz5496dmz5+Y0x8ys1Sn7hLmkbYH/Ac6LiKXALcCuwN5kPZMGuTggIsZFxOCIGNyjR4+GKNLMzJKy9jwktScLHL+KiP8FiIj5BdtvAx5NL+cBhffy6JPS2Ei6mZmVQTnPthJwOzAjIv6rIL1w8YgvA9XL2I0HRkraStLOwG7AX4ApwG6SdpbUgWxSfTxmZlY25ex5fBY4BXhZ0ksp7RLgREl7AwHMAv4DICKmSbqfbCJ8DXBORKwFkDQamAC0Be6IiI+WrjMzs0ZXzrOtngOKnQv72EbeczVwdZH0xzb2PjMza1y+wtzMzHJz8DAzs9wcPMzMLDcHDzMzy83Bw8zMcnPwMDOz3Bw8zMwsNwcPMzPLzcHDzMxyc/AwM7PcHDzMzCw3Bw8zM8vNwcPMzHJz8DAzs9wcPMzMLDcHDzMzy83Bw8zMcnPwMDOz3Bw8zMwsNwcPMzPLzcHDzMxyc/AwM7PcHDzMzCw3Bw8zM8vNwcPMzHIrW/CQVCHpaUnTJU2T9M2U3l3SREmvp3+7pXRJulHSTElTJe1TUNZpKf/rkk4rVxvMzCxTzp7HGuCCiNgDOAA4R9IewBjgyYjYDXgyvQYYCuyWHqOAWyALNsDlwP7AfsDl1QHHzMzKo2zBIyLejoi/pufLgBlAb2AEcFfKdhdwTHo+Arg7MpOBrpJ2Ar4ITIyIRRHxHjAROLJc7TAzsyaa85BUCXwKeB7YMSLeTpv+BeyYnvcG5hS8bW5Kqyu99j5GSXpB0gsLFy5s2AaYmbVyZQ8ekrYF/gc4LyKWFm6LiACiIfYTEeMiYnBEDO7Ro0dDFGlmZklZg4ek9mSB41cR8b8peX4ajiL9uyClzwMqCt7eJ6XVlW5mZmVSzrOtBNwOzIiI/yrYNB6oPmPqNODhgvRT01lXBwBL0vDWBGCIpG5ponxISjMzszJpV8Z9fRY4BXhZ0ksp7RLgB8D9kr4GzAZOSNseA4YBM4EPgDMAImKRpO8BU1K+KyNiUVlaYGZmQBmDR0Q8B6iOzV8okj+Ac+oo6w7gjoarnZmZ5eErzM3MLDcHDzMzy63k4CHpc5I2GOaS1E7S5xq2WmZm1pzl6Xk8DXQvkt4lbTMzs1YiT/AQxS/g2x54v2GqY2ZmLUG9Z1tJGp+eBnCPpJUFm9sCnwD+1Ah1MzOzZqqUU3XfTf8KeA/4sGDbKuA54LYGrpeZmTVj9QaPiDgDQNIs4PqI8BCVmVkrV/JFghFxRWNWxMzMWo6Sg0dahOlqsqvBe1Jrsj0itmvYqpmZWXOV5/Ykt5OtwTEOqKKBbp1uZmYtT57g8QXgiIh4vrEqY2ZmLUOe6zwWAMsbqyJmZtZy5AkelwJXppUAzcysFcszbHUZUAkskDQbWF24MSL2bMB6mZlZM5YneDzYaLUwM7MWxdd5mJlZbl7Pw8zMcstzkeAyNnJthy8SNDNrPfLMeYyu9bo92UWDx5FdeW5mZq1EnjmPu4qlS/or2QWEP2moSpmZWfPWEHMeTwPDG6AcMzNrIRoieIwE3mmAcszMrIXIM2H+MutPmAvYkWxd8280cL3MzKwZ25yLBNcBC4FJEfGP+t4s6Q7gS8CCiPhEShsLnJXKAbgkIh5L2y4GvgasBc6NiAkp/Ujgv8mWwP15RPwgRxvMzKwBlPMiwTuBm4C7a6X/OCKuL0yQtAfZcNggoBfwhKSPp803A0cAc4EpksZHxPTNrJuZmeWQp+cBgKTDgD3IhrCmRcSkUt4XEc9KqixxNyOA+yJiJfBPSTOB/dK2mRHxZqrLfSmvg4eZWRmVPGEuqbekvwATgYuAMcCTkp6X1Gsz6jBa0lRJd0jqltJ6A3MK8sxNaXWlN6rKvn2RVO+jsm/fxq6KmVmzkKfncSPZ/EP/iPgngKRdgHvStuM3Yf+3AN8j68V8D/gR8O+bUM4GJI0CRgH03cyD+uw5c1j1+B/qzddh6MGbtR8zs5Yiz6m6RwDnVAcOgDR8dG7alltEzI+ItRGxDriNj4am5gEVBVn7pLS60ouVPS4iBkfE4B49emxK9czMrA55r/Modm+rTV7LXNJOBS+/DLySno8HRkraStLOwG7AX4ApwG6SdpbUgWxSffym7t/MzDZNnmGrJ4GfSDoxIuYASOoL3JC2bZSke4FDgR0kzQUuBw6VtDdZAJoF/AdAREyTdD/ZRPgash7P2lTOaGAC2am6d0TEtBxtMDOzBpAneJxL9iv/TUlVKa0X8DJwYn1vjohieW7fSP6rKXLDxXQdyGOlVNjMzBpHnus85kjaBzgcGJCSZ0TEE41SMzMza7bqnfOQNFTSLEnbRWZiRPwkIn5CdpHeLEmbNGFuZmYtUykT5qOBH0bE0tobImIJcC1wXgPXy8zMmrFSgseewMaGpp4C9mqY6piZWUtQSvDoQXYTxLoEsH3DVMfMzFqCUoLHXLLeR132pI4L9czMbMtUSvD4LfA9SVvX3iCpE3BlymNmZq1EKafqXk1236rXJN0EVK/dMZBsMl3ANY1TPTMza47qDR4RsUDSgWQ3MbyGLFhANtcxgezq7/mNV0UzM2tuSrpIMCJmA8PSLdP7kwWQ1yPivcasnJmZNU+5FoNKwWJKI9XFzMxaiLx31TUzM3PwMDOz/Bw8zMwsNwcPMzPLzcHDzMxyc/AwM7PcHDzMzCw3Bw8zM8vNwaMBtVUbJNX7qOzbt6mrama2WXJdYW4btzbWserxP9Sbr8PQg8tQGzOzxuOeh5mZ5ebgYWZmuTl4mJlZbg4eZmaWW9mCh6Q7JC2Q9EpBWndJEyW9nv7tltIl6UZJMyVNlbRPwXtOS/lfl3RauepvZmYfKWfP407gyFppY4AnI2I34Mn0GmAosFt6jCJbxRBJ3YHLgf2B/YDLqwOOmZmVT9mCR0Q8CyyqlTwCuCs9vws4piD97shMBrpK2gn4IjAxIhalhakmsmFAMjOzRtbUcx47RsTb6fm/gB3T897AnIJ8c1NaXekbkDRK0guSXli4cGHD1trMrJVr6uBRIyICiAYsb1xEDI6IwT169GioYs3MjKYPHvPTcBTp3wUpfR5QUZCvT0qrK93MzMqoqYPHeKD6jKnTgIcL0k9NZ10dACxJw1sTgCGSuqWJ8iEpzczMyqhs97aSdC9wKLCDpLlkZ039ALhf0teA2cAJKftjwDBgJvABcAZARCyS9D1gSsp3ZUTUnoQ3M7NGVrbgEREn1rHpC0XyBnBOHeXcAdzRgFUzM7OcmnrYyszMWiAHDzMzy83Bw8zMcnPwMDOz3Bw8zMwsNwcPMzPLzcHDzMxyc/AwM7PcHDzMzCw3Bw8zM8vNwcPMzHJz8DAzs9wcPMzMLDcHDzMzy83Bw8zMcnPwMDOz3Bw8zMwsNwcPMzPLzcHDzMxyc/BoAm3VBkn1Pir79m3qqpqZFdWuqSvQGq2Ndax6/A/15usw9OAy1MbMLD/3PMzMLDcHDzMzy83Bw8ysGano16+kOdGm5jkPM7NmZO5bbzFu2t/rzTdq0F5lqE3dmkXPQ9IsSS9LeknSCymtu6SJkl5P/3ZL6ZJ0o6SZkqZK2qdpa29m1vo0i+CRfD4i9o6Iwen1GODJiNgNeDK9BhgK7JYeo4Bbyl5TM7NWrjkFj9pGAHel53cBxxSk3x2ZyUBXSTs1Qf3MzFqt5hI8Avi9pBcljUppO0bE2+n5v4Ad0/PewJyC985NaeuRNErSC5JeWLhwYWPV28ysVWouE+YHRcQ8ST2BiZL+UbgxIkJS5CkwIsYB4wAGDx6c671mZrZxzaLnERHz0r8LgP8D9gPmVw9HpX8XpOzzgIqCt/dJaWZmViZNHjwkbSOpc/VzYAjwCjAeOC1lOw14OD0fD5yazro6AFhSMLxlZmZl0ByGrXYE/i9d9NIO+HVE/E7SFOB+SV8DZgMnpPyPAcOAmcAHwBnlr3J5VN9AsT79KiqY9dZbZaiRmVmmyYNHRLwJbHC1S0S8C3yhSHoA55Shak3ON1A0s+aqyYetzMys5XHwMDOz3Bw8zMwsNwcPM7MyaCl3yy1Vk0+Y2+bzWVlmzV9LuVtuqRw8tgA+K8vMys3DVmZmlpuDRytSPbxVyqOyb9+mrq6ZNWMetmpFSh3eAg9xmdnGuedhZma5OXhYUaUOcXl4y6x18rCVFeUzuMzqV9GvH3Nb6envDh5mZpuo1Gs3oOVcv1EqD1uZmdWypV0N3hjc8zAzq2VLuxq8MbjnYZvFE+tmrZN7HrZZPLFu1jq552FmLV6pcxTtOnTwXEYDcc/DyqLUO/9u1a49K9esrjef7xBshfLMUXguo2E4eFhZ5Bne8jCYWfPnYStrkUqdqO/YvrRhCk/o163UIaE8w0INnc/Kzz0Pa5HckymfvBfCNfTwkYeZmicHD6vTFVdc0dRVaJYq+/Zl9pw59eZrqnmZUm+Z0bZ9e9aurn9+yawYBw+r0/Czv15vnqsnP9Hg+22KoFXqhH61Sw84vN48P3j+qQZdHnir9h1YVcLJBO1U2mi01qwtKV87tSn5l33bEvfdtsQySy3Pys/Bo4E19IGv1PIaOl8eDV1mqUGrIdu8NtaVFBCq911qHRsyyABMvvvBevMccOrxTZIP4LOnnVByoCmlzFLLKzXAtYRg1FICa4sNHpKOBP4baAv8PCJ+0MRVAhr+wFdqeQ2ZrzpvqRq6zQ2935bw2ZR6EG/u1sa6Bm1LnvKaIhjl6ZXlyduQbWmsINMig4ektsDNwBHAXGCKpPERMb2x9tlUB74tSWtsszUvDR2M8vTK8pRZioYO1Hm1yOAB7AfMjIg3ASTdB4wAGi14+MBnZvYRRURT1yE3SccDR0bEmen1KcD+ETG6IM8oYFR6uTvw6mbscgfgnc14f0vU2trc2toLbnNrsTlt7hcRPYptaKk9j3pFxDhgXEOUJemFiBjcEGW1FK2tza2tveA2txaN1ebmf+pBcfOAioLXfVKamZmVQUsNHlOA3STtLKkDMBIY38R1MjNrNVrksFVErJE0GphAdqruHRExrRF32SDDXy1Ma2tza2svuM2tRaO0uUVOmJuZWdNqqcNWZmbWhBw8zMwsNwePRNKRkl6VNFPSmCLbt5L0m7T9eUmVTVDNBlVCm78labqkqZKelNSvKerZkOprc0G+4ySFpBZ/WmcpbZZ0Qvqup0n6dbnr2NBK+NvuK+lpSX9Lf9/DmqKeDUXSHZIWSHqlju2SdGP6PKZK2mezdxoRrf5BNun+BrAL0AH4O7BHrTxnA7em5yOB3zR1vcvQ5s8DndLzb7SGNqd8nYFngcnA4Kaudxm+592AvwHd0uueTV3vMrR5HPCN9HwPYFZT13sz2/w5YB/glTq2DwMeBwQcADy/uft0zyNTc7uTiFgFVN/upNAI4K70/EHgC2rZS5jV2+aIeDoiPkgvJ5NdT9OSlfI9A3wPuBZYUc7KNZJS2nwWcHNEvAcQEQvKXMeGVkqbA9guPe8CVJWxfg0uIp4FFm0kywjg7shMBrpK2mlz9ungkekNFK7uMzelFc0TEWuAJcD2Zald4yilzYW+RvbLpSWrt82pO18REb8tZ8UaUSnf88eBj0v6o6TJ6Y7VLVkpbR4LnCxpLvAY8P/KU7Umk/f/e71a5HUeVl6STgYGA4c0dV0ak6Q2wH8BpzdxVcqtHdnQ1aFkvctnJX0yIhY3ZaUa2YnAnRHxI0mfAX4p6RMRsa6pK9ZSuOeRKeV2JzV5JLUj6+q+W5baNY6SbvEi6XDgUuDoiFhZpro1lvra3Bn4BDBJ0iyyseHxLXzSvJTveS4wPiJWR8Q/gdfIgklLVUqbvwbcDxARfwY6kt1AcEvV4Ld0cvDIlHK7k/HAaen58cBTkWaiWqh62yzpU8DPyAJHSx8Hh3raHBFLImKHiKiMiEqyeZ6jI+KFpqlugyjlb/shsl4HknYgG8Z6s4x1bGiltPkt4AsAkgaSBY+FZa1leY0HTk1nXR0ALImItzenQA9bUfftTiRdCbwQEeOB28m6tjPJJqZGNl2NN1+Jbf4hsC3wQDo34K2IOLrJKr2ZSmzzFqXENk8AhkiaDqwFvh0RLbZXXWKbLwBuk3Q+2eT56S35x6Cke8l+AOyQ5nEuB9oDRMStZPM6w4CZwAfAGZu9zxb8eZmZWRPxsJWZmeXm4GFmZrk5eJiZWW4OHmZmlpuDh5mZ5ebgYS2OpMot5Y63G5PaeHxT16Muko6XFAWvT5e0fDPLPDS1e0u+YG+L4OBhNSTdmf7j/met9Fb5H7q1tnsz/IbsTrYlkTRL0oW1kv8E7ETLvntDq+DgYbWtAL4tqUe5d5yuBm71yvk5SGrXUHeHjogPN/dOBBGxKiL+1ZIv2GstHDystqeBWcB/biyTpD0k/VbSsrQIzb2SPlaw/U5Jj9Z6z9jCxWqq80i6KF0VOzelnyxpSkHZD0jKdQdQSZMk/VTSNZLeSeVcn25+WJ2ng6RrJc2V9EHa5xfTtsr0WQAsTD2QO5UtMrQs3d8MSf3TtlsLyr1K0hMFrz+nbAGxFZLmS/pxYYBIdb0l1W8h8Mc62nRRassBdWw/XdJyScMlvZb297SkXQryjJX0Ssr7BrAS2EZSF0nj0ue0TNIztYcFJZ0qaXb6rB4Fdiy2/1ppw1LbP5T0rqRHJHWUNAnoB/wwfX6R8m/Q25N0rKSXJa2UNEfSpYUBL/VgLpP0M0lL0/f57Vr1+I+Cz+QdSROqv0PbNA4eVts6YAzwdUm7FsugbB2AZ4FXyNZOOJzsNiYPFx6cS3QIsCdwJOleQ2QL+FwO7AV8ieyGdffmLBfgJGANcCAwGjgP+ErB9l+k/X+V7IaIdwGPSNqL7PbVx6V8g8iGUr4JPEd2H6TqA+uhwDvpXwrSJgGkoPc42WJLnyK7Id+JwPdr1fVksoV6DgZOLdygzPVktw0/JK3HUJetyD67M4DPkN2e439r9S52Tm3+N7LPeCXwW7JbdH8p1fNZ4Kn0XSNpf+BOskWU9gYeAa7cSD1Qdmv38cBEYF+yxcWeITvuHEv2Y+FKss+26NoSkvYFHgD+F/gk2d/mxWTfZ6HzgZfJFkS6FrhO2d1ySUHwZuAKYHeyv7PfbazuVoKmXgHLj+bzIDs4PJqePw3cl54fSnb/nx3S6yuBJ2u9t1vKs1/tsgryjKVgpbOUZyGwVT31GpDK7pNeV6bXda7yR3bw/nOttInAz9PzXckCZd9aeR4Cflqs3QV5JgMXp+f3kB2sPyQ7AHYiOxgflLZfDbwOtCl4/+kpT6eCuk4t0oYgC3a/ILvTbb96PqfT03s+W5DWj+x+VYcXfAergR0L8hwGLAe2rlXeS8B30vNfAxNrbf95dghZb//LC17/sfpvqI76zgIurJVW+2/tV2Q3Ia39dzS3Vjn31srzOnBZen4s2fo7nZv6/9iW9HDPw+pyEfBv6ZdfbfsCn0tDJMvTUEX1QjNFeysb8UrUutW7pH0kPZyGSJYB1Xe17Zuz7Km1XlcBPdPzfch+6U+v1Y6jqL8Nk/iop3EIWc/i+ZR2IFlv5y9p+0Bgcqy/TsRzZL2r/gVpL9axr+tTuQdFxOx66gVZQKzeN+k9VWRLrVabGxHzC17vSxb0Ftb6LD7BR5/FQODPtfZV+3VtnwKeLKHOGzOQDYfxngN6S9quIG1j3/VEYDbwT0m/knSapM6bWa9Wz2N+VlRE/EXS/wDXkS3LWqgN2TBH7TNlAKoPSuvIDs6F2hfJ/37hC0nbkN0N9QngFGAB2bDVH8gOuHmsrvU6+Giotk16/eki+T6sp9xJwGhlt/LejuzAP4lsWGYBWY9nVQn1K5wUfr+OPBPJhrmGkfXUSlHfZHPtfbUh+94OLpJ3aYn7bAqF7azzu46IZcpWiPwccATZsNc1kj4dES16+dmm5OBhG3MJMJ1sPqLQX4ETgNkRUfs/bbWFZGPjhWq/LmYAWbC4JLKFiZB0bIn1zeNvZMHtYxHxdB15qgNA21rpz5HNLXwHeC4i1qYJ4NvIDsKF4+kzgBMktSnofRyUyn6jhHo+Rjbe/4CkiIi76snfhmwe6k8AkvoCvVI96vJXssnvdRFR1zoeM8gWxypUdOK+wN/I5hduq2P7Kjb8bIvt97O10g4i6z0tq+e9NSJbOvopsnmcy8mC/JfI5nBsE3jYyuoUETPJ/nN9s9amm8lWUvyNpP0l7SLp8HS2TvVwwFPApyT9u7Izkr7DhgeBYt4imw8Ynco9ig17PpstIl4jG0+/U9nFbrtIGizpwoJgNZvsF+xRknpI2ja9dzlZb+NkPjojazLZ6mwHkCbLk5+SHbx/Kmlgas8PgJsi4oMS6/oo2eT2rZJOrSf7GuAGSZ+RtDfZSQDTyHpydXmCbGjoYUlDlS2i9BlJV0iq7o3cCBwu6WJJu0k6C/hyPXW5mmzo8yplZ+cNknS+pE5p+yzgYEm9Vfe1ND8CDlF2ltjHJZ1EthbHdfXsu4akL0n6pqRPSepHdrJAZzYeUK0eDh5WnyvJDkg1Ulf/s2RDU78jOzjdTHbQX5nyTCA7u+VqsgNtJdmBdKMiYiHZio3HkPV6Lge+1RANKeIMssno64B/AI+SDW3MTnWZl/Z/NVmP4qaC904i67lPSnlXkM17rGT9OYd5wFCy8f+XgDvIzhy7JE9FUwA5AfhZPQFkZarv3ak+bYBjI80c11F2kA2LPUXWS3iVbInW3cnmDojsDK+vAd8gm184lmziemN1fowswAwl64U8Qza0V90D+y7Z0qhvUMcqfhHxV7LAeRzZ2X0/SI+biuWvw2Kyv6cnyL7nC4EzI+IPOcqwWrwYlNkWQtLpZD2abZu6Lrblc8/DzMxyc/AwM7PcPGxlZma5uedhZma5OXiYmVluDh5mZpabg4eZmeXm4GFmZrn9f1nGwcqsO4OVAAAAAElFTkSuQmCC\n", + "text/plain": [ + "<Figure size 432x288 with 1 Axes>" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "#plotting the graph\n", + "plt.figure(figsize=(6,4))\n", + "sns.histplot(df_plot,x=\"predictions\",hue=\"y_truth\",bins=30,palette=sns.color_palette(\"husl\", 2))\n", + "plt.xlabel(\"Neural network predictions\",fontsize=14)\n", + "plt.ylabel(\"Count\",fontsize=14)\n", + "plt.title(\"Neural network output for 29 bins\")\n", + "plt.legend([\"electrons (1)\",\"pions (0)\"],fontsize='large')\n", + "plt.show()" + ] + }, + { + "cell_type": "code", + "execution_count": 57, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "<Figure size 504x504 with 1 Axes>" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "from sklearn.metrics import roc_curve\n", + "fpr2, tpr2, thresholds2=roc_curve(y_test,predictionsSnn_edited)\n", + "plt.figure(figsize=(7,7))\n", + "plt.plot([0, 1], [0, 1], '--',color='red',label='Thresold')\n", + "plt.plot(fpr2, tpr2,color='green',label='Custom model',marker=\"*\")\n", + "plt.ylabel('True positive rate(Recall)')\n", + "plt.xlabel('False positive rate')\n", + "plt.title('ROC')\n", + "plt.grid()\n", + "plt.legend()\n", + "plt.show()\n" + ] + }, + { + "cell_type": "code", + "execution_count": 58, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "0.12766290726817042\n" + ] + } + ], + "source": [ + "#rejection \n", + "# how many pion falls inthe region greater than the threshold value with respect to the\n", + "# total pions \n", + "pion_rejected = len(df_plot[(df_plot['predictions']>threshold_limit) & (df_plot['y_truth']==0)])\n", + "total_pion = len(df_plot[df_plot['y_truth']==0])\n", + "rejection_ratio = pion_rejected/total_pion \n", + "print(rejection_ratio)" + ] + }, + { + "cell_type": "code", + "execution_count": 59, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "value : 0.8743647877413807, index 0\n" + ] + } + ], + "source": [ + "#finding best threshold\n", + "thresholds_arr = np.linspace(0,1,100)\n", + "f1Arr=[]\n", + "for i in range(0,len(thresholds_arr)):\n", + " temp = np.where(predictions_snn>thresholds_arr[i],1,0)\n", + " f1Arr.append(f1_score(temp,y_test))\n", + "print(f\"value : {max(f1Arr)}, index {np.argmax(f1Arr)}\")" + ] + }, + { + "cell_type": "code", + "execution_count": 60, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "0.494949494949495" + ] + }, + "execution_count": 60, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "thresholds_arr[49]" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.8.10" + } + }, + "nbformat": 4, + "nbformat_minor": 4 +} diff --git a/NN_model29bins.h5 b/NN_model29bins.h5 deleted file mode 100644 index 90e3f42a459ddab1613762d78ce5f284c3c0c78d..0000000000000000000000000000000000000000 Binary files a/NN_model29bins.h5 and /dev/null differ diff --git a/NN_model30mm29bins.h5 b/NN_model30mm29bins.h5 new file mode 100644 index 0000000000000000000000000000000000000000..01ddfe92309952c7860a09ce6fb33050a2fc52e2 Binary files /dev/null and b/NN_model30mm29bins.h5 differ diff --git a/all_three.pdf b/all_three.pdf new file mode 100644 index 0000000000000000000000000000000000000000..079429cee6de1343ebff31d05ffb00929bd3bc94 Binary files /dev/null and b/all_three.pdf differ