Small bug fixes
This commit is contained in:
1 parent
c0ffaa45c9
commit
5c1b77358f
2 files changed
+81
-60
No files matched your search
+3
-8
@@ -59,27 +59,22 @@
|
|||||||
"from sklearn.preprocessing import LabelEncoder\n",
|
"from sklearn.preprocessing import LabelEncoder\n",
|
||||||
"import seaborn as sns\n",
|
"import seaborn as sns\n",
|
||||||
"\n",
|
"\n",
|
||||||
"\n",
|
|
||||||
"df = pd.read_csv('./Datasets/adult.csv', comment = '#')\n",
|
"df = pd.read_csv('./Datasets/adult.csv', comment = '#')\n",
|
||||||
"\n",
|
"\n",
|
||||||
"\n",
|
|
||||||
"# First, create a copy of the dataframe to avoid modifying the original\n",
|
"# First, create a copy of the dataframe to avoid modifying the original\n",
|
||||||
"df_encoded = df.copy()\n",
|
"df_encoded = df.copy()\n",
|
||||||
"df_encoded.drop(['fnlwgt', 'education'], axis=1, inplace=True)\n",
|
"df_encoded.drop(['fnlwgt', 'education'], axis=1, inplace=True)\n",
|
||||||
"\n",
|
"\n",
|
||||||
"\n",
|
|
||||||
"# drop all rows that contain '?'\n",
|
"# drop all rows that contain '?'\n",
|
||||||
"for column in df_encoded.columns:\n",
|
"df_encoded = df_encoded[(df_encoded != '?').all(axis=1)]\n",
|
||||||
" df_encoded = df_encoded[df_encoded[column] != '?']\n",
|
|
||||||
"\n",
|
"\n",
|
||||||
"# Apply label encoding to categorical columns\n",
|
"# Apply label encoding to categorical columns\n",
|
||||||
"label_encoder = LabelEncoder()\n",
|
|
||||||
"categorical_columns = ['workclass', 'marital.status', 'occupation', \n",
|
"categorical_columns = ['workclass', 'marital.status', 'occupation', \n",
|
||||||
" 'relationship', 'race', 'sex', 'native.country', 'income']\n",
|
" 'relationship', 'race', 'sex', 'native.country', 'income']\n",
|
||||||
"\n",
|
"\n",
|
||||||
"for column in categorical_columns:\n",
|
"for column in categorical_columns:\n",
|
||||||
" df_encoded[column] = label_encoder.fit_transform(df_encoded[column])\n",
|
" le = LabelEncoder()\n",
|
||||||
"\n",
|
" df_encoded[column] = le.fit_transform(df_encoded[column])\n",
|
||||||
"\n",
|
"\n",
|
||||||
"matrix = df_encoded.corr()\n",
|
"matrix = df_encoded.corr()\n",
|
||||||
"\n",
|
"\n",
|
||||||
|
|||||||
+78
-52
@@ -11,18 +11,48 @@
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
"cell_type": "code",
|
"cell_type": "code",
|
||||||
"execution_count": null,
|
"execution_count": 1,
|
||||||
"id": "0952f099",
|
"id": "0952f099",
|
||||||
"metadata": {},
|
"metadata": {},
|
||||||
"outputs": [
|
"outputs": [
|
||||||
{
|
{
|
||||||
"ename": "",
|
"data": {
|
||||||
"evalue": "",
|
"image/png": "iVBORw0KGgoAAAANSUhEUgAAA7sAAAOwCAYAAAD/XWM1AAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjcsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvTLEjVAAAAAlwSFlzAAAPYQAAD2EBqD+naQABAABJREFUeJzs3XmcjfX/xvHXmX03ZsXYxr7vRGQnKSmFJEUkWSOUJKENRcoWSZGdRGRnxr7v+76MbWYYZl/O8vtDpq9fKsvM3LNcz8ejx5cz97nPdeZr5pzr3PfnfZtsNpsNERERERERkWzEzugAIiIiIiIiImlNZVdERERERESyHZVdERERERERyXZUdkVERERERCTbUdkVERERERGRbEdlV0RERERERLIdlV0RERERERHJdlR2RUREREREJNtR2RUREREREZFsR2VXREREREREsh2VXREREREREcl2VHZFREREREQk21HZFRERERERkWxHZVdERERERESyHZVdERERERERyXZUdkVERERERCTbUdkVERERERGRbEdlV0RERERERLIdlV0RERERERHJdlR2RUREREREJNtR2RUREREREZFsR2VXREREREREsh2VXREREREREcl2VHZFREREREQk21HZFRERERERkWxHZVdERERERESyHZVdERERERERyXZUdkVERERERCTbUdkVERERERGRbEdlV0RERERERLIdlV0RERERERHJdlR2RUREREREJNtR2RUREREREZFsR2VXREREREREsh2VXREREREREcl2VHZFREREREQk21HZFRERERERkWxHZVdERERERESyHZVdERERERERyXZUdkVERERERCTbUdkVERERERGRbEdlV0RERERERLIdlV0RERERERHJdlR2RUREREREJNtR2RUREREREZFsR2VXREREREREsh2VXREREREREcl2VHZFREREREQk21HZFRERERERkWxHZVdERERERESyHZVdERERERERyXZUdkVERERERCTbUdkVERERERGRbEdlV0RERERERLIdlV0RERERERHJdlR2RUREREREJNtR2RUREREREZFsR2VXREREREREsh2VXREREREREcl2VHZFREREREQk21HZFRERERERkWzHwegAIiIiknESExO5fPkyVqvV6CgPzWQykS9fPtzc3IyOIiIiWYDK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 truncated
|
||||||
"output_type": "error",
|
"text/plain": [
|
||||||
"traceback": [
|
"<Figure size 1200x1200 with 1 Axes>"
|
||||||
"\u001b[1;31mRunning cells with '.venv (Python 3.13.7)' requires the ipykernel package.\n",
|
]
|
||||||
"\u001b[1;31mInstall 'ipykernel' into the Python environment. \n",
|
},
|
||||||
"\u001b[1;31mCommand: '/home/jaknyst/Documents/MLPproject/.venv/bin/python -m pip install ipykernel -U --force-reinstall'"
|
"metadata": {},
|
||||||
|
"output_type": "display_data"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"data": {
|
||||||
|
"image/png": "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 truncated
|
||||||
|
"text/plain": [
|
||||||
|
"<Figure size 640x480 with 2 Axes>"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"metadata": {},
|
||||||
|
"output_type": "display_data"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "stdout",
|
||||||
|
"output_type": "stream",
|
||||||
|
"text": [
|
||||||
|
"Classification Report:\n",
|
||||||
|
" precision recall f1-score support\n",
|
||||||
|
"\n",
|
||||||
|
" Poor 0.87 0.87 0.87 4524\n",
|
||||||
|
" Rich 0.62 0.62 0.62 1509\n",
|
||||||
|
"\n",
|
||||||
|
" accuracy 0.81 6033\n",
|
||||||
|
" macro avg 0.74 0.75 0.74 6033\n",
|
||||||
|
"weighted avg 0.81 0.81 0.81 6033\n",
|
||||||
|
"\n",
|
||||||
|
"Index(['age', 'workclass', 'education.num', 'marital.status', 'occupation',\n",
|
||||||
|
" 'relationship', 'race', 'sex', 'capital.gain', 'capital.loss',\n",
|
||||||
|
" 'hours.per.week', 'native.country'],\n",
|
||||||
|
" dtype='object')\n"
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
@@ -46,16 +76,15 @@
|
|||||||
"df_encoded.drop(['fnlwgt', 'education'], axis=1, inplace=True)\n",
|
"df_encoded.drop(['fnlwgt', 'education'], axis=1, inplace=True)\n",
|
||||||
"\n",
|
"\n",
|
||||||
"# drop all rows that contain '?'\n",
|
"# drop all rows that contain '?'\n",
|
||||||
"for column in df_encoded.columns:\n",
|
"df_encoded = df_encoded[(df_encoded != '?').all(axis=1)]\n",
|
||||||
" df_encoded = df_encoded[df_encoded[column] != '?']\n",
|
|
||||||
"\n",
|
"\n",
|
||||||
"# Apply label encoding to categorical columns\n",
|
"# Apply label encoding to categorical columns\n",
|
||||||
"label_encoder = LabelEncoder()\n",
|
|
||||||
"categorical_columns = ['workclass', 'marital.status', 'occupation', \n",
|
"categorical_columns = ['workclass', 'marital.status', 'occupation', \n",
|
||||||
" 'relationship', 'race', 'sex', 'native.country', 'income']\n",
|
" 'relationship', 'race', 'sex', 'native.country', 'income']\n",
|
||||||
"\n",
|
"\n",
|
||||||
"for column in categorical_columns:\n",
|
"for column in categorical_columns:\n",
|
||||||
" df_encoded[column] = label_encoder.fit_transform(df_encoded[column])\n",
|
" le = LabelEncoder()\n",
|
||||||
|
" df_encoded[column] = le.fit_transform(df_encoded[column])\n",
|
||||||
"\n",
|
"\n",
|
||||||
"# Now properly separate features and target\n",
|
"# Now properly separate features and target\n",
|
||||||
"X = df_encoded.drop(columns=['income'])\n",
|
"X = df_encoded.drop(columns=['income'])\n",
|
||||||
@@ -176,13 +205,14 @@
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
"cell_type": "code",
|
"cell_type": "code",
|
||||||
"execution_count": 4,
|
"execution_count": 11,
|
||||||
"id": "e68b1ea9",
|
"id": "e68b1ea9",
|
||||||
"metadata": {},
|
"metadata": {},
|
||||||
"outputs": [],
|
"outputs": [],
|
||||||
"source": [
|
"source": [
|
||||||
"from sklearn.model_selection import GridSearchCV, StratifiedKFold\n",
|
"from sklearn.model_selection import GridSearchCV, StratifiedKFold\n",
|
||||||
"import time\n",
|
"import time\n",
|
||||||
|
"\n",
|
||||||
"from sklearn.preprocessing import StandardScaler\n",
|
"from sklearn.preprocessing import StandardScaler\n",
|
||||||
"from sklearn.metrics import (accuracy_score, precision_score, \n",
|
"from sklearn.metrics import (accuracy_score, precision_score, \n",
|
||||||
" recall_score, f1_score, \n",
|
" recall_score, f1_score, \n",
|
||||||
@@ -248,7 +278,7 @@
|
|||||||
" for name, (model, param_grid) in models_with_params.items():\n",
|
" for name, (model, param_grid) in models_with_params.items():\n",
|
||||||
" print(f\"Tuning {name} ...\")\n",
|
" print(f\"Tuning {name} ...\")\n",
|
||||||
" \n",
|
" \n",
|
||||||
" grid_search = GridSearchCV(model, param_grid, scoring='accuracy', cv=cv, n_jobs=-2)\n",
|
" grid_search = GridSearchCV(model, param_grid, scoring='accuracy', cv=cv, n_jobs=-1)\n",
|
||||||
" \n",
|
" \n",
|
||||||
" start_train = time.time()\n",
|
" start_train = time.time()\n",
|
||||||
" grid_search.fit(self.X_train, self.y_train)\n",
|
" grid_search.fit(self.X_train, self.y_train)\n",
|
||||||
@@ -327,7 +357,7 @@
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
"cell_type": "code",
|
"cell_type": "code",
|
||||||
"execution_count": 5,
|
"execution_count": 8,
|
||||||
"id": "d6fd1fee",
|
"id": "d6fd1fee",
|
||||||
"metadata": {},
|
"metadata": {},
|
||||||
"outputs": [
|
"outputs": [
|
||||||
@@ -335,27 +365,21 @@
|
|||||||
"name": "stdout",
|
"name": "stdout",
|
||||||
"output_type": "stream",
|
"output_type": "stream",
|
||||||
"text": [
|
"text": [
|
||||||
"Tuning Decision Tree ...\n"
|
"Tuning Decision Tree ...\n",
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "stdout",
|
|
||||||
"output_type": "stream",
|
|
||||||
"text": [
|
|
||||||
"Tuning Random Forest ...\n",
|
"Tuning Random Forest ...\n",
|
||||||
"Tuning XGBoost ...\n",
|
"Tuning XGBoost ...\n",
|
||||||
"\n",
|
"\n",
|
||||||
"------ Results Sorted by Accuracy ------\n",
|
"------ Results Sorted by Accuracy ------\n",
|
||||||
" Model Accuracy Precision Recall F1 Score Best Params Training Time (s) Prediction Time (s) Total Time (s)\n",
|
" Model Accuracy Precision Recall F1 Score Best Params Training Time (s) Prediction Time (s) Total Time (s)\n",
|
||||||
" XGBoost 0.868059 0.863590 0.868059 0.863957 {'learning_rate': 0.2, 'max_depth': 5, 'n_estimators': 100} 25.874328 0.005939 25.880267\n",
|
" XGBoost 0.868059 0.863590 0.868059 0.863957 {'learning_rate': 0.2, 'max_depth': 5, 'n_estimators': 100} 30.477441 0.007370 30.484811\n",
|
||||||
"Random Forest 0.858942 0.853479 0.858942 0.853443 {'max_depth': 20, 'min_samples_split': 10, 'n_estimators': 100} 125.898729 0.065410 125.964139\n",
|
"Random Forest 0.858942 0.853479 0.858942 0.853443 {'max_depth': 20, 'min_samples_split': 10, 'n_estimators': 100} 109.089292 0.072799 109.162091\n",
|
||||||
"Decision Tree 0.848334 0.844900 0.848334 0.846228 {'max_depth': 10, 'min_samples_split': 5} 9.028944 0.001837 9.030781\n",
|
"Decision Tree 0.848334 0.844900 0.848334 0.846228 {'max_depth': 10, 'min_samples_split': 5} 10.185913 0.002266 10.188179\n",
|
||||||
"\n",
|
"\n",
|
||||||
"------ Results Sorted by Total Time ------\n",
|
"------ Results Sorted by Total Time ------\n",
|
||||||
" Model Accuracy Precision Recall F1 Score Best Params Training Time (s) Prediction Time (s) Total Time (s)\n",
|
" Model Accuracy Precision Recall F1 Score Best Params Training Time (s) Prediction Time (s) Total Time (s)\n",
|
||||||
"Decision Tree 0.848334 0.844900 0.848334 0.846228 {'max_depth': 10, 'min_samples_split': 5} 9.028944 0.001837 9.030781\n",
|
"Decision Tree 0.848334 0.844900 0.848334 0.846228 {'max_depth': 10, 'min_samples_split': 5} 10.185913 0.002266 10.188179\n",
|
||||||
" XGBoost 0.868059 0.863590 0.868059 0.863957 {'learning_rate': 0.2, 'max_depth': 5, 'n_estimators': 100} 25.874328 0.005939 25.880267\n",
|
" XGBoost 0.868059 0.863590 0.868059 0.863957 {'learning_rate': 0.2, 'max_depth': 5, 'n_estimators': 100} 30.477441 0.007370 30.484811\n",
|
||||||
"Random Forest 0.858942 0.853479 0.858942 0.853443 {'max_depth': 20, 'min_samples_split': 10, 'n_estimators': 100} 125.898729 0.065410 125.964139\n"
|
"Random Forest 0.858942 0.853479 0.858942 0.853443 {'max_depth': 20, 'min_samples_split': 10, 'n_estimators': 100} 109.089292 0.072799 109.162091\n"
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
@@ -377,7 +401,7 @@
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
"cell_type": "code",
|
"cell_type": "code",
|
||||||
"execution_count": 6,
|
"execution_count": 9,
|
||||||
"id": "4185a428",
|
"id": "4185a428",
|
||||||
"metadata": {},
|
"metadata": {},
|
||||||
"outputs": [
|
"outputs": [
|
||||||
@@ -391,20 +415,20 @@
|
|||||||
"\n",
|
"\n",
|
||||||
"------ Results Sorted by Accuracy ------\n",
|
"------ Results Sorted by Accuracy ------\n",
|
||||||
" Model Accuracy Precision Recall F1 Score Best Params Training Time (s) Prediction Time (s) Total Time (s)\n",
|
" Model Accuracy Precision Recall F1 Score Best Params Training Time (s) Prediction Time (s) Total Time (s)\n",
|
||||||
" XGBoost 0.868556 0.864049 0.868556 0.864181 {'learning_rate': 0.2, 'max_depth': 5, 'n_estimators': 75} 11.834481 0.006366 11.840847\n",
|
" XGBoost 0.867064 0.862867 0.867064 0.863685 {'learning_rate': 0.25, 'max_depth': 6, 'n_estimators': 75} 26.702878 0.014437 26.717316\n",
|
||||||
"Random Forest 0.858942 0.853479 0.858942 0.853443 {'max_depth': 20, 'min_samples_split': 10, 'n_estimators': 100} 129.781899 0.075195 129.857094\n",
|
"Random Forest 0.858942 0.853479 0.858942 0.853443 {'max_depth': 20, 'min_samples_split': 10, 'n_estimators': 100} 158.303091 0.076534 158.379625\n",
|
||||||
"Decision Tree 0.849163 0.843062 0.849163 0.839388 {'max_depth': 8, 'min_samples_split': 6} 1.778030 0.002314 1.780344\n",
|
"Decision Tree 0.844356 0.838363 0.844356 0.839763 {'max_depth': 12, 'min_samples_split': 6} 2.376242 0.002706 2.378948\n",
|
||||||
"\n",
|
"\n",
|
||||||
"------ Results Sorted by Total Time ------\n",
|
"------ Results Sorted by Total Time ------\n",
|
||||||
" Model Accuracy Precision Recall F1 Score Best Params Training Time (s) Prediction Time (s) Total Time (s)\n",
|
" Model Accuracy Precision Recall F1 Score Best Params Training Time (s) Prediction Time (s) Total Time (s)\n",
|
||||||
"Decision Tree 0.849163 0.843062 0.849163 0.839388 {'max_depth': 8, 'min_samples_split': 6} 1.778030 0.002314 1.780344\n",
|
"Decision Tree 0.844356 0.838363 0.844356 0.839763 {'max_depth': 12, 'min_samples_split': 6} 2.376242 0.002706 2.378948\n",
|
||||||
" XGBoost 0.868556 0.864049 0.868556 0.864181 {'learning_rate': 0.2, 'max_depth': 5, 'n_estimators': 75} 11.834481 0.006366 11.840847\n",
|
" XGBoost 0.867064 0.862867 0.867064 0.863685 {'learning_rate': 0.25, 'max_depth': 6, 'n_estimators': 75} 26.702878 0.014437 26.717316\n",
|
||||||
"Random Forest 0.858942 0.853479 0.858942 0.853443 {'max_depth': 20, 'min_samples_split': 10, 'n_estimators': 100} 129.781899 0.075195 129.857094\n"
|
"Random Forest 0.858942 0.853479 0.858942 0.853443 {'max_depth': 20, 'min_samples_split': 10, 'n_estimators': 100} 158.303091 0.076534 158.379625\n"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"data": {
|
"data": {
|
||||||
"image/png": "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 truncated
|
"image/png": "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 truncated
|
||||||
"text/plain": [
|
"text/plain": [
|
||||||
"<Figure size 640x480 with 1 Axes>"
|
"<Figure size 640x480 with 1 Axes>"
|
||||||
]
|
]
|
||||||
@@ -424,7 +448,7 @@
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
"data": {
|
"data": {
|
||||||
"image/png": "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 truncated
|
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAkAAAAIhCAYAAACmMgXJAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjcsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvTLEjVAAAAAlwSFlzAAAPYQAAD2EBqD+naQAA4e9JREFUeJzsnXlcVFX/xz93BllUQEAFRGTTQBHFPfdcci3X3KrH5Snt0dSUyl9quaRFWZaVlpUtZk/lk5ktGlmWWmKulQjKgyCCIriAsinI3O/vD565MjDIHJxhDvJ9v168lO+cufd97jnc+c6559yrEBGBYRiGYRimDqGztwDDMAzDMExNwwkQwzAMwzB1Dk6AGIZhGIapc3ACxDAMwzBMnYMTIIZhGIZh6hycADEMwzAMU+fgBIhhGIZhmDoHJ0AMwzAMw9Q5OAFiGIZhGKbOwQkQw9QxPv74YyiKgtTUVHurMP8jKSkJgwYNgru7OxRFwbZt2+ytxDB3PJwAMXc8xg98cz/PPPOMTfYZGxuLZcuW4cqVKzbZfl2msLAQy5Ytw+7du+2tYjWmTJmCuLg4vPDCC9i0aRM6d+5ss31t2LABiqJg48aNFV7bv38/dDodnnrqqQqvfffdd7j//vvh7e0NR0dHeHp6ok+fPli9ejVyc3NNygYGBpr8nTk7O6NVq1Z4+umnkZ2dbbO6WcqOHTuwbNkye2swdkbhZ4Exdzoff/wxpk2bhueffx5BQUEmr7Vt2xaRkZFW3+err76Kp59+GqdPn0ZgYKDVt387GAwG3LhxA05OTlAUxd46wly6dAlNmjTB0qVL74gPsWvXrqF+/fpYvHgxVq5cafP9ERH69OmDkydP4uTJk/Dy8gIA3LhxAx07dkRubi4SEhLQoEEDAICqqnjkkUfw8ccfIyIiAmPHjoW/vz/y8vKwf/9+fPPNN+jRowd27dql7SMwMBAeHh548sknAQDXr1/HkSNHsGHDBnTo0AEHDx60eT1vxezZs7Fu3Trwx1/dxsHeAgxTUwwdOtSm36xrgoKCAu2Dqbro9Xro9XorGdUcqqqiuLjY3hpW5+LFiwCARo0aWW2bt+oniqLg3XffRWRkJJ566il89NFHAIDVq1fj+PHj+Pbbb03eu2rVKnz88ceYP38+Vq9ebZI0P/HEEzh//jw++eSTCvvx8/PDww8/rP3+6KOPomHDhnj11VeRlJSEVq1aWau6DFM9iGHucD766CMCQIcOHbpluR07dlCvXr2ofv361LBhQxo2bBgdP37cpMzff/9NU6ZMoaCgIHJyciJvb2+aNm0aXbp0SSuzdOlSAlDh5/Tp03T69GkCQB999FGF/QOgpUuXVthOfHw8TZo0iRo1akSRkZHa65s2baKOHTuSs7MzeXh40IQJEygtLc3i43H69GktFhAQQMOHD6dff/2VOnXqRM7OztS2bVv69ddfiYjoq6++orZt25KTkxN17NiRjh49arLNKVOmUIMGDSg5OZkGDRpE9evXJ19fX1q+fDmpqmpSNj8/n6Kioqh58+bk6OhId911F73yyisVygGgxx9/nD799FNq06YNOTg40Ouvv2722BqPmyXtU/bYJiUl0ZQpU8jd3Z3c3Nxo6tSpVFBQUOGYbdq0ibp06UIuLi7UqFEj6t27N/34448mZSzpP+Ux11cCAgK0148ePUpDhgwhV1dXatCgAfXv35/2799vsg1je+7evZtmzpxJTZo0oUaNGt1yv0REixYt0t6XkpJCLi4uNGbMGJMyBQUF1KhRIwoPD6eSkpIqt2nE2J/K8+qrrxIASklJMYnv2rVLO3bu7u40YsQISkhIqPB+S45HcXExLVu2jFq2bElOTk7k6elJPXv2pJ07dxJRaV8114eYugePADF1hqtXr+LSpUsmscaNGwMANm3ahClTpmDw4MF4+eWXUVhYiHfeeQe9evXCn3/+qV3G+umnn5CSkoJp06bBx8cH8fHxeO+99xAfH48//vgDiqJgzJgx+O9//4vPP/8cr7/+uraPJk2aaN/2RRg3bhxatWqFF198URuyf+GFF/Dcc89h/PjxePTRR3Hx4kW89dZb6NOnD/78889qjSacOnUKDz74IB577DE8/PDDePXVV3H//fdj/fr1WLRoEWbNmgUAiI6Oxvjx45GYmAid7uY0QoPBgCFDhuDuu+/GqlWrEBMTg6VLl6KkpATPP/88gNLLLyNGjMCvv/6KRx55BJGRkfjxxx/x9NNP49y5c3j99ddNnH755Rf85z//wezZs9G4cWO0b98e77zzDmbOnInRo0djzJgxAIB27doBsKx9yjJ+/HgEBQUhOjoaR48exYYNG9C0aVO8/PLLWpnly5dj2bJl6NGjB55//nk4OjriwIED+OWXXzBo0CAAlvef8owZMwaNGjXC/PnzMWnSJAwbNgwNGzYEAMTHx6N3795wc3PDggULUK9ePbz77ru45557sGfPHnTr1s1kW7NmzUKTJk2wZMkSFBQUVNnezz77LL744gs89thjCAgIgIODA958802TMr///juuXLmCp556SnjU8MaNG9rf2/Xr1/Hnn3/itddeQ58+fUwuRf/8888YOnQogoODsWzZMly7dg1vvfUWevbsiaNHj2rHztLjsWzZMkRHR+PRRx9F165dkZubi8OHD+Po0aO499578dhjjyEjIwM//fQTNm3aJFQn5g7D3hkYw9ga4zdkcz9ERHl5edSoUSOaPn26yfsyMzPJ3d3dJF5YWFhh+59//jkBoL1792qxV155pcIoCxFVawRo0qRJJuVSU1NJr9fTCy+8YBKPi4sjBweHCvHKjkf5ESAAFBsbq8V+/PFHAkAuLi505swZLf7uu+8SAG10iOjmt+o5c+ZoMVVVafjw4eTo6EgXL14kIqJt27YRAFq5cqWJ0wMPPECKotCpU6dMjodOp6P4+HiTshcvXqxwrIxY2j7GY/vPf/7TpOzo0aPJy8tL+z0pKYl0Oh2NHj2aDAaDSVnjiJVI/zGHsU+88sorJvFRo0aRo6MjJScna7GMjAxydXWlPn36aDFje/bq1UtolIboZhsDoDVr1lR4/Y033iAAtG3bNpN4SUkJXbx40eSn7AiesT+V/+nZs2eF0bjIyEhq2rQpXb58WYv9/fffpNPpaPLkycLHo3379mZHn8ry+OOP86gPQ7wKjKkzrFu3Dj/99JPJD1A6anDlyhVMmjQJly5d0n70ej26deuGX3/9VduGi4uL9v/r16/j0qVLuPvuuwEAR48etYn3v/71L5Pft27dClVVMX78eBNfHx8ftGrVysRXhDZt2qB79+7a78Zv1P3790eLFi0qxFNSUipsY/bs2dr/FUXB7NmzUVxcjJ9//hlA6eobvV6PuXPnmrzvySefBBHhhx9+MIn37dsXbdq0sbgOou1T/tj27t0bly9f1lY1bdu2DaqqYsmSJSajXcb6AWL9x1IMBgN27tyJUaNGITg4WIv7+vriwQcfxO+//15h5dX06dOFR2k8PT21ehlHs8pi3IdxVMpIXFwcmjRpYvJz+fJlkzLdunXT/s6+//57vPDCC4iPj8eIESNw7do1AMD58+fx119/YerUqfD09NTe265dO9x7773YsWOH8PFo1KgR4uPjkZSUJHQsmLoHXwJj6gxdu3Y1OwnaeKLs37+/2fe5ublp/8/Ozsby5cvxxRdf4MKFCyblrl69akXbm5RfuZaUlAQiqnQSab169aq1n7JJDgC4u7sDAPz9/c3Gc3JyTOI6nc7kwwkA7rrrLgDQ7jl05swZNGvWDK6uriblWrdurb1elvJ1rwrR9ilfZw8PDwCldXNzc0NycjJ0Ot0tkzCR/mMpFy9eRGFhIUJDQyu81rp1a6iqivT0dISHh2tx0WNlMBgwY8YMNGvWDPn5+Zg7d672pcCIsZ3y8/NN4i1bttTKfvLJJ2YvJTVu3BgDBw7Ufh8+fDhCQ0PxwAMPYMOGDZgzZ47W3pXV88cff0RBQQHy8vIsPh7PP/88Ro4cibvuugtt27bFkCFD8I9//EO7TMowRjgBYuo8qqoCKJ3H4ePjU+F1B4ebfybjx49HbGwsnn76aURGRqJhw4ZQVRVDhgzRtnMrKlt2bjAYKn1P2VENo6+iKPjhhx/MfuMv/23dUiobPagsTjWwhLh83atCtH2sUTeR/mNLRI/VG2+8gT///BPbtm3DuXPn8Pjjj+Ozzz7Dgw8+qJUJCwsDABw/fhwjR47U4g0bNtSSm99//93ifQ4YMAAAsHfvXsyZM0fI11L69OmD5ORkfPPNN9i5cyc2bNiA119/HevXr8ejjz5qk30ytRNOgJg6T0hICACgadOmJt9Yy5OTk4Ndu3Zh+fLlWLJkiRY3N9ReWaJjHGEof4PE8iMfVfkSEYKCgrQRFhlQVRUpKSkmTv/9738BQJvIGhAQgJ9//hl5eXkmo0AnT57UXq+Kyo6tSPtYSkhICFRVRUJCQqX3i7K0/4jQpEkT1K9fH4mJiRVeO3nyJHQ6XYWRORHS09OxdOlSjBw5EiNHjoSqqti4cSOioqIwfPhwbZSvd+/ecHd3xxdffIGFCxdWuAwoSklJCYCbI0rG9q6sno0bN0aDBg3g7OwsdDw8PT0xbdo0TJs2Dfn5+ejTpw+WLVumJUC18f5XjPXhOUBMnWfw4MFwc3PDiy++iBs3blR43bhyyzhaUH50YM2aNRXeY7yPSvlEx83NDY0bN8bevXtN4m+//bbFvmPGjIFer8fy5csruBBRhbkYNcnatWtNXNauXYt69epp3/yHDRsGg8FgUg4AXn/9dSiKgqFDh1a5j/r16wOoeGxF2sdSRo0aBZ1Oh+eff77CCJJxP5b2HxH0ej0GDRqEb775xuSRJVlZWfjss8/Qq1eval1aMzJnzhwQEd566y0ApZcv169fj0uXLmHRokVaufr162PBggU4fvw4nnnmGbMjYyKjZd999x0AoH379gBLine truncated
|
||||||
"text/plain": [
|
"text/plain": [
|
||||||
"<Figure size 640x480 with 1 Axes>"
|
"<Figure size 640x480 with 1 Axes>"
|
||||||
]
|
]
|
||||||
@@ -441,12 +465,12 @@
|
|||||||
" 'max_depth': [8, 10, 12],\n",
|
" 'max_depth': [8, 10, 12],\n",
|
||||||
" 'min_samples_split': [4, 5, 6],\n",
|
" 'min_samples_split': [4, 5, 6],\n",
|
||||||
" }),\n",
|
" }),\n",
|
||||||
" 'Random Forest': (RandomForestClassifier(bootstrap=use_bootstrap, random_state=42), {\n",
|
" 'Random Forest': (RandomForestClassifier(bootstrap=use_bootstrap, random_state=42, n_jobs=-1), {\n",
|
||||||
" 'n_estimators': [75, 100, 150], \n",
|
" 'n_estimators': [75, 100, 150], \n",
|
||||||
" 'max_depth': [15, 20, 25],\n",
|
" 'max_depth': [15, 20, 25],\n",
|
||||||
" 'min_samples_split': [8, 10, 12],\n",
|
" 'min_samples_split': [8, 10, 12],\n",
|
||||||
" }),\n",
|
" }),\n",
|
||||||
" 'XGBoost': (XGBClassifier(eval_metric='mlogloss', random_state=42), {\n",
|
" 'XGBoost': (XGBClassifier(eval_metric='mlogloss', random_state=42, n_jobs=-1), {\n",
|
||||||
" 'n_estimators': [75, 100, 150],\n",
|
" 'n_estimators': [75, 100, 150],\n",
|
||||||
" 'learning_rate': [0.15, 0.2, 0.25],\n",
|
" 'learning_rate': [0.15, 0.2, 0.25],\n",
|
||||||
" 'max_depth': [4, 5, 6]\n",
|
" 'max_depth': [4, 5, 6]\n",
|
||||||
@@ -468,13 +492,13 @@
|
|||||||
"id": "01f5866d",
|
"id": "01f5866d",
|
||||||
"metadata": {},
|
"metadata": {},
|
||||||
"source": [
|
"source": [
|
||||||
"### Remove redundant features\n",
|
"### Remove redundant features (optional)\n",
|
||||||
"This section is pretty bad :(. If we want to remove redunant features we need to select different features for different models, which I have not implemented."
|
"If we want to remove redundant features, we will have to select different features for different models as the importance scores varied slightly between models. However, we have kept this section optional since we may want to use the same feature sets for all models in order to produce a fair comparison. Nevertheless, for optimal performance of each model, this step is advantageous."
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"cell_type": "code",
|
"cell_type": "code",
|
||||||
"execution_count": 17,
|
"execution_count": 10,
|
||||||
"id": "776cdb17",
|
"id": "776cdb17",
|
||||||
"metadata": {},
|
"metadata": {},
|
||||||
"outputs": [
|
"outputs": [
|
||||||
@@ -488,9 +512,9 @@
|
|||||||
"\n",
|
"\n",
|
||||||
"------ Results Sorted by Accuracy ------\n",
|
"------ Results Sorted by Accuracy ------\n",
|
||||||
" Model Accuracy Precision Recall F1 Score Best Params Training Time (s) Prediction Time (s) Total Time (s)\n",
|
" Model Accuracy Precision Recall F1 Score Best Params Training Time (s) Prediction Time (s) Total Time (s)\n",
|
||||||
" XGBoost 0.867893 0.863335 0.867893 0.863496 {'learning_rate': 0.15, 'max_depth': 5, 'n_estimators': 100} 20.872965 0.009083 20.882048\n",
|
" XGBoost 0.866899 0.862456 0.866899 0.863047 {'learning_rate': 0.2, 'max_depth': 6, 'n_estimators': 75} 25.690541 0.011451 25.701992\n",
|
||||||
"Random Forest 0.858942 0.853479 0.858942 0.853443 {'max_depth': 20, 'min_samples_split': 10, 'n_estimators': 100} 140.562873 0.179120 140.741993\n",
|
"Random Forest 0.858942 0.853479 0.858942 0.853443 {'max_depth': 20, 'min_samples_split': 10, 'n_estimators': 100} 140.522713 0.048441 140.571154\n",
|
||||||
"Decision Tree 0.848666 0.843533 0.848666 0.837078 {'max_depth': 8, 'min_samples_split': 4} 1.247936 0.001514 1.249449\n"
|
"Decision Tree 0.847008 0.840347 0.847008 0.840760 {'max_depth': 10, 'min_samples_split': 4} 11.239021 0.005791 11.244812\n"
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
@@ -501,6 +525,7 @@
|
|||||||
"# Remove redundant features for XGBoost\n",
|
"# Remove redundant features for XGBoost\n",
|
||||||
"X_xgb = X_train_val.drop(columns=['native.country', 'race'])\n",
|
"X_xgb = X_train_val.drop(columns=['native.country', 'race'])\n",
|
||||||
"\n",
|
"\n",
|
||||||
|
"\n",
|
||||||
"# Train decision tree without redundant features\n",
|
"# Train decision tree without redundant features\n",
|
||||||
"cmp_dt = ClassifierComparisonOpt(X_dt, y_train_val)\n",
|
"cmp_dt = ClassifierComparisonOpt(X_dt, y_train_val)\n",
|
||||||
"cmp_dt.fit_models({'Decision Tree': fine_grid['Decision Tree']})\n",
|
"cmp_dt.fit_models({'Decision Tree': fine_grid['Decision Tree']})\n",
|
||||||
@@ -513,6 +538,7 @@
|
|||||||
"cmp_rf = ClassifierComparisonOpt(X_train_val, y_train_val)\n",
|
"cmp_rf = ClassifierComparisonOpt(X_train_val, y_train_val)\n",
|
||||||
"cmp_rf.fit_models({'Random Forest': fine_grid['Random Forest']})\n",
|
"cmp_rf.fit_models({'Random Forest': fine_grid['Random Forest']})\n",
|
||||||
"\n",
|
"\n",
|
||||||
|
"\n",
|
||||||
"# Print results\n",
|
"# Print results\n",
|
||||||
"res = pd.concat([cmp_dt.results_df, cmp_rf.results_df, cmp_xgb.results_df])\n",
|
"res = pd.concat([cmp_dt.results_df, cmp_rf.results_df, cmp_xgb.results_df])\n",
|
||||||
"print(\"\\n------ Results Sorted by Accuracy ------\")\n",
|
"print(\"\\n------ Results Sorted by Accuracy ------\")\n",
|
||||||
@@ -542,11 +568,11 @@
|
|||||||
"\n",
|
"\n",
|
||||||
"# Train the model\n",
|
"# Train the model\n",
|
||||||
"dt.fit(X_train_val, y_train_val)\n",
|
"dt.fit(X_train_val, y_train_val)\n",
|
||||||
"y_pred = dt.predict(X_test)\n",
|
"y_pred_dt = dt.predict(X_test)\n",
|
||||||
"\n",
|
"\n",
|
||||||
"# Classification Report\n",
|
"# Classification Report\n",
|
||||||
"print(\"Classification Report:\")\n",
|
"print(\"Classification Report:\")\n",
|
||||||
"print(classification_report(y_val, y_pred, target_names=[\"Poor\", \"Rich\"]))\n",
|
"print(classification_report(y_test, y_pred_dt, target_names=[\"Poor\", \"Rich\"]))\n",
|
||||||
"\n",
|
"\n",
|
||||||
"\n",
|
"\n",
|
||||||
"# ---------------------------- Random Forest ----------------------------\n",
|
"# ---------------------------- Random Forest ----------------------------\n",
|
||||||
@@ -560,21 +586,21 @@
|
|||||||
"\n",
|
"\n",
|
||||||
"# Classification Report\n",
|
"# Classification Report\n",
|
||||||
"print(\"Classification Report:\")\n",
|
"print(\"Classification Report:\")\n",
|
||||||
"print(classification_report(y_val, y_pred, target_names=[\"Poor\", \"Rich\"]))\n",
|
"print(classification_report(y_test, y_pred_dt, target_names=[\"Poor\", \"Rich\"]))\n",
|
||||||
"\n",
|
"\n",
|
||||||
"\n",
|
"\n",
|
||||||
"# ---------------------------- Random Forest ----------------------------\n",
|
"# ---------------------------- XGBoost ----------------------------\n",
|
||||||
"xgb = Pipeline([\n",
|
"xgb = Pipeline([\n",
|
||||||
" ('xgb', XGBClassifier(learning_rate=0.15, max_depth=5, n_estimators=100, random_state=42))\n",
|
" ('xgb', XGBClassifier(learning_rate=0.15, max_depth=5, n_estimators=100, random_state=42))\n",
|
||||||
"])\n",
|
"])\n",
|
||||||
"\n",
|
"\n",
|
||||||
"# Train the model\n",
|
"# Train the model\n",
|
||||||
"xgb.fit(X_train_val, y_train_val)\n",
|
"xgb.fit(X_train_val, y_train_val)\n",
|
||||||
"y_pred = cmp_xgb.predict(X_test)\n",
|
"y_pred = xgb.predict(X_test)\n",
|
||||||
"\n",
|
"\n",
|
||||||
"# Classification Report\n",
|
"# Classification Report\n",
|
||||||
"print(\"Classification Report:\")\n",
|
"print(\"Classification Report:\")\n",
|
||||||
"print(classification_report(y_val, y_pred, target_names=[\"Poor\", \"Rich\"]))"
|
"print(classification_report(y_test, y_pred_dt, target_names=[\"Poor\", \"Rich\"]))"
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
@@ -594,7 +620,7 @@
|
|||||||
"name": "python",
|
"name": "python",
|
||||||
"nbconvert_exporter": "python",
|
"nbconvert_exporter": "python",
|
||||||
"pygments_lexer": "ipython3",
|
"pygments_lexer": "ipython3",
|
||||||
"version": "3.13.7"
|
"version": "3.12.12"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"nbformat": 4,
|
"nbformat": 4,
|
||||||
|
|||||||
Reference in new issue
Block a user