File size: 66,571 Bytes
c5bc83d
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 1,
   "id": "7ee67871",
   "metadata": {},
   "outputs": [],
   "source": [
    "import os\n",
    "\n",
    "os.environ[\"CUDA_VISIBLE_DEVICES\"] = \"-1\""
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "id": "69a25ffc",
   "metadata": {},
   "outputs": [],
   "source": [
    "import pickle\n",
    "\n",
    "import matplotlib.pyplot as plt\n",
    "import numpy as np\n",
    "import pandas as pd\n",
    "import seaborn as sns\n",
    "from sklearn.metrics import classification_report\n",
    "from sklearn.metrics import confusion_matrix\n",
    "from sklearn.model_selection import train_test_split\n",
    "from sklearn.preprocessing import LabelEncoder\n",
    "from xgboost import XGBClassifier"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "id": "21e51031",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Vector type: <class 'numpy.ndarray'>\n",
      "Vector shape: (40,)\n",
      "First vector:\n",
      "[0.         0.         0.         0.         0.         0.\n",
      " 0.         0.         0.         0.         1.         0.\n",
      " 0.         0.         0.         0.         1.         0.2\n",
      " 0.         0.25       0.25       0.35643566 0.7128713  0.06930693\n",
      " 0.42574257 0.7821782  0.         0.         0.         0.\n",
      " 0.         0.         0.         0.         0.08       0.04\n",
      " 0.4        0.05       0.05       0.        ]\n",
      "First label:\n",
      "parallel_for\n"
     ]
    }
   ],
   "source": [
    "df = pd.read_csv(\"/home/mohamed-ashraf/Desktop/projects/accelera/data/data.csv\")\n",
    "\n",
    "feature_cols = df.iloc[:, :-1].columns\n",
    "X = df[feature_cols].values\n",
    "labels = df[\"label\"].values\n",
    "y = df[\"label\"].values\n",
    "\n",
    "print(f\"Vector type: {type(X[0])}\")\n",
    "print(f\"Vector shape: {X[0].shape}\")\n",
    "print(f\"First vector:\\n{X[0]}\")\n",
    "print(f\"First label:\\n{y[0]}\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "id": "ea5eef8f",
   "metadata": {},
   "outputs": [],
   "source": [
    "label_encoder = LabelEncoder()\n",
    "y = label_encoder.fit_transform(y)\n",
    "\n",
    "with open(\"label_encoder.pkl\", \"wb\") as f:\n",
    "    pickle.dump(label_encoder, f)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "id": "2a765d18",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "Text(0.5, 1.0, 'Class Distribution')"
      ]
     },
     "execution_count": 5,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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iNDq1auvKEDdeuutV3TTd6NGjRyWLRaLGjZsqO+++870Psri+++/l7+/f6n3o2nTpsb4herWrVtqHzVq1NDPP/989ZoEnAihCYCsVqv8/f21b9++Mu/jtddeU0xMjLp06aL//ve/2rx5sxITE9WsWTOHwNG0aVMdOnRIK1euVOfOnfXOO++oc+fOevnll42ahx9+WN9++63mz58vf39/zZgxQ82aNSt15eNKHT9+XLm5uWrYsOElaypXrqzk5GR9+OGHGjJkiPbs2aOBAwfqvvvuU1FRkanjXMl9SGZdagJOsz2Vh0qVKl10vf13N40DNypCEwBJ0v33368jR44oJSWlTNuvXbtW3bp105tvvqmIiAj16NFDoaGhysnJKVVbtWpVDRw4UEuXLtXRo0cVHh6uqVOn6uzZs0ZNnTp19NRTTyk+Pl4ZGRmqWbOmpk6dWtbTkyT95z//kSSFhYVdts7FxUXdu3fXG2+8oa+++kpTp05VUlKSPvroI0mXDjBl9c033zgs2+12HT582OGXbjVq1Ljoe/n7q0FX0ltgYKBOnjxZ6grjwYMHjXEA/x+hCYAkaezYsapatapGjBihzMzMUuNHjhzR3LlzL7l9pUqVSl1xWLNmjU6cOOGw7tSpUw7L7u7uCg4Olt1uV2FhoYqKihy+zpOk2rVry9/fXwUFBVd6WoakpCS98sorCgoK0uDBgy9Zl52dXWpdySSRJcevWrWqJF00xJTF22+/7RBc1q5dqx9++EG9evUy1jVo0ECff/65zp07Z6zbsGFDqakJrqS33r17q6ioSAsWLHBYP3v2bFksFofjA2DKAQD/p0GDBoqLi9PAgQPVtGlThxnBt2/frjVr1lz2WXP333+/pkyZouHDh6tjx47au3evVqxYofr16zvU9ejRQ35+furUqZN8fX114MABLViwQOHh4apevbpycnJ022236cEHH1SrVq1UrVo1ffjhh9q5c6dmzZpl6lw++OADHTx4UOfPn1dmZqaSkpKUmJiowMBArV+/Xp6enpfcdsqUKUpOTlZ4eLgCAwOVlZWlf/zjH7rtttvUuXNn473y9vbW4sWLVb16dVWtWlXt27dXUFCQqf5+z8fHR507d9bw4cOVmZmpOXPmqGHDhg7TIowYMUJr165Vz5499fDDD+vIkSP673//63Bj9pX21qdPH3Xr1k0vvfSS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O9WsWTN98sknV6tXAACACnNFoWnOnDkaOXLkRecx8PLy0uOPP6433nij3JoDAABwFlcUmr788kv17NnzkuM9evRweMYbAADAjeKKQlNmZuZFpxoo4erqqh9//PFPNwUAAOBsrig03Xrrrdq3b98lx/fs2aM6der86aYAAACczRWFpt69e2vChAk6e/ZsqbFff/1VL7/8su6///5yaw4AAMBZXNGUA+PHj9e7776r22+/XdHR0WrcuLEk6eDBg1q4cKGKior00ksvXZVGAQAAKtIVhSZfX19t375dTz75pGJjY2W32yVJFotFYWFhWrhwoXx9fa9KowAAABXpiie3DAwM1KZNm/Tzzz/r8OHDstvtatSokWrUqHE1+gMAAHAKZZoRXJJq1KihO++8szx7AQAAcFplevYcAADAzYbQBAAAYAKhCQAAwARCEwAAgAmEJgAAABMITQAAACYQmgAAAEwgNAEAAJhAaAIAADCB0AQAAGACoQkAAMAEQhMAAIAJhCYAAAATCE0AAAAmEJoAAABMIDQBAACYQGgCAAAwgdAEAABgAqEJAADABKcPTSdOnNBf//pX1axZU5UrV1aLFi2UmppqjNvtdk2cOFF16tRR5cqVFRoaqm+++cZhH9nZ2Ro8eLCsVqu8vb0VGRmpM2fOONTs2bNHd999tzw9PRUQEKDp06dfk/MDAADXB6cOTT///LM6deokNzc3ffDBB/rqq680a9Ys1ahRw6iZPn265s2bp8WLF2vHjh2qWrWqwsLCdPbsWaNm8ODB2r9/vxITE7VhwwYlJydr1KhRxnheXp569OihwMBApaWlacaMGZo0aZKWLFlyTc8XAAA4L9eKbuByXn/9dQUEBGjp0qXGuqCgIOOf7Xa75syZo/Hjx6tv376SpLffflu+vr6Kj49XRESEDhw4oISEBO3cuVPt2rWTJM2fP1+9e/fWzJkz5e/vrxUrVujcuXN666235O7urmbNmik9PV1vvPGGQ7gCAAA3L6e+0rR+/Xq1a9dODz30kGrXrq02bdroX//6lzGekZEhm82m0NBQY52Xl5fat2+vlJQUSVJKSoq8vb2NwCRJoaGhcnFx0Y4dO4yaLl26yN3d3agJCwvToUOH9PPPP1+0t4KCAuXl5Tm8AADAjcupQ9O3336rRYsWqVGjRtq8ebOefPJJPfPMM1q+fLkkyWaz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",
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "classes, count = np.unique(y, return_counts=True)\n",
    "ax = sns.barplot(x=classes, y=count)\n",
    "\n",
    "# Add count labels above each bar\n",
    "for i, (cls, cnt) in enumerate(zip(classes, count)):\n",
    "    ax.text(i, cnt, str(cnt), ha=\"center\", va=\"bottom\")\n",
    "\n",
    "ax.set_xlabel(\"Classes\")\n",
    "ax.set_ylabel(\"Count\")\n",
    "ax.set_title(\"Class Distribution\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "id": "632539ba",
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "/home/mohamed-ashraf/Desktop/projects/env/lib/python3.12/site-packages/xgboost/core.py:160: UserWarning: [20:23:47] WARNING: /workspace/src/learner.cc:742: \n",
      "Parameters: { \"scale_pos_weight\" } are not used.\n",
      "\n",
      "  warnings.warn(smsg, UserWarning)\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "              precision    recall  f1-score   support\n",
      "\n",
      "        none       0.82      0.85      0.84      3048\n",
      "parallel_for       0.86      0.81      0.83      2696\n",
      "   reduction       0.79      0.82      0.80       775\n",
      "\n",
      "    accuracy                           0.83      6519\n",
      "   macro avg       0.82      0.83      0.83      6519\n",
      "weighted avg       0.83      0.83      0.83      6519\n",
      "\n"
     ]
    },
    {
     "data": {
      "image/png": "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",
      "text/plain": [
       "<Figure size 800x500 with 2 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "X_train, X_test, y_train, y_test = train_test_split(\n",
    "    X, y, test_size=0.2, stratify=y, random_state=42\n",
    ")\n",
    "\n",
    "model = XGBClassifier(\n",
    "    n_estimators=300,\n",
    "    max_depth=9,\n",
    "    learning_rate=0.03,\n",
    "    scale_pos_weight=3.0,\n",
    "    random_state=42,\n",
    "    tree_method=\"hist\",\n",
    "    device=\"cpu\",\n",
    "    n_jobs=-1,\n",
    ")\n",
    "\n",
    "model.fit(X_train, y_train)\n",
    "\n",
    "y_pred = model.predict(X_test)\n",
    "print(\n",
    "    classification_report(y_test, y_pred, target_names=label_encoder.classes_)\n",
    ")\n",
    "\n",
    "cm = confusion_matrix(y_test, y_pred)\n",
    "plt.figure(figsize=(8, 5))\n",
    "sns.heatmap(\n",
    "    cm,\n",
    "    annot=True,\n",
    "    fmt=\"d\",\n",
    "    cmap=\"Blues\",\n",
    "    xticklabels=label_encoder.classes_,\n",
    "    yticklabels=label_encoder.classes_,\n",
    ")\n",
    "plt.xlabel(\"Predicted\")\n",
    "plt.ylabel(\"Actual\")\n",
    "plt.title(\"Confusion Matrix\")\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "id": "984d4198",
   "metadata": {},
   "outputs": [],
   "source": [
    "with open(\"model.pkl\", \"wb\") as f:\n",
    "    pickle.dump(model, f)"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "env",
   "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.12.3"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}