diff --git a/MachineLearning_binsInput_30mm.ipynb b/MachineLearning_binsInput_30mm.ipynb new file mode 100644 index 0000000000000000000000000000000000000000..ba4de90ffe075f4ef7cf24aae44c160df7e90e75 --- /dev/null +++ b/MachineLearning_binsInput_30mm.ipynb @@ -0,0 +1,3009 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 66, + "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": 67, + "metadata": {}, + "outputs": [], + "source": [ + "# df_test = pd.read_csv(\"testDataAll_500k_30exp.csv\")" + ] + }, + { + "cell_type": "code", + "execution_count": 68, + "metadata": {}, + "outputs": [], + "source": [ + "# X_test = df_test.drop(columns='target')\n", + "# y_test = df_test['target']" + ] + }, + { + "cell_type": "code", + "execution_count": 69, + "metadata": {}, + "outputs": [], + "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": 70, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Total entries is 200000\n" + ] + } + ], + "source": [ + "file=uproot4.open(\"pion30mmGem.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": 71, + "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": 72, + "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": 73, + "metadata": {}, + "outputs": [], + "source": [ + "data_idx = df_pion.index[(df_pion['position Z pion']>=3510) & \n", + " (df_pion['energyDeposit_pion']>1000)].tolist()" + ] + }, + { + "cell_type": "code", + "execution_count": 74, + "metadata": {}, + "outputs": [], + "source": [ + "#removing the defected points\n", + "df_pion=df_pion.drop(data_idx,axis=0)" + ] + }, + { + "cell_type": "code", + "execution_count": 75, + "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": 75, + "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": 76, + "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": 77, + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "<ipython-input-77-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": 78, + "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": 79, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Number:- 0 (4804,)\n", + "Number:- 1 (4291,)\n", + "Number:- 2 (4017,)\n", + "Number:- 3 (3871,)\n", + "Number:- 4 (3853,)\n", + "Number:- 5 (3618,)\n", + "Number:- 6 (3526,)\n", + "Number:- 7 (3518,)\n", + "Number:- 8 (3249,)\n", + "Number:- 9 (3220,)\n", + "Number:- 10 (3115,)\n", + "Number:- 11 (3174,)\n", + "Number:- 12 (3077,)\n", + "Number:- 13 (2938,)\n", + "Number:- 14 (2912,)\n", + "Number:- 15 (2925,)\n", + "Number:- 16 (2907,)\n", + "Number:- 17 (2958,)\n", + "Number:- 18 (2802,)\n", + "Number:- 19 (2657,)\n", + "Number:- 20 (2845,)\n", + "Number:- 21 (2708,)\n", + "Number:- 22 (2703,)\n", + "Number:- 23 (2639,)\n", + "Number:- 24 (2594,)\n", + "Number:- 25 (2530,)\n", + "Number:- 26 (2640,)\n", + "Number:- 27 (2583,)\n", + "Number:- 28 (2579,)\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": 80, + "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=2530\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": 81, + "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>6.471384</td>\n", + " <td>2.244250</td>\n", + " <td>2.752055</td>\n", + " <td>1.142047</td>\n", + " <td>19.701662</td>\n", + " <td>8.743987</td>\n", + " <td>1.754663</td>\n", + " <td>9.929188</td>\n", + " <td>2.746885</td>\n", + " <td>1.027730</td>\n", + " <td>...</td>\n", + " <td>1.762712</td>\n", + " <td>6.942644</td>\n", + " <td>2.015876</td>\n", + " <td>1.459806</td>\n", + " <td>1.940457</td>\n", + " <td>1.402185</td>\n", + " <td>1.394027</td>\n", + " <td>3.576089</td>\n", + " <td>5.189058</td>\n", + " <td>0</td>\n", + " </tr>\n", + " <tr>\n", + " <th>1</th>\n", + " <td>1.449779</td>\n", + " <td>1.154144</td>\n", + " <td>3.655569</td>\n", + " <td>13.758029</td>\n", + " <td>5.381762</td>\n", + " <td>1.184633</td>\n", + " <td>2.671839</td>\n", + " <td>7.546498</td>\n", + " <td>2.085563</td>\n", + " <td>1.098704</td>\n", + " <td>...</td>\n", + " <td>7.347216</td>\n", + " <td>8.441882</td>\n", + " <td>23.915552</td>\n", + " <td>3.637949</td>\n", + " <td>1.027290</td>\n", + " <td>3.500812</td>\n", + " <td>1.529030</td>\n", + " <td>2.912396</td>\n", + " <td>2.686222</td>\n", + " <td>0</td>\n", + " </tr>\n", + " <tr>\n", + " <th>2</th>\n", + " <td>14.103167</td>\n", + " <td>1.668879</td>\n", + " <td>2.409905</td>\n", + " <td>3.438835</td>\n", + " <td>1.294432</td>\n", + " <td>1.458165</td>\n", + " <td>6.312615</td>\n", + " <td>1.044867</td>\n", + " <td>1.884717</td>\n", + " <td>1.920816</td>\n", + " <td>...</td>\n", + " <td>1.345755</td>\n", + " <td>1.280264</td>\n", + " <td>1.045259</td>\n", + " <td>1.186525</td>\n", + " <td>1.708049</td>\n", + " <td>1.166042</td>\n", + " <td>1.388021</td>\n", + " <td>1.225349</td>\n", + " <td>4.410449</td>\n", + " <td>0</td>\n", + " </tr>\n", + " <tr>\n", + " <th>3</th>\n", + " <td>43.633139</td>\n", + " <td>1.986772</td>\n", + " <td>1.128156</td>\n", + " <td>2.568506</td>\n", + " <td>1.338208</td>\n", + " <td>1.244336</td>\n", + " <td>9.699119</td>\n", + " <td>4.819314</td>\n", + " <td>2.138514</td>\n", + " <td>6.230587</td>\n", + " <td>...</td>\n", + " <td>18.775028</td>\n", + " <td>7.528972</td>\n", + " <td>1.862461</td>\n", + " <td>3.747453</td>\n", + " <td>4.053209</td>\n", + " <td>1.084483</td>\n", + " <td>1.253709</td>\n", + " <td>1.123334</td>\n", + " <td>5.447934</td>\n", + " <td>0</td>\n", + " </tr>\n", + " <tr>\n", + " <th>4</th>\n", + " <td>1.154440</td>\n", + " <td>4.051877</td>\n", + " <td>1.460459</td>\n", + " <td>1.333732</td>\n", + " <td>2.232161</td>\n", + " <td>1.588309</td>\n", + " <td>5.744071</td>\n", + " <td>2.525429</td>\n", + " <td>6.551503</td>\n", + " <td>1.109985</td>\n", + " <td>...</td>\n", + " <td>6.113165</td>\n", + " <td>1.000612</td>\n", + " <td>3.326439</td>\n", + " <td>1.738286</td>\n", + " <td>3.298439</td>\n", + " <td>2.748093</td>\n", + " <td>4.604361</td>\n", + " <td>1.171999</td>\n", + " <td>1.083598</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>2525</th>\n", + " <td>1.281692</td>\n", + " <td>1.452979</td>\n", + " <td>1.333335</td>\n", + " <td>12.248724</td>\n", + " <td>1.012396</td>\n", + " <td>3.438146</td>\n", + " <td>1.280306</td>\n", + " <td>3.385248</td>\n", + " <td>3.907522</td>\n", + " <td>1.774157</td>\n", + " <td>...</td>\n", + " <td>2.260722</td>\n", + " <td>3.337889</td>\n", + " <td>20.163643</td>\n", + " <td>12.519456</td>\n", + " <td>1.075721</td>\n", + " <td>1.082024</td>\n", + " <td>1.705762</td>\n", + " <td>2.180315</td>\n", + " <td>1.348664</td>\n", + " <td>0</td>\n", + " </tr>\n", + " <tr>\n", + " <th>2526</th>\n", + " <td>2.365205</td>\n", + " <td>1.624718</td>\n", + " <td>2.121024</td>\n", + " <td>4.422407</td>\n", + " <td>4.178382</td>\n", + " <td>1.994367</td>\n", + " <td>1.231936</td>\n", + " <td>1.683951</td>\n", + " <td>1.246727</td>\n", + " <td>1.096337</td>\n", + " <td>...</td>\n", + " <td>1.569221</td>\n", + " <td>10.910481</td>\n", + " <td>1.530850</td>\n", + " <td>1.771224</td>\n", + " <td>1.894673</td>\n", + " <td>1.144706</td>\n", + " <td>2.733251</td>\n", + " <td>16.019852</td>\n", + " <td>8.661417</td>\n", + " <td>0</td>\n", + " </tr>\n", + " <tr>\n", + " <th>2527</th>\n", + " <td>7.806934</td>\n", + " <td>7.350956</td>\n", + " <td>2.708142</td>\n", + " <td>9.138442</td>\n", + " <td>3.242947</td>\n", + " <td>1.524759</td>\n", + " <td>4.341005</td>\n", + " <td>1.037252</td>\n", + " <td>2.340873</td>\n", + " <td>1.574057</td>\n", + " <td>...</td>\n", + " <td>1.007704</td>\n", + " <td>20.770933</td>\n", + " <td>1.527044</td>\n", + " <td>1.897426</td>\n", + " <td>9.791263</td>\n", + " <td>1.438535</td>\n", + " <td>2.788505</td>\n", + " <td>1.113529</td>\n", + " <td>8.274163</td>\n", + " <td>0</td>\n", + " </tr>\n", + " <tr>\n", + " <th>2528</th>\n", + " <td>1.082388</td>\n", + " <td>2.088608</td>\n", + " <td>4.835772</td>\n", + " <td>2.027613</td>\n", + " <td>7.823048</td>\n", + " <td>5.711072</td>\n", + " <td>8.092815</td>\n", + " <td>22.510201</td>\n", + " <td>6.594293</td>\n", + " <td>2.719781</td>\n", + " <td>...</td>\n", + " <td>2.049758</td>\n", + " <td>10.962074</td>\n", + " <td>2.961351</td>\n", + " <td>1.745950</td>\n", + " <td>1.040520</td>\n", + " <td>1.116142</td>\n", + " <td>3.827451</td>\n", + " <td>1.301631</td>\n", + " <td>1.773457</td>\n", + " <td>0</td>\n", + " </tr>\n", + " <tr>\n", + " <th>2529</th>\n", + " <td>3.818783</td>\n", + " <td>5.537971</td>\n", + " <td>2.781696</td>\n", + " <td>1.427794</td>\n", + " <td>1.266174</td>\n", + " <td>1.479761</td>\n", + " <td>8.445367</td>\n", + " <td>4.257022</td>\n", + " <td>1.232014</td>\n", + " <td>1.999115</td>\n", + " <td>...</td>\n", + " <td>1.190325</td>\n", + " <td>1.720553</td>\n", + " <td>18.765770</td>\n", + " <td>1.040707</td>\n", + " <td>13.036180</td>\n", + " <td>1.040394</td>\n", + " <td>2.171502</td>\n", + " <td>2.553197</td>\n", + " <td>1.375206</td>\n", + " <td>0</td>\n", + " </tr>\n", + " </tbody>\n", + "</table>\n", + "<p>2530 rows × 30 columns</p>\n", + "</div>" + ], + "text/plain": [ + " in0 in1 in2 in3 in4 in5 in6 \\\n", + "0 6.471384 2.244250 2.752055 1.142047 19.701662 8.743987 1.754663 \n", + "1 1.449779 1.154144 3.655569 13.758029 5.381762 1.184633 2.671839 \n", + "2 14.103167 1.668879 2.409905 3.438835 1.294432 1.458165 6.312615 \n", + "3 43.633139 1.986772 1.128156 2.568506 1.338208 1.244336 9.699119 \n", + "4 1.154440 4.051877 1.460459 1.333732 2.232161 1.588309 5.744071 \n", + "... ... ... ... ... ... ... ... \n", + "2525 1.281692 1.452979 1.333335 12.248724 1.012396 3.438146 1.280306 \n", + "2526 2.365205 1.624718 2.121024 4.422407 4.178382 1.994367 1.231936 \n", + "2527 7.806934 7.350956 2.708142 9.138442 3.242947 1.524759 4.341005 \n", + "2528 1.082388 2.088608 4.835772 2.027613 7.823048 5.711072 8.092815 \n", + "2529 3.818783 5.537971 2.781696 1.427794 1.266174 1.479761 8.445367 \n", + "\n", + " in7 in8 in9 ... in20 in21 in22 \\\n", + "0 9.929188 2.746885 1.027730 ... 1.762712 6.942644 2.015876 \n", + "1 7.546498 2.085563 1.098704 ... 7.347216 8.441882 23.915552 \n", + "2 1.044867 1.884717 1.920816 ... 1.345755 1.280264 1.045259 \n", + "3 4.819314 2.138514 6.230587 ... 18.775028 7.528972 1.862461 \n", + "4 2.525429 6.551503 1.109985 ... 6.113165 1.000612 3.326439 \n", + "... ... ... ... ... ... ... ... \n", + "2525 3.385248 3.907522 1.774157 ... 2.260722 3.337889 20.163643 \n", + "2526 1.683951 1.246727 1.096337 ... 1.569221 10.910481 1.530850 \n", + "2527 1.037252 2.340873 1.574057 ... 1.007704 20.770933 1.527044 \n", + "2528 22.510201 6.594293 2.719781 ... 2.049758 10.962074 2.961351 \n", + "2529 4.257022 1.232014 1.999115 ... 1.190325 1.720553 18.765770 \n", + "\n", + " in23 in24 in25 in26 in27 in28 target \n", + "0 1.459806 1.940457 1.402185 1.394027 3.576089 5.189058 0 \n", + "1 3.637949 1.027290 3.500812 1.529030 2.912396 2.686222 0 \n", + "2 1.186525 1.708049 1.166042 1.388021 1.225349 4.410449 0 \n", + "3 3.747453 4.053209 1.084483 1.253709 1.123334 5.447934 0 \n", + "4 1.738286 3.298439 2.748093 4.604361 1.171999 1.083598 0 \n", + "... ... ... ... ... ... ... ... \n", + "2525 12.519456 1.075721 1.082024 1.705762 2.180315 1.348664 0 \n", + "2526 1.771224 1.894673 1.144706 2.733251 16.019852 8.661417 0 \n", + "2527 1.897426 9.791263 1.438535 2.788505 1.113529 8.274163 0 \n", + "2528 1.745950 1.040520 1.116142 3.827451 1.301631 1.773457 0 \n", + "2529 1.040707 13.036180 1.040394 2.171502 2.553197 1.375206 0 \n", + "\n", + "[2530 rows x 30 columns]" + ] + }, + "execution_count": 81, + "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": 84, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Total entries is 200000\n" + ] + } + ], + "source": [ + "file2=uproot4.open(\"ele30mm.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": 85, + "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": 86, + "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": 87, + "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": 88, + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "<ipython-input-88-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": 89, + "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": 90, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Number:- 0 (34786,)\n", + "Number:- 1 (28332,)\n", + "Number:- 2 (24233,)\n", + "Number:- 3 (20873,)\n", + "Number:- 4 (17949,)\n", + "Number:- 5 (15901,)\n", + "Number:- 6 (14472,)\n", + "Number:- 7 (13329,)\n", + "Number:- 8 (12612,)\n", + "Number:- 9 (11803,)\n", + "Number:- 10 (11489,)\n", + "Number:- 11 (11049,)\n", + "Number:- 12 (10820,)\n", + "Number:- 13 (10654,)\n", + "Number:- 14 (10290,)\n", + "Number:- 15 (10316,)\n", + "Number:- 16 (10085,)\n", + "Number:- 17 (10115,)\n", + "Number:- 18 (9785,)\n", + "Number:- 19 (9745,)\n", + "Number:- 20 (9958,)\n", + "Number:- 21 (9956,)\n", + "Number:- 22 (9688,)\n", + "Number:- 23 (9733,)\n", + "Number:- 24 (9660,)\n", + "Number:- 25 (9349,)\n", + "Number:- 26 (9586,)\n", + "Number:- 27 (9269,)\n", + "Number:- 28 (9637,)\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": 91, + "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=9269\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": 92, + "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>6.262922</td>\n", + " <td>11.568588</td>\n", + " <td>9.816002</td>\n", + " <td>8.277820</td>\n", + " <td>10.271878</td>\n", + " <td>7.189833</td>\n", + " <td>5.094539</td>\n", + " <td>1.110241</td>\n", + " <td>9.607146</td>\n", + " <td>1.181037</td>\n", + " <td>...</td>\n", + " <td>5.167653</td>\n", + " <td>2.025500</td>\n", + " <td>1.651684</td>\n", + " <td>1.577069</td>\n", + " <td>1.092206</td>\n", + " <td>2.744162</td>\n", + " <td>1.060495</td>\n", + " <td>1.986515</td>\n", + " <td>1.665468</td>\n", + " <td>1</td>\n", + " </tr>\n", + " <tr>\n", + " <th>1</th>\n", + " <td>12.517183</td>\n", + " <td>3.699769</td>\n", + " <td>12.883152</td>\n", + " <td>5.680608</td>\n", + " <td>2.129372</td>\n", + " <td>11.041831</td>\n", + " <td>1.870922</td>\n", + " <td>1.636103</td>\n", + " <td>1.735877</td>\n", + " <td>3.544026</td>\n", + " <td>...</td>\n", + " <td>1.031911</td>\n", + " <td>3.048317</td>\n", + " <td>12.570973</td>\n", + " <td>1.084397</td>\n", + " <td>1.758054</td>\n", + " <td>1.574019</td>\n", + " <td>8.050371</td>\n", + " <td>3.624501</td>\n", + " <td>3.160499</td>\n", + " <td>1</td>\n", + " </tr>\n", + " <tr>\n", + " <th>2</th>\n", + " <td>5.027314</td>\n", + " <td>12.890419</td>\n", + " <td>14.643698</td>\n", + " <td>4.752800</td>\n", + " <td>2.263032</td>\n", + " <td>1.099057</td>\n", + " <td>18.980163</td>\n", + " <td>1.021540</td>\n", + " <td>10.289556</td>\n", + " <td>2.418181</td>\n", + " <td>...</td>\n", + " <td>8.673896</td>\n", + " <td>3.962229</td>\n", + " <td>3.228110</td>\n", + " <td>1.052217</td>\n", + " <td>1.511392</td>\n", + " <td>1.205363</td>\n", + " <td>1.019595</td>\n", + " <td>2.846630</td>\n", + " <td>1.141398</td>\n", + " <td>1</td>\n", + " </tr>\n", + " <tr>\n", + " <th>3</th>\n", + " <td>1.487078</td>\n", + " <td>15.137609</td>\n", + " <td>12.811746</td>\n", + " <td>4.057699</td>\n", + " <td>5.080855</td>\n", + " <td>9.838061</td>\n", + " <td>2.552044</td>\n", + " <td>4.491187</td>\n", + " <td>1.037641</td>\n", + " <td>4.693893</td>\n", + " <td>...</td>\n", + " <td>4.287554</td>\n", + " <td>10.572479</td>\n", + " <td>4.721035</td>\n", + " <td>3.429593</td>\n", + " <td>1.525455</td>\n", + " <td>4.981940</td>\n", + " <td>5.070576</td>\n", + " <td>7.803318</td>\n", + " <td>9.727953</td>\n", + " <td>1</td>\n", + " </tr>\n", + " <tr>\n", + " <th>4</th>\n", + " <td>5.884614</td>\n", + " <td>9.649805</td>\n", + " <td>8.440809</td>\n", + " <td>1.230395</td>\n", + " <td>1.346793</td>\n", + " <td>9.960260</td>\n", + " <td>2.002605</td>\n", + " <td>15.660647</td>\n", + " <td>7.331110</td>\n", + " <td>1.232858</td>\n", + " <td>...</td>\n", + " <td>1.004618</td>\n", + " <td>1.633203</td>\n", + " <td>2.184180</td>\n", + " <td>1.023471</td>\n", + " <td>1.977080</td>\n", + " <td>1.045109</td>\n", + " <td>1.207582</td>\n", + " <td>2.812953</td>\n", + " <td>3.060607</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>9264</th>\n", + " <td>16.151342</td>\n", + " <td>12.330885</td>\n", + " <td>12.508626</td>\n", + " <td>11.876066</td>\n", + " <td>11.906844</td>\n", + " <td>6.349202</td>\n", + " <td>9.725137</td>\n", + " <td>2.138952</td>\n", + " <td>3.436947</td>\n", + " <td>19.113702</td>\n", + " <td>...</td>\n", + " <td>1.707964</td>\n", + " <td>1.085635</td>\n", + " <td>1.520900</td>\n", + " <td>1.244185</td>\n", + " <td>4.355986</td>\n", + " <td>2.391132</td>\n", + " <td>4.261324</td>\n", + " <td>1.031169</td>\n", + " <td>14.158544</td>\n", + " <td>1</td>\n", + " </tr>\n", + " <tr>\n", + " <th>9265</th>\n", + " <td>8.593668</td>\n", + " <td>1.046783</td>\n", + " <td>13.121999</td>\n", + " <td>12.442451</td>\n", + " <td>1.689101</td>\n", + " <td>9.513883</td>\n", + " <td>2.505628</td>\n", + " <td>7.666770</td>\n", + " <td>1.254221</td>\n", + " <td>5.538728</td>\n", + " <td>...</td>\n", + " <td>3.074093</td>\n", + " <td>44.357024</td>\n", + " <td>4.089458</td>\n", + " <td>31.827589</td>\n", + " <td>2.387110</td>\n", + " <td>1.745008</td>\n", + " <td>1.269354</td>\n", + " <td>1.988024</td>\n", + " <td>2.644835</td>\n", + " <td>1</td>\n", + " </tr>\n", + " <tr>\n", + " <th>9266</th>\n", + " <td>10.853662</td>\n", + " <td>20.188892</td>\n", + " <td>17.255978</td>\n", + " <td>2.084837</td>\n", + " <td>14.272087</td>\n", + " <td>7.864694</td>\n", + " <td>3.694116</td>\n", + " <td>3.530025</td>\n", + " <td>34.556000</td>\n", + " <td>5.023234</td>\n", + " <td>...</td>\n", + " <td>3.444293</td>\n", + " <td>10.029701</td>\n", + " <td>1.017958</td>\n", + " <td>1.892318</td>\n", + " <td>1.222324</td>\n", + " <td>1.132172</td>\n", + " <td>1.124779</td>\n", + " <td>3.401483</td>\n", + " <td>1.960808</td>\n", + " <td>1</td>\n", + " </tr>\n", + " <tr>\n", + " <th>9267</th>\n", + " <td>2.845218</td>\n", + " <td>2.115265</td>\n", + " <td>2.051722</td>\n", + " <td>6.651545</td>\n", + " <td>6.937373</td>\n", + " <td>12.077046</td>\n", + " <td>1.059717</td>\n", + " <td>3.057254</td>\n", + " <td>1.330937</td>\n", + " <td>1.476441</td>\n", + " <td>...</td>\n", + " <td>6.155024</td>\n", + " <td>1.121775</td>\n", + " <td>2.706571</td>\n", + " <td>2.486011</td>\n", + " <td>1.609925</td>\n", + " <td>15.052661</td>\n", + " <td>1.090092</td>\n", + " <td>16.402546</td>\n", + " <td>4.184175</td>\n", + " <td>1</td>\n", + " </tr>\n", + " <tr>\n", + " <th>9268</th>\n", + " <td>10.397654</td>\n", + " <td>1.208177</td>\n", + " <td>2.391490</td>\n", + " <td>12.745892</td>\n", + " <td>1.635876</td>\n", + " <td>9.114953</td>\n", + " <td>8.533897</td>\n", + " <td>1.150481</td>\n", + " <td>4.796089</td>\n", + " <td>3.943765</td>\n", + " <td>...</td>\n", + " <td>4.061963</td>\n", + " <td>5.513391</td>\n", + " <td>3.801796</td>\n", + " <td>1.562252</td>\n", + " <td>9.040061</td>\n", + " <td>1.477769</td>\n", + " <td>3.567711</td>\n", + " <td>5.255371</td>\n", + " <td>1.404256</td>\n", + " <td>1</td>\n", + " </tr>\n", + " </tbody>\n", + "</table>\n", + "<p>9269 rows × 30 columns</p>\n", + "</div>" + ], + "text/plain": [ + " in0 in1 in2 in3 in4 in5 \\\n", + "0 6.262922 11.568588 9.816002 8.277820 10.271878 7.189833 \n", + "1 12.517183 3.699769 12.883152 5.680608 2.129372 11.041831 \n", + "2 5.027314 12.890419 14.643698 4.752800 2.263032 1.099057 \n", + "3 1.487078 15.137609 12.811746 4.057699 5.080855 9.838061 \n", + "4 5.884614 9.649805 8.440809 1.230395 1.346793 9.960260 \n", + "... ... ... ... ... ... ... \n", + "9264 16.151342 12.330885 12.508626 11.876066 11.906844 6.349202 \n", + "9265 8.593668 1.046783 13.121999 12.442451 1.689101 9.513883 \n", + "9266 10.853662 20.188892 17.255978 2.084837 14.272087 7.864694 \n", + "9267 2.845218 2.115265 2.051722 6.651545 6.937373 12.077046 \n", + "9268 10.397654 1.208177 2.391490 12.745892 1.635876 9.114953 \n", + "\n", + " in6 in7 in8 in9 ... in20 in21 \\\n", + "0 5.094539 1.110241 9.607146 1.181037 ... 5.167653 2.025500 \n", + "1 1.870922 1.636103 1.735877 3.544026 ... 1.031911 3.048317 \n", + "2 18.980163 1.021540 10.289556 2.418181 ... 8.673896 3.962229 \n", + "3 2.552044 4.491187 1.037641 4.693893 ... 4.287554 10.572479 \n", + "4 2.002605 15.660647 7.331110 1.232858 ... 1.004618 1.633203 \n", + "... ... ... ... ... ... ... ... \n", + "9264 9.725137 2.138952 3.436947 19.113702 ... 1.707964 1.085635 \n", + "9265 2.505628 7.666770 1.254221 5.538728 ... 3.074093 44.357024 \n", + "9266 3.694116 3.530025 34.556000 5.023234 ... 3.444293 10.029701 \n", + "9267 1.059717 3.057254 1.330937 1.476441 ... 6.155024 1.121775 \n", + "9268 8.533897 1.150481 4.796089 3.943765 ... 4.061963 5.513391 \n", + "\n", + " in22 in23 in24 in25 in26 in27 \\\n", + "0 1.651684 1.577069 1.092206 2.744162 1.060495 1.986515 \n", + "1 12.570973 1.084397 1.758054 1.574019 8.050371 3.624501 \n", + "2 3.228110 1.052217 1.511392 1.205363 1.019595 2.846630 \n", + "3 4.721035 3.429593 1.525455 4.981940 5.070576 7.803318 \n", + "4 2.184180 1.023471 1.977080 1.045109 1.207582 2.812953 \n", + "... ... ... ... ... ... ... \n", + "9264 1.520900 1.244185 4.355986 2.391132 4.261324 1.031169 \n", + "9265 4.089458 31.827589 2.387110 1.745008 1.269354 1.988024 \n", + "9266 1.017958 1.892318 1.222324 1.132172 1.124779 3.401483 \n", + "9267 2.706571 2.486011 1.609925 15.052661 1.090092 16.402546 \n", + "9268 3.801796 1.562252 9.040061 1.477769 3.567711 5.255371 \n", + "\n", + " in28 target \n", + "0 1.665468 1 \n", + "1 3.160499 1 \n", + "2 1.141398 1 \n", + "3 9.727953 1 \n", + "4 3.060607 1 \n", + "... ... ... \n", + "9264 14.158544 1 \n", + "9265 2.644835 1 \n", + "9266 1.960808 1 \n", + "9267 4.184175 1 \n", + "9268 1.404256 1 \n", + "\n", + "[9269 rows x 30 columns]" + ] + }, + "execution_count": 92, + "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": 93, + "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>6.262922</td>\n", + " <td>11.568588</td>\n", + " <td>9.816002</td>\n", + " <td>8.277820</td>\n", + " <td>10.271878</td>\n", + " <td>7.189833</td>\n", + " <td>5.094539</td>\n", + " <td>1.110241</td>\n", + " <td>9.607146</td>\n", + " <td>1.181037</td>\n", + " <td>...</td>\n", + " <td>5.167653</td>\n", + " <td>2.025500</td>\n", + " <td>1.651684</td>\n", + " <td>1.577069</td>\n", + " <td>1.092206</td>\n", + " <td>2.744162</td>\n", + " <td>1.060495</td>\n", + " <td>1.986515</td>\n", + " <td>1.665468</td>\n", + " <td>1</td>\n", + " </tr>\n", + " <tr>\n", + " <th>1</th>\n", + " <td>12.517183</td>\n", + " <td>3.699769</td>\n", + " <td>12.883152</td>\n", + " <td>5.680608</td>\n", + " <td>2.129372</td>\n", + " <td>11.041831</td>\n", + " <td>1.870922</td>\n", + " <td>1.636103</td>\n", + " <td>1.735877</td>\n", + " <td>3.544026</td>\n", + " <td>...</td>\n", + " <td>1.031911</td>\n", + " <td>3.048317</td>\n", + " <td>12.570973</td>\n", + " <td>1.084397</td>\n", + " <td>1.758054</td>\n", + " <td>1.574019</td>\n", + " <td>8.050371</td>\n", + " <td>3.624501</td>\n", + " <td>3.160499</td>\n", + " <td>1</td>\n", + " </tr>\n", + " <tr>\n", + " <th>2</th>\n", + " <td>5.027314</td>\n", + " <td>12.890419</td>\n", + " <td>14.643698</td>\n", + " <td>4.752800</td>\n", + " <td>2.263032</td>\n", + " <td>1.099057</td>\n", + " <td>18.980163</td>\n", + " <td>1.021540</td>\n", + " <td>10.289556</td>\n", + " <td>2.418181</td>\n", + " <td>...</td>\n", + " <td>8.673896</td>\n", + " <td>3.962229</td>\n", + " <td>3.228110</td>\n", + " <td>1.052217</td>\n", + " <td>1.511392</td>\n", + " <td>1.205363</td>\n", + " <td>1.019595</td>\n", + " <td>2.846630</td>\n", + " <td>1.141398</td>\n", + " <td>1</td>\n", + " </tr>\n", + " <tr>\n", + " <th>3</th>\n", + " <td>1.487078</td>\n", + " <td>15.137609</td>\n", + " <td>12.811746</td>\n", + " <td>4.057699</td>\n", + " <td>5.080855</td>\n", + " <td>9.838061</td>\n", + " <td>2.552044</td>\n", + " <td>4.491187</td>\n", + " <td>1.037641</td>\n", + " <td>4.693893</td>\n", + " <td>...</td>\n", + " <td>4.287554</td>\n", + " <td>10.572479</td>\n", + " <td>4.721035</td>\n", + " <td>3.429593</td>\n", + " <td>1.525455</td>\n", + " <td>4.981940</td>\n", + " <td>5.070576</td>\n", + " <td>7.803318</td>\n", + " <td>9.727953</td>\n", + " <td>1</td>\n", + " </tr>\n", + " <tr>\n", + " <th>4</th>\n", + " <td>5.884614</td>\n", + " <td>9.649805</td>\n", + " <td>8.440809</td>\n", + " <td>1.230395</td>\n", + " <td>1.346793</td>\n", + " <td>9.960260</td>\n", + " <td>2.002605</td>\n", + " <td>15.660647</td>\n", + " <td>7.331110</td>\n", + " <td>1.232858</td>\n", + " <td>...</td>\n", + " <td>1.004618</td>\n", + " <td>1.633203</td>\n", + " <td>2.184180</td>\n", + " <td>1.023471</td>\n", + " <td>1.977080</td>\n", + " <td>1.045109</td>\n", + " <td>1.207582</td>\n", + " <td>2.812953</td>\n", + " <td>3.060607</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>9264</th>\n", + " <td>16.151342</td>\n", + " <td>12.330885</td>\n", + " <td>12.508626</td>\n", + " <td>11.876066</td>\n", + " <td>11.906844</td>\n", + " <td>6.349202</td>\n", + " <td>9.725137</td>\n", + " <td>2.138952</td>\n", + " <td>3.436947</td>\n", + " <td>19.113702</td>\n", + " <td>...</td>\n", + " <td>1.707964</td>\n", + " <td>1.085635</td>\n", + " <td>1.520900</td>\n", + " <td>1.244185</td>\n", + " <td>4.355986</td>\n", + " <td>2.391132</td>\n", + " <td>4.261324</td>\n", + " <td>1.031169</td>\n", + " <td>14.158544</td>\n", + " <td>1</td>\n", + " </tr>\n", + " <tr>\n", + " <th>9265</th>\n", + " <td>8.593668</td>\n", + " <td>1.046783</td>\n", + " <td>13.121999</td>\n", + " <td>12.442451</td>\n", + " <td>1.689101</td>\n", + " <td>9.513883</td>\n", + " <td>2.505628</td>\n", + " <td>7.666770</td>\n", + " <td>1.254221</td>\n", + " <td>5.538728</td>\n", + " <td>...</td>\n", + " <td>3.074093</td>\n", + " <td>44.357024</td>\n", + " <td>4.089458</td>\n", + " <td>31.827589</td>\n", + " <td>2.387110</td>\n", + " <td>1.745008</td>\n", + " <td>1.269354</td>\n", + " <td>1.988024</td>\n", + " <td>2.644835</td>\n", + " <td>1</td>\n", + " </tr>\n", + " <tr>\n", + " <th>9266</th>\n", + " <td>10.853662</td>\n", + " <td>20.188892</td>\n", + " <td>17.255978</td>\n", + " <td>2.084837</td>\n", + " <td>14.272087</td>\n", + " <td>7.864694</td>\n", + " <td>3.694116</td>\n", + " <td>3.530025</td>\n", + " <td>34.556000</td>\n", + " <td>5.023234</td>\n", + " <td>...</td>\n", + " <td>3.444293</td>\n", + " <td>10.029701</td>\n", + " <td>1.017958</td>\n", + " <td>1.892318</td>\n", + " <td>1.222324</td>\n", + " <td>1.132172</td>\n", + " <td>1.124779</td>\n", + " <td>3.401483</td>\n", + " <td>1.960808</td>\n", + " <td>1</td>\n", + " </tr>\n", + " <tr>\n", + " <th>9267</th>\n", + " <td>2.845218</td>\n", + " <td>2.115265</td>\n", + " <td>2.051722</td>\n", + " <td>6.651545</td>\n", + " <td>6.937373</td>\n", + " <td>12.077046</td>\n", + " <td>1.059717</td>\n", + " <td>3.057254</td>\n", + " <td>1.330937</td>\n", + " <td>1.476441</td>\n", + " <td>...</td>\n", + " <td>6.155024</td>\n", + " <td>1.121775</td>\n", + " <td>2.706571</td>\n", + " <td>2.486011</td>\n", + " <td>1.609925</td>\n", + " <td>15.052661</td>\n", + " <td>1.090092</td>\n", + " <td>16.402546</td>\n", + " <td>4.184175</td>\n", + " <td>1</td>\n", + " </tr>\n", + " <tr>\n", + " <th>9268</th>\n", + " <td>10.397654</td>\n", + " <td>1.208177</td>\n", + " <td>2.391490</td>\n", + " <td>12.745892</td>\n", + " <td>1.635876</td>\n", + " <td>9.114953</td>\n", + " <td>8.533897</td>\n", + " <td>1.150481</td>\n", + " <td>4.796089</td>\n", + " <td>3.943765</td>\n", + " <td>...</td>\n", + " <td>4.061963</td>\n", + " <td>5.513391</td>\n", + " <td>3.801796</td>\n", + " <td>1.562252</td>\n", + " <td>9.040061</td>\n", + " <td>1.477769</td>\n", + " <td>3.567711</td>\n", + " <td>5.255371</td>\n", + " <td>1.404256</td>\n", + " <td>1</td>\n", + " </tr>\n", + " </tbody>\n", + "</table>\n", + "<p>9269 rows × 30 columns</p>\n", + "</div>" + ], + "text/plain": [ + " in0 in1 in2 in3 in4 in5 \\\n", + "0 6.262922 11.568588 9.816002 8.277820 10.271878 7.189833 \n", + "1 12.517183 3.699769 12.883152 5.680608 2.129372 11.041831 \n", + "2 5.027314 12.890419 14.643698 4.752800 2.263032 1.099057 \n", + "3 1.487078 15.137609 12.811746 4.057699 5.080855 9.838061 \n", + "4 5.884614 9.649805 8.440809 1.230395 1.346793 9.960260 \n", + "... ... ... ... ... ... ... \n", + "9264 16.151342 12.330885 12.508626 11.876066 11.906844 6.349202 \n", + "9265 8.593668 1.046783 13.121999 12.442451 1.689101 9.513883 \n", + "9266 10.853662 20.188892 17.255978 2.084837 14.272087 7.864694 \n", + "9267 2.845218 2.115265 2.051722 6.651545 6.937373 12.077046 \n", + "9268 10.397654 1.208177 2.391490 12.745892 1.635876 9.114953 \n", + "\n", + " in6 in7 in8 in9 ... in20 in21 \\\n", + "0 5.094539 1.110241 9.607146 1.181037 ... 5.167653 2.025500 \n", + "1 1.870922 1.636103 1.735877 3.544026 ... 1.031911 3.048317 \n", + "2 18.980163 1.021540 10.289556 2.418181 ... 8.673896 3.962229 \n", + "3 2.552044 4.491187 1.037641 4.693893 ... 4.287554 10.572479 \n", + "4 2.002605 15.660647 7.331110 1.232858 ... 1.004618 1.633203 \n", + "... ... ... ... ... ... ... ... \n", + "9264 9.725137 2.138952 3.436947 19.113702 ... 1.707964 1.085635 \n", + "9265 2.505628 7.666770 1.254221 5.538728 ... 3.074093 44.357024 \n", + "9266 3.694116 3.530025 34.556000 5.023234 ... 3.444293 10.029701 \n", + "9267 1.059717 3.057254 1.330937 1.476441 ... 6.155024 1.121775 \n", + "9268 8.533897 1.150481 4.796089 3.943765 ... 4.061963 5.513391 \n", + "\n", + " in22 in23 in24 in25 in26 in27 \\\n", + "0 1.651684 1.577069 1.092206 2.744162 1.060495 1.986515 \n", + "1 12.570973 1.084397 1.758054 1.574019 8.050371 3.624501 \n", + "2 3.228110 1.052217 1.511392 1.205363 1.019595 2.846630 \n", + "3 4.721035 3.429593 1.525455 4.981940 5.070576 7.803318 \n", + "4 2.184180 1.023471 1.977080 1.045109 1.207582 2.812953 \n", + "... ... ... ... ... ... ... \n", + "9264 1.520900 1.244185 4.355986 2.391132 4.261324 1.031169 \n", + "9265 4.089458 31.827589 2.387110 1.745008 1.269354 1.988024 \n", + "9266 1.017958 1.892318 1.222324 1.132172 1.124779 3.401483 \n", + "9267 2.706571 2.486011 1.609925 15.052661 1.090092 16.402546 \n", + "9268 3.801796 1.562252 9.040061 1.477769 3.567711 5.255371 \n", + "\n", + " in28 target \n", + "0 1.665468 1 \n", + "1 3.160499 1 \n", + "2 1.141398 1 \n", + "3 9.727953 1 \n", + "4 3.060607 1 \n", + "... ... ... \n", + "9264 14.158544 1 \n", + "9265 2.644835 1 \n", + "9266 1.960808 1 \n", + "9267 4.184175 1 \n", + "9268 1.404256 1 \n", + "\n", + "[9269 rows x 30 columns]" + ] + }, + "execution_count": 93, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df_eleBin" + ] + }, + { + "cell_type": "code", + "execution_count": 94, + "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": 95, + "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>1482</th>\n", + " <td>2.291025</td>\n", + " <td>4.070556</td>\n", + " <td>17.031578</td>\n", + " <td>2.385039</td>\n", + " <td>1.163008</td>\n", + " <td>8.298830</td>\n", + " <td>7.550301</td>\n", + " <td>2.316136</td>\n", + " <td>6.868140</td>\n", + " <td>4.263015</td>\n", + " <td>...</td>\n", + " <td>1.329258</td>\n", + " <td>3.049706</td>\n", + " <td>1.390965</td>\n", + " <td>2.275199</td>\n", + " <td>1.790093</td>\n", + " <td>5.413238</td>\n", + " <td>3.452246</td>\n", + " <td>1.607963</td>\n", + " <td>1.678022</td>\n", + " <td>1</td>\n", + " </tr>\n", + " <tr>\n", + " <th>3228</th>\n", + " <td>21.516895</td>\n", + " <td>6.085754</td>\n", + " <td>9.455454</td>\n", + " <td>10.521913</td>\n", + " <td>1.758941</td>\n", + " <td>2.325241</td>\n", + " <td>1.080671</td>\n", + " <td>3.666227</td>\n", + " <td>1.231649</td>\n", + " <td>2.627414</td>\n", + " <td>...</td>\n", + " <td>5.189607</td>\n", + " <td>11.490225</td>\n", + " <td>2.552481</td>\n", + " <td>1.712145</td>\n", + " <td>1.197397</td>\n", + " <td>3.197811</td>\n", + " <td>1.635554</td>\n", + " <td>6.779205</td>\n", + " <td>1.085308</td>\n", + " <td>1</td>\n", + " </tr>\n", + " <tr>\n", + " <th>6635</th>\n", + " <td>9.596698</td>\n", + " <td>13.723632</td>\n", + " <td>9.418552</td>\n", + " <td>2.036313</td>\n", + " <td>5.416900</td>\n", + " <td>1.029529</td>\n", + " <td>1.536000</td>\n", + " <td>1.659218</td>\n", + " <td>10.651306</td>\n", + " <td>3.880275</td>\n", + " <td>...</td>\n", + " <td>3.996750</td>\n", + " <td>1.220469</td>\n", + " <td>1.303998</td>\n", + " <td>1.194224</td>\n", + " <td>1.062439</td>\n", + " <td>1.050709</td>\n", + " <td>1.410888</td>\n", + " <td>3.313159</td>\n", + " <td>6.661760</td>\n", + " <td>1</td>\n", + " </tr>\n", + " <tr>\n", + " <th>3921</th>\n", + " <td>10.814733</td>\n", + " <td>2.427322</td>\n", + " <td>11.508097</td>\n", + " <td>1.048433</td>\n", + " <td>10.345317</td>\n", + " <td>1.590774</td>\n", + " <td>3.414500</td>\n", + " <td>9.387657</td>\n", + " <td>1.413503</td>\n", + " <td>9.849658</td>\n", + " <td>...</td>\n", + " <td>2.944826</td>\n", + " <td>2.277338</td>\n", + " <td>11.250781</td>\n", + " <td>1.959890</td>\n", + " <td>3.112990</td>\n", + " <td>1.470498</td>\n", + " <td>2.037700</td>\n", + " <td>1.210707</td>\n", + " <td>2.694405</td>\n", + " <td>1</td>\n", + " </tr>\n", + " <tr>\n", + " <th>11537</th>\n", + " <td>4.402209</td>\n", + " <td>7.490688</td>\n", + " <td>1.037194</td>\n", + " <td>5.524058</td>\n", + " <td>4.358868</td>\n", + " <td>3.212755</td>\n", + " <td>5.428860</td>\n", + " <td>2.837595</td>\n", + " <td>2.287366</td>\n", + " <td>3.430954</td>\n", + " <td>...</td>\n", + " <td>1.105075</td>\n", + " <td>1.166981</td>\n", + " <td>1.326689</td>\n", + " <td>1.669226</td>\n", + " <td>1.927022</td>\n", + " <td>1.018123</td>\n", + " <td>3.157541</td>\n", + " <td>1.467708</td>\n", + " <td>1.312185</td>\n", + " <td>0</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", + "1482 2.291025 4.070556 17.031578 2.385039 1.163008 8.298830 \n", + "3228 21.516895 6.085754 9.455454 10.521913 1.758941 2.325241 \n", + "6635 9.596698 13.723632 9.418552 2.036313 5.416900 1.029529 \n", + "3921 10.814733 2.427322 11.508097 1.048433 10.345317 1.590774 \n", + "11537 4.402209 7.490688 1.037194 5.524058 4.358868 3.212755 \n", + "\n", + " in6 in7 in8 in9 ... in20 in21 \\\n", + "1482 7.550301 2.316136 6.868140 4.263015 ... 1.329258 3.049706 \n", + "3228 1.080671 3.666227 1.231649 2.627414 ... 5.189607 11.490225 \n", + "6635 1.536000 1.659218 10.651306 3.880275 ... 3.996750 1.220469 \n", + "3921 3.414500 9.387657 1.413503 9.849658 ... 2.944826 2.277338 \n", + "11537 5.428860 2.837595 2.287366 3.430954 ... 1.105075 1.166981 \n", + "\n", + " in22 in23 in24 in25 in26 in27 in28 \\\n", + "1482 1.390965 2.275199 1.790093 5.413238 3.452246 1.607963 1.678022 \n", + "3228 2.552481 1.712145 1.197397 3.197811 1.635554 6.779205 1.085308 \n", + "6635 1.303998 1.194224 1.062439 1.050709 1.410888 3.313159 6.661760 \n", + "3921 11.250781 1.959890 3.112990 1.470498 2.037700 1.210707 2.694405 \n", + "11537 1.326689 1.669226 1.927022 1.018123 3.157541 1.467708 1.312185 \n", + "\n", + " target \n", + "1482 1 \n", + "3228 1 \n", + "6635 1 \n", + "3921 1 \n", + "11537 0 \n", + "\n", + "[5 rows x 30 columns]" + ] + }, + "execution_count": 95, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df_trainData.head(5)" + ] + }, + { + "cell_type": "code", + "execution_count": 96, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "1 9269\n", + "0 2530\n", + "Name: target, dtype: int64" + ] + }, + "execution_count": 96, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df_trainData['target'].value_counts()" + ] + }, + { + "cell_type": "code", + "execution_count": 97, + "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": 98, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "(5060, 30)" + ] + }, + "execution_count": 98, + "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": 99, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "1 2530\n", + "0 2530\n", + "Name: target, dtype: int64" + ] + }, + "execution_count": 99, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "#creating independent and dependent features\n", + "X = df_trainData.drop(columns=\"target\")\n", + "y = df_trainData['target']\n", + "\n", + "y.value_counts()" + ] + }, + { + "cell_type": "code", + "execution_count": 100, + "metadata": {}, + "outputs": [], + "source": [ + "from sklearn.model_selection import train_test_split\n", + "X_train,X_test,y_train,y_test = train_test_split(X,y,test_size=0.2,random_state=32)" + ] + }, + { + "cell_type": "code", + "execution_count": 101, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "The shape of X train is (4048, 29)\n", + "The shape of X test is (1012, 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": 102, + "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": 103, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array([[9.44666801e-03, 6.19461255e-02, 7.55681105e-02, ...,\n", + " 1.99351597e-03, 1.10911127e-01, 4.44316048e-02],\n", + " [1.36130995e-02, 1.29567607e-01, 6.78820513e-02, ...,\n", + " 3.48668176e-03, 7.78002225e-01, 1.19243758e-01],\n", + " [1.97069346e-02, 1.55821391e-04, 6.09018139e-03, ...,\n", + " 1.80649376e-03, 5.37404375e-03, 4.64488549e-02],\n", + " ...,\n", + " [1.43683375e-04, 2.86611678e-03, 2.23813158e-02, ...,\n", + " 3.48707254e-03, 4.44460524e-03, 6.61165579e-02],\n", + " [5.46500384e-04, 2.47670431e-03, 3.18748938e-04, ...,\n", + " 2.59738858e-01, 9.33225482e-03, 4.43935983e-02],\n", + " [5.32770869e-03, 1.53984938e-04, 2.59776019e-01, ...,\n", + " 7.64653434e-03, 8.96355080e-02, 1.01159578e-02]])" + ] + }, + "execution_count": 103, + "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": 104, + "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": 105, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "RandomForestClassifier(n_estimators=500)" + ] + }, + "execution_count": 105, + "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": 106, + "metadata": {}, + "outputs": [], + "source": [ + "predictions_rf = model_rf.predict(X_test)" + ] + }, + { + "cell_type": "code", + "execution_count": 107, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + " precision recall f1-score support\n", + "\n", + " 0 0.84 0.86 0.85 506\n", + " 1 0.86 0.84 0.85 506\n", + "\n", + " accuracy 0.85 1012\n", + " macro avg 0.85 0.85 0.85 1012\n", + "weighted avg 0.85 0.85 0.85 1012\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": 108, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "DecisionTreeClassifier()" + ] + }, + "execution_count": 108, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "model_dt=DecisionTreeClassifier()\n", + "model_dt.fit(X_train_scaled,y_train)" + ] + }, + { + "cell_type": "code", + "execution_count": 109, + "metadata": {}, + "outputs": [], + "source": [ + "predictions_dt = model_dt.predict(X_test_scaled)" + ] + }, + { + "cell_type": "code", + "execution_count": 110, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + " precision recall f1-score support\n", + "\n", + " 0 0.77 0.77 0.77 506\n", + " 1 0.77 0.76 0.77 506\n", + "\n", + " accuracy 0.77 1012\n", + " macro avg 0.77 0.77 0.77 1012\n", + "weighted avg 0.77 0.77 0.77 1012\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": 111, + "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": 112, + "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, 1) 201 \n", + " \n", + "=================================================================\n", + "Total params: 228,901\n", + "Trainable params: 227,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=1,activation=\"sigmoid\"))\n", + "\n", + "model_Snn.summary()" + ] + }, + { + "cell_type": "code", + "execution_count": 113, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 1/100\n", + "127/127 [==============================] - 2s 8ms/step - loss: 0.7415 - accuracy: 0.6282 - val_loss: 0.6897 - val_accuracy: 0.5020\n", + "Epoch 2/100\n", + "127/127 [==============================] - 1s 6ms/step - loss: 0.6540 - accuracy: 0.6917 - val_loss: 0.7179 - val_accuracy: 0.5010\n", + "Epoch 3/100\n", + "127/127 [==============================] - 1s 5ms/step - loss: 0.5885 - accuracy: 0.7125 - val_loss: 0.8066 - val_accuracy: 0.5049\n", + "Epoch 4/100\n", + "127/127 [==============================] - 1s 7ms/step - loss: 0.5797 - accuracy: 0.7236 - val_loss: 0.6475 - val_accuracy: 0.6453\n", + "Epoch 5/100\n", + "127/127 [==============================] - 1s 6ms/step - loss: 0.5673 - accuracy: 0.7216 - val_loss: 0.5810 - val_accuracy: 0.7075\n", + "Epoch 6/100\n", + "127/127 [==============================] - 1s 6ms/step - loss: 0.5471 - accuracy: 0.7352 - val_loss: 0.5156 - val_accuracy: 0.7510\n", + "Epoch 7/100\n", + "127/127 [==============================] - 1s 5ms/step - loss: 0.5288 - accuracy: 0.7500 - val_loss: 0.5075 - val_accuracy: 0.7579\n", + "Epoch 8/100\n", + "127/127 [==============================] - 1s 6ms/step - loss: 0.5253 - accuracy: 0.7423 - val_loss: 0.5008 - val_accuracy: 0.7579\n", + "Epoch 9/100\n", + "127/127 [==============================] - 1s 5ms/step - loss: 0.5098 - accuracy: 0.7594 - val_loss: 0.5054 - val_accuracy: 0.7628\n", + "Epoch 10/100\n", + "127/127 [==============================] - 1s 5ms/step - loss: 0.5142 - accuracy: 0.7530 - val_loss: 0.4948 - val_accuracy: 0.7619\n", + "Epoch 11/100\n", + "127/127 [==============================] - 1s 5ms/step - loss: 0.4993 - accuracy: 0.7653 - val_loss: 0.4866 - val_accuracy: 0.7708\n", + "Epoch 12/100\n", + "127/127 [==============================] - 1s 5ms/step - loss: 0.5005 - accuracy: 0.7616 - val_loss: 0.4966 - val_accuracy: 0.7708\n", + "Epoch 13/100\n", + "127/127 [==============================] - 1s 7ms/step - loss: 0.4899 - accuracy: 0.7661 - val_loss: 0.5050 - val_accuracy: 0.7628\n", + "Epoch 14/100\n", + "127/127 [==============================] - 1s 7ms/step - loss: 0.4949 - accuracy: 0.7621 - val_loss: 0.4927 - val_accuracy: 0.7698\n", + "Epoch 15/100\n", + "127/127 [==============================] - 1s 6ms/step - loss: 0.4793 - accuracy: 0.7836 - val_loss: 0.4919 - val_accuracy: 0.7747\n", + "Epoch 16/100\n", + "127/127 [==============================] - 1s 6ms/step - loss: 0.4712 - accuracy: 0.7838 - val_loss: 0.4877 - val_accuracy: 0.7658\n", + "Epoch 17/100\n", + "127/127 [==============================] - 1s 6ms/step - loss: 0.4732 - accuracy: 0.7762 - val_loss: 0.5060 - val_accuracy: 0.7628\n", + "Epoch 18/100\n", + "127/127 [==============================] - 1s 5ms/step - loss: 0.4739 - accuracy: 0.7742 - val_loss: 0.4827 - val_accuracy: 0.7757\n", + "Epoch 19/100\n", + "127/127 [==============================] - 1s 6ms/step - loss: 0.4768 - accuracy: 0.7737 - val_loss: 0.4721 - val_accuracy: 0.7846\n", + "Epoch 20/100\n", + "127/127 [==============================] - 1s 6ms/step - loss: 0.4724 - accuracy: 0.7888 - val_loss: 0.4708 - val_accuracy: 0.7836\n", + "Epoch 21/100\n", + "127/127 [==============================] - 1s 6ms/step - loss: 0.4638 - accuracy: 0.7863 - val_loss: 0.4818 - val_accuracy: 0.7856\n", + "Epoch 22/100\n", + "127/127 [==============================] - 1s 5ms/step - loss: 0.4645 - accuracy: 0.7898 - val_loss: 0.4796 - val_accuracy: 0.7806\n", + "Epoch 23/100\n", + "127/127 [==============================] - 1s 6ms/step - loss: 0.4642 - accuracy: 0.7861 - val_loss: 0.4685 - val_accuracy: 0.7875\n", + "Epoch 24/100\n", + "127/127 [==============================] - 1s 5ms/step - loss: 0.4539 - accuracy: 0.7937 - val_loss: 0.4805 - val_accuracy: 0.7737\n", + "Epoch 25/100\n", + "127/127 [==============================] - 1s 5ms/step - loss: 0.4545 - accuracy: 0.7885 - val_loss: 0.4648 - val_accuracy: 0.7806\n", + "Epoch 26/100\n", + "127/127 [==============================] - 1s 5ms/step - loss: 0.4552 - accuracy: 0.7851 - val_loss: 0.4641 - val_accuracy: 0.7856\n", + "Epoch 27/100\n", + "127/127 [==============================] - 1s 5ms/step - loss: 0.4599 - accuracy: 0.7920 - val_loss: 0.4667 - val_accuracy: 0.7836\n", + "Epoch 28/100\n", + "127/127 [==============================] - 1s 5ms/step - loss: 0.4553 - accuracy: 0.7878 - val_loss: 0.4698 - val_accuracy: 0.7905\n", + "Epoch 29/100\n", + "127/127 [==============================] - 1s 6ms/step - loss: 0.4581 - accuracy: 0.7878 - val_loss: 0.4600 - val_accuracy: 0.7925\n", + "Epoch 30/100\n", + "127/127 [==============================] - 1s 5ms/step - loss: 0.4452 - accuracy: 0.7947 - val_loss: 0.4670 - val_accuracy: 0.7925\n", + "Epoch 31/100\n", + "127/127 [==============================] - 1s 6ms/step - loss: 0.4449 - accuracy: 0.7997 - val_loss: 0.4585 - val_accuracy: 0.7955\n", + "Epoch 32/100\n", + "127/127 [==============================] - 1s 6ms/step - loss: 0.4462 - accuracy: 0.7977 - val_loss: 0.4581 - val_accuracy: 0.7964\n", + "Epoch 33/100\n", + "127/127 [==============================] - 1s 5ms/step - loss: 0.4408 - accuracy: 0.7982 - val_loss: 0.4503 - val_accuracy: 0.7935\n", + "Epoch 34/100\n", + "127/127 [==============================] - 1s 6ms/step - loss: 0.4393 - accuracy: 0.7997 - val_loss: 0.4484 - val_accuracy: 0.7925\n", + "Epoch 35/100\n", + "127/127 [==============================] - 1s 6ms/step - loss: 0.4484 - accuracy: 0.7885 - val_loss: 0.4564 - val_accuracy: 0.7935\n", + "Epoch 36/100\n", + "127/127 [==============================] - 1s 6ms/step - loss: 0.4421 - accuracy: 0.8021 - val_loss: 0.4479 - val_accuracy: 0.7994\n", + "Epoch 37/100\n", + "127/127 [==============================] - 1s 6ms/step - loss: 0.4337 - accuracy: 0.8001 - val_loss: 0.4530 - val_accuracy: 0.7925\n", + "Epoch 38/100\n", + "127/127 [==============================] - 1s 6ms/step - loss: 0.4364 - accuracy: 0.8051 - val_loss: 0.4447 - val_accuracy: 0.8004\n", + "Epoch 39/100\n", + "127/127 [==============================] - 1s 6ms/step - loss: 0.4341 - accuracy: 0.7989 - val_loss: 0.4359 - val_accuracy: 0.8024\n", + "Epoch 40/100\n", + "127/127 [==============================] - 1s 6ms/step - loss: 0.4340 - accuracy: 0.8019 - val_loss: 0.4553 - val_accuracy: 0.7935\n", + "Epoch 41/100\n", + "127/127 [==============================] - 1s 6ms/step - loss: 0.4211 - accuracy: 0.8063 - val_loss: 0.4404 - val_accuracy: 0.8004\n", + "Epoch 42/100\n", + "127/127 [==============================] - 1s 6ms/step - loss: 0.4291 - accuracy: 0.8026 - val_loss: 0.4334 - val_accuracy: 0.8014\n", + "Epoch 43/100\n", + "127/127 [==============================] - 1s 6ms/step - loss: 0.4266 - accuracy: 0.8051 - val_loss: 0.4405 - val_accuracy: 0.8024\n", + "Epoch 44/100\n", + "127/127 [==============================] - 1s 6ms/step - loss: 0.4216 - accuracy: 0.8125 - val_loss: 0.4346 - val_accuracy: 0.8043\n", + "Epoch 45/100\n", + "127/127 [==============================] - 1s 6ms/step - loss: 0.4200 - accuracy: 0.8142 - val_loss: 0.4432 - val_accuracy: 0.8043\n", + "Epoch 46/100\n", + "127/127 [==============================] - 1s 6ms/step - loss: 0.4205 - accuracy: 0.8078 - val_loss: 0.4373 - val_accuracy: 0.7955\n", + "Epoch 47/100\n", + "127/127 [==============================] - 1s 6ms/step - loss: 0.4027 - accuracy: 0.8179 - val_loss: 0.4274 - val_accuracy: 0.8043\n", + "Epoch 48/100\n", + "127/127 [==============================] - 1s 6ms/step - loss: 0.4175 - accuracy: 0.8147 - val_loss: 0.4282 - val_accuracy: 0.8024\n", + "Epoch 49/100\n", + "127/127 [==============================] - 1s 6ms/step - loss: 0.4159 - accuracy: 0.8113 - val_loss: 0.4262 - val_accuracy: 0.8073\n", + "Epoch 50/100\n", + "127/127 [==============================] - 1s 6ms/step - loss: 0.4116 - accuracy: 0.8150 - val_loss: 0.4238 - val_accuracy: 0.8113\n", + "Epoch 51/100\n", + "127/127 [==============================] - 1s 6ms/step - loss: 0.4246 - accuracy: 0.8115 - val_loss: 0.4129 - val_accuracy: 0.8152\n", + "Epoch 52/100\n", + "127/127 [==============================] - 1s 6ms/step - loss: 0.4075 - accuracy: 0.8150 - val_loss: 0.4213 - val_accuracy: 0.8132\n", + "Epoch 53/100\n", + "127/127 [==============================] - 1s 6ms/step - loss: 0.4052 - accuracy: 0.8209 - val_loss: 0.4281 - val_accuracy: 0.8113\n", + "Epoch 54/100\n", + "127/127 [==============================] - 1s 6ms/step - loss: 0.4111 - accuracy: 0.8157 - val_loss: 0.4178 - val_accuracy: 0.8152\n", + "Epoch 55/100\n", + "127/127 [==============================] - 1s 6ms/step - loss: 0.4150 - accuracy: 0.8110 - val_loss: 0.4098 - val_accuracy: 0.8113\n", + "Epoch 56/100\n", + "127/127 [==============================] - 1s 6ms/step - loss: 0.4048 - accuracy: 0.8273 - val_loss: 0.4142 - val_accuracy: 0.8103\n", + "Epoch 57/100\n", + "127/127 [==============================] - 1s 6ms/step - loss: 0.4038 - accuracy: 0.8211 - val_loss: 0.4218 - val_accuracy: 0.8182\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 58/100\n", + "127/127 [==============================] - 1s 6ms/step - loss: 0.4000 - accuracy: 0.8263 - val_loss: 0.4226 - val_accuracy: 0.8152\n", + "Epoch 59/100\n", + "127/127 [==============================] - 1s 6ms/step - loss: 0.4004 - accuracy: 0.8187 - val_loss: 0.4100 - val_accuracy: 0.8202\n", + "Epoch 60/100\n", + "127/127 [==============================] - 1s 6ms/step - loss: 0.4019 - accuracy: 0.8182 - val_loss: 0.4105 - val_accuracy: 0.8211\n", + "Epoch 61/100\n", + "127/127 [==============================] - 1s 6ms/step - loss: 0.3926 - accuracy: 0.8293 - val_loss: 0.4157 - val_accuracy: 0.8132\n", + "Epoch 62/100\n", + "127/127 [==============================] - 1s 6ms/step - loss: 0.3985 - accuracy: 0.8216 - val_loss: 0.4098 - val_accuracy: 0.8182\n", + "Epoch 63/100\n", + "127/127 [==============================] - 1s 6ms/step - loss: 0.3985 - accuracy: 0.8211 - val_loss: 0.4130 - val_accuracy: 0.8103\n", + "Epoch 64/100\n", + "127/127 [==============================] - 1s 6ms/step - loss: 0.3871 - accuracy: 0.8318 - val_loss: 0.4021 - val_accuracy: 0.8142\n", + "Epoch 65/100\n", + "127/127 [==============================] - 1s 6ms/step - loss: 0.3973 - accuracy: 0.8295 - val_loss: 0.4149 - val_accuracy: 0.8162\n", + "Epoch 66/100\n", + "127/127 [==============================] - 1s 6ms/step - loss: 0.3844 - accuracy: 0.8310 - val_loss: 0.4160 - val_accuracy: 0.8073\n", + "Epoch 67/100\n", + "127/127 [==============================] - 1s 6ms/step - loss: 0.3967 - accuracy: 0.8194 - val_loss: 0.4058 - val_accuracy: 0.8211\n", + "Epoch 68/100\n", + "127/127 [==============================] - 1s 6ms/step - loss: 0.3954 - accuracy: 0.8194 - val_loss: 0.4153 - val_accuracy: 0.8182\n", + "Epoch 69/100\n", + "127/127 [==============================] - 1s 6ms/step - loss: 0.3888 - accuracy: 0.8288 - val_loss: 0.4087 - val_accuracy: 0.8192\n", + "Epoch 70/100\n", + "127/127 [==============================] - 1s 6ms/step - loss: 0.3933 - accuracy: 0.8278 - val_loss: 0.4042 - val_accuracy: 0.8083\n", + "Epoch 71/100\n", + "127/127 [==============================] - 1s 6ms/step - loss: 0.3908 - accuracy: 0.8278 - val_loss: 0.4085 - val_accuracy: 0.8192\n", + "Epoch 72/100\n", + "127/127 [==============================] - 1s 6ms/step - loss: 0.3913 - accuracy: 0.8263 - val_loss: 0.4090 - val_accuracy: 0.8172\n", + "Epoch 73/100\n", + "127/127 [==============================] - 1s 6ms/step - loss: 0.3938 - accuracy: 0.8204 - val_loss: 0.4189 - val_accuracy: 0.8132\n", + "Epoch 74/100\n", + "127/127 [==============================] - 1s 6ms/step - loss: 0.3850 - accuracy: 0.8365 - val_loss: 0.4087 - val_accuracy: 0.8202\n", + "Epoch 75/100\n", + "127/127 [==============================] - 1s 6ms/step - loss: 0.3731 - accuracy: 0.8387 - val_loss: 0.4145 - val_accuracy: 0.8162\n", + "Epoch 76/100\n", + "127/127 [==============================] - 1s 6ms/step - loss: 0.3837 - accuracy: 0.8328 - val_loss: 0.4327 - val_accuracy: 0.8142\n", + "Epoch 77/100\n", + "127/127 [==============================] - 1s 6ms/step - loss: 0.3975 - accuracy: 0.8246 - val_loss: 0.4081 - val_accuracy: 0.8221\n", + "Epoch 78/100\n", + "127/127 [==============================] - 1s 6ms/step - loss: 0.3858 - accuracy: 0.8362 - val_loss: 0.4005 - val_accuracy: 0.8202\n", + "Epoch 79/100\n", + "127/127 [==============================] - 1s 6ms/step - loss: 0.3936 - accuracy: 0.8328 - val_loss: 0.4052 - val_accuracy: 0.8113\n", + "Epoch 80/100\n", + "127/127 [==============================] - 1s 6ms/step - loss: 0.3762 - accuracy: 0.8377 - val_loss: 0.4118 - val_accuracy: 0.8172\n", + "Epoch 81/100\n", + "127/127 [==============================] - 1s 6ms/step - loss: 0.3828 - accuracy: 0.8357 - val_loss: 0.4176 - val_accuracy: 0.8103\n", + "Epoch 82/100\n", + "127/127 [==============================] - 1s 6ms/step - loss: 0.3811 - accuracy: 0.8333 - val_loss: 0.4107 - val_accuracy: 0.8142\n", + "Epoch 83/100\n", + "127/127 [==============================] - 1s 6ms/step - loss: 0.3721 - accuracy: 0.8394 - val_loss: 0.4071 - val_accuracy: 0.8202\n", + "Epoch 84/100\n", + "127/127 [==============================] - 1s 6ms/step - loss: 0.3929 - accuracy: 0.8325 - val_loss: 0.4197 - val_accuracy: 0.8152\n", + "Epoch 85/100\n", + "127/127 [==============================] - 1s 5ms/step - loss: 0.3805 - accuracy: 0.8347 - val_loss: 0.4118 - val_accuracy: 0.8073\n", + "Epoch 86/100\n", + "127/127 [==============================] - 1s 5ms/step - loss: 0.3717 - accuracy: 0.8315 - val_loss: 0.4100 - val_accuracy: 0.8172\n", + "Epoch 87/100\n", + "127/127 [==============================] - 1s 5ms/step - loss: 0.3796 - accuracy: 0.8360 - val_loss: 0.3995 - val_accuracy: 0.8162\n", + "Epoch 88/100\n", + "127/127 [==============================] - 1s 5ms/step - loss: 0.3888 - accuracy: 0.8283 - val_loss: 0.4122 - val_accuracy: 0.8152\n", + "Epoch 89/100\n", + "127/127 [==============================] - 1s 5ms/step - loss: 0.3817 - accuracy: 0.8308 - val_loss: 0.4028 - val_accuracy: 0.8241\n", + "Epoch 90/100\n", + "127/127 [==============================] - 1s 5ms/step - loss: 0.3712 - accuracy: 0.8444 - val_loss: 0.4149 - val_accuracy: 0.8123\n", + "Epoch 91/100\n", + "127/127 [==============================] - 1s 5ms/step - loss: 0.3790 - accuracy: 0.8335 - val_loss: 0.4023 - val_accuracy: 0.8221\n", + "Epoch 92/100\n", + "127/127 [==============================] - 1s 5ms/step - loss: 0.3720 - accuracy: 0.8384 - val_loss: 0.4107 - val_accuracy: 0.8202\n", + "Epoch 93/100\n", + "127/127 [==============================] - 1s 5ms/step - loss: 0.3640 - accuracy: 0.8515 - val_loss: 0.4144 - val_accuracy: 0.8142\n", + "Epoch 94/100\n", + "127/127 [==============================] - 1s 5ms/step - loss: 0.3779 - accuracy: 0.8399 - val_loss: 0.4137 - val_accuracy: 0.8182\n", + "Epoch 95/100\n", + "127/127 [==============================] - 1s 5ms/step - loss: 0.3709 - accuracy: 0.8352 - val_loss: 0.4116 - val_accuracy: 0.8162\n", + "Epoch 96/100\n", + "127/127 [==============================] - 1s 5ms/step - loss: 0.3736 - accuracy: 0.8355 - val_loss: 0.4244 - val_accuracy: 0.8132\n", + "Epoch 97/100\n", + "127/127 [==============================] - 1s 5ms/step - loss: 0.3669 - accuracy: 0.8342 - val_loss: 0.4003 - val_accuracy: 0.8192\n", + "Epoch 98/100\n", + "127/127 [==============================] - 1s 5ms/step - loss: 0.3742 - accuracy: 0.8379 - val_loss: 0.4029 - val_accuracy: 0.8241\n", + "Epoch 99/100\n", + "127/127 [==============================] - 1s 6ms/step - loss: 0.3810 - accuracy: 0.8258 - val_loss: 0.4107 - val_accuracy: 0.8132\n", + "Epoch 100/100\n", + "127/127 [==============================] - 1s 5ms/step - loss: 0.3745 - accuracy: 0.8377 - val_loss: 0.4035 - val_accuracy: 0.8202\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": 114, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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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": 115, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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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": 116, + "metadata": {}, + "outputs": [], + "source": [ + "predictions_snn=model_Snn.predict(X_test_scaled)" + ] + }, + { + "cell_type": "code", + "execution_count": 142, + "metadata": {}, + "outputs": [], + "source": [ + "threshold_limit =0.5151\n", + "predictions_snn2=np.where(predictions_snn>threshold_limit,1,0)" + ] + }, + { + "cell_type": "code", + "execution_count": 143, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + " precision recall f1-score support\n", + "\n", + " 0 0.82 0.84 0.83 506\n", + " 1 0.83 0.81 0.82 506\n", + "\n", + " accuracy 0.83 1012\n", + " macro avg 0.83 0.83 0.83 1012\n", + "weighted avg 0.83 0.83 0.83 1012\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_snn2,y_test)" + ] + }, + { + "cell_type": "code", + "execution_count": 144, + "metadata": {}, + "outputs": [], + "source": [ + "##saving the model\n", + "\n", + "model_Snn.save(\"NN_model29bins.h5\")" + ] + }, + { + "cell_type": "code", + "execution_count": 145, + "metadata": {}, + "outputs": [], + "source": [ + "# ##loading the model\n", + "# model_Snn = keras.models.load_model(\"NN_78Percent.h5\")" + ] + }, + { + "cell_type": "code", + "execution_count": 146, + "metadata": {}, + "outputs": [], + "source": [ + "# predictions_Snn = model_Snn.predict(X_test_scaled)" + ] + }, + { + "cell_type": "code", + "execution_count": 147, + "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": 148, + "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>7510</th>\n", + " <td>0.855127</td>\n", + " <td>1</td>\n", + " </tr>\n", + " <tr>\n", + " <th>9065</th>\n", + " <td>0.989934</td>\n", + " <td>1</td>\n", + " </tr>\n", + " <tr>\n", + " <th>11550</th>\n", + " <td>0.366007</td>\n", + " <td>0</td>\n", + " </tr>\n", + " <tr>\n", + " <th>10015</th>\n", + " <td>0.418624</td>\n", + " <td>0</td>\n", + " </tr>\n", + " <tr>\n", + " <th>553</th>\n", + " <td>0.988035</td>\n", + " <td>1</td>\n", + " </tr>\n", + " <tr>\n", + " <th>...</th>\n", + " <td>...</td>\n", + " <td>...</td>\n", + " </tr>\n", + " <tr>\n", + " <th>7590</th>\n", + " <td>0.969639</td>\n", + " <td>1</td>\n", + " </tr>\n", + " <tr>\n", + " <th>10964</th>\n", + " <td>0.276017</td>\n", + " <td>0</td>\n", + " </tr>\n", + " <tr>\n", + " <th>11010</th>\n", + " <td>0.061391</td>\n", + " <td>0</td>\n", + " </tr>\n", + " <tr>\n", + " <th>9808</th>\n", + " <td>0.256367</td>\n", + " <td>0</td>\n", + " </tr>\n", + " <tr>\n", + " <th>5617</th>\n", + " <td>0.207383</td>\n", + " <td>1</td>\n", + " </tr>\n", + " </tbody>\n", + "</table>\n", + "<p>1012 rows × 2 columns</p>\n", + "</div>" + ], + "text/plain": [ + " predictions y_truth\n", + "7510 0.855127 1\n", + "9065 0.989934 1\n", + "11550 0.366007 0\n", + "10015 0.418624 0\n", + "553 0.988035 1\n", + "... ... ...\n", + "7590 0.969639 1\n", + "10964 0.276017 0\n", + "11010 0.061391 0\n", + "9808 0.256367 0\n", + "5617 0.207383 1\n", + "\n", + "[1012 rows x 2 columns]" + ] + }, + "execution_count": 148, + "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": 149, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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An8BdpU0X1LtmMkj2fiA9UHANEkvAw8BZ0ZE3oPem6vQ7Ly5j6bK6ptj0qRJ9OnTp9Rh1LnkkksYO3Zs3fR3v/tdPv3pT9OuXTvGjRu3Qdnhw4czffp0pk2b1sxRmhk0Y0siIkZlzD81z7zfAL9pyngKzc6bq6myelNZu3Yt7do1/ddhypQpvPfee+y333518/r37891113Hbbfdlvc1o0aNYvz48dxyyy1NHp+ZbajkxyQMampqOPbYY9l+++3ZaaeduPnmmzPLTp48mf33359u3bqxxx57MGnSpLplS5Ys4bTTTqNXr150796do48+mvfff5+hQ4dSU1ND586d6dy5MzU1NYwbN47jjjuOE088kW233ZY777yTmpoajjrqKHr06EH//v25/fbb6+oeN24cxx9/PCeffDJdunRh0KBBG9xx99prr6V379506dKFXXfdlaeffjpv/E888QQHH3zwBvNOOeUUhg4dSpcuXfK+ZsiQIfzud78r5K00syJzkiix9evXM3z4cPbYYw8WLFjA008/zU033cTEiRM3KrtgwQKOOOIILr30UpYsWcINN9zAsccey+LFiwE46aST+OCDD5g+fTqLFi3ivPPOY5tttuGJJ56gV69erFixghUrVtCrVy8AHnnkEY477jiWLl3KCSecwMiRI+nTpw81NTU89NBDfOc73+GZZ56pW/+ECRMYOXIkS5cu5aijjmLMmDEAvPrqq9xyyy1MmTKF5cuXM3HiRLLG9fjHP/7BrrvumndZloEDBzJ79myWLdvo5DYza2JOEiU2ZcoUFi9ezPe+9z06dOjAzjvvzBlnnMF99923Udl77rmHYcOGMWzYMNq0acNhhx3G4MGDefzxx1m4cCFPPPEEt912G927d6d9+/Yb/WKv73Of+xxHH300bdq04e233+ZPf/oT1157LR07dmTPPffk9NNP5+676y6Q54ADDmDYsGG0bduWk046ib//Pemua9u2LatWrWLGjBmsWbOG6upqdtlll7zrXLp0aWaLIUtt+aVLlzbqdWa25ZwkSmzOnDnU1NTQrVu3usfVV1/NW2+9lbfsgw8+uEHZ559/noULFzJv3jx69OhB9+7dC153VVVV3fOamhp69OixwQ68X79+dbe9APj4xz9e97xTp06sXLmStWvX0r9/f2666SbGjRtHz549GTlyJDU1NXnX2b17d5YvX15wjEBd+W7dujXqdWa25ZwkSqyqqoqddtqJpUuX1j2WL1/O448/nrfsSSedtEHZ999/n7Fjx1JVVcWSJUvy/trOuuAsd36vXr1YsmTJBjvwuXPn0rt374K242tf+xrPP/88c+bMQRIXXXRR3nK77747s2bNKqjOWjNnzqS6utr3ZzIrASeJEttnn33o0qUL1157LR9++CHr1q3jlVdeYcqUKRuVPfHEE3n00UeZOHEi69atY+XKlUyaNIn58+ez4447MnToUM466yzeffdd1qxZw3PPPQfADjvswDvvvMN77723UZ21qqqq2H///bn44otZuXIl06ZN4+c//zknnnhig9vw6quv8swzz7Bq1So6duzI1ltvTZs2+b9aw4YN49lnn91g3po1a1i5ciXr169n7dq1rFy5knXr1tUtf/bZZxk6dGiDcZhZ8ZXDxXQl0adv3yY9TbXPJm4Rkqtt27Y89thjnH/++ey0006sWrWKXXfdlSuvvHKjslVVVTzyyCNceOGFjBo1irZt27LPPvtw6623AvDLX/6S8847jwEDBrB69Wq+8IUvcNBBBzFgwABGjRrFzjvvzLp165gxY0beWO69917OPPPMurOjLr/8cg499NAGt2HVqlWMHTuWmTNn0r59e/bff3/Gjx+ft+xnPvMZunbtygsvvMC+++4LwBlnnMFdd91VV+aqq67iF7/4BaeeempdXK3pYkKzlkQRUeoYimbw4MGRe1pmrZkzZzJw4MASRGT5/P73v+cnP/lJwVdc//KXv+SBBx7ILOPP11ozSQVfcb25+3NJL0bE4HzLKrYlYaVz+OGHc/jhhxdUdvjw4QwfPryJIzKzLD4mYWZmmZwkzMwsk5OEmZllcpIwM7NMThJmZpbJScLMzDI5SZiZWSYniTL3xz/+sdG31i6Gn/70p5x77rkFlT3//PPrrvo2s9alYpNEdd++TTp8aXWBt+VoyIEHHsirr75alLoKtXr1aq688kq+/e1v1817+eWX2XvvvenUqRN77703L7/8ct2yCy64gKuvvprVq1c3a5xm1vQq9orrOfPmsfqJPzZZ/R2GHthkdTe1Rx55hAEDBtTdAXb16tWMGDGCc889l7POOouf/vSnjBgxgtdee40OHTqw4447MmDAACZMmMBxxx1X4ujNrJgqtiVRTqqrq7nmmmvYbbfd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\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": 150, + "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": 151, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "0.16205533596837945\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": 152, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "value : 0.8228228228228227, index 51\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": 153, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "0.5151515151515152" + ] + }, + "execution_count": 153, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "thresholds_arr[51]" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "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 new file mode 100644 index 0000000000000000000000000000000000000000..90e3f42a459ddab1613762d78ce5f284c3c0c78d Binary files /dev/null and b/NN_model29bins.h5 differ