{ "nbformat": 4, "nbformat_minor": 0, "metadata": { "colab": { "provenance": [], "authorship_tag": "ABX9TyNCMx3gFGgtYT3Mqr8vbphC", "include_colab_link": true }, "kernelspec": { "name": "python3", "display_name": "Python 3" }, "language_info": { "name": "python" } }, "cells": [ { "cell_type": "markdown", "metadata": { "id": "view-in-github", "colab_type": "text" }, "source": [ "\"Open" ] }, { "cell_type": "markdown", "source": [ "## Import required Packages" ], "metadata": { "id": "mE9kPDgOUTu4" } }, { "cell_type": "code", "source": [ "!pip install catboost\n", "!pip install xgboost\n", "!pip install lightgbm" ], "metadata": { "id": "hmsQw_oqU2mH" }, "execution_count": null, "outputs": [] }, { "cell_type": "code", "execution_count": 18, "metadata": { "id": "uDZSZSxjUQRs" }, "outputs": [], "source": [ "import pandas as pd\n", "from sklearn.model_selection import train_test_split\n", "from catboost import CatBoostClassifier, Pool\n", "from sklearn.metrics import confusion_matrix, classification_report\n", "import seaborn as sns\n", "import matplotlib.pyplot as plt\n", "from sklearn.metrics import confusion_matrix as cm\n", "import xgboost as xgb\n", "import lightgbm as lgb" ] }, { "cell_type": "markdown", "source": [ "## Load the Dataset" ], "metadata": { "id": "vIf6o9eWUUoI" } }, { "cell_type": "code", "source": [ "# Load the dataset\n", "url = \"https://archive.ics.uci.edu/ml/machine-learning-databases/zoo/zoo.data\"\n", "names = ['animal_name', 'hair', 'feathers', 'eggs', 'milk', 'airborne', 'aquatic', 'predator', 'toothed', 'backbone', 'breathes', 'venomous', 'fins', 'legs', 'tail', 'domestic', 'catsize', 'class_type']\n", "df = pd.read_csv(url, names=names)\n", "\n", "df.head()" ], "metadata": { "colab": { "base_uri": "https://localhost:8080/", "height": 206 }, "id": "8iTmdd34UUwj", "outputId": "b33ad36a-b9b1-4ed3-a607-9405e7172dc6" }, "execution_count": 10, "outputs": [ { "output_type": "execute_result", "data": { "text/plain": [ " animal_name hair feathers eggs milk airborne aquatic predator \\\n", "0 aardvark 1 0 0 1 0 0 1 \n", "1 antelope 1 0 0 1 0 0 0 \n", "2 bass 0 0 1 0 0 1 1 \n", "3 bear 1 0 0 1 0 0 1 \n", "4 boar 1 0 0 1 0 0 1 \n", "\n", " toothed backbone breathes venomous fins legs tail domestic catsize \\\n", "0 1 1 1 0 0 4 0 0 1 \n", "1 1 1 1 0 0 4 1 0 1 \n", "2 1 1 0 0 1 0 1 0 0 \n", "3 1 1 1 0 0 4 0 0 1 \n", "4 1 1 1 0 0 4 1 0 1 \n", "\n", " class_type \n", "0 1 \n", "1 1 \n", "2 4 \n", "3 1 \n", "4 1 " ], "text/html": [ "\n", "
\n", "
\n", "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
animal_namehairfeatherseggsmilkairborneaquaticpredatortoothedbackbonebreathesvenomousfinslegstaildomesticcatsizeclass_type
0aardvark10010011110040011
1antelope10010001110041011
2bass00100111100101004
3bear10010011110040011
4boar10010011110041011
\n", "
\n", " \n", " \n", " \n", "\n", " \n", "
\n", "
\n", " " ] }, "metadata": {}, "execution_count": 10 } ] }, { "cell_type": "markdown", "source": [ "## Prepare the Dataset" ], "metadata": { "id": "GjQ7jZ51UU4f" } }, { "cell_type": "code", "source": [ "# Prepare the dataset\n", "X = df.iloc[:, 1:-1] # Features\n", "y = df.iloc[:, -1] # Labels\n", "\n", "# Split the dataset into training and test sets\n", "X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)" ], "metadata": { "id": "RMAx74ycUU9o" }, "execution_count": 11, "outputs": [] }, { "cell_type": "markdown", "source": [], "metadata": { "id": "MF4rIOdNUVDM" } }, { "cell_type": "code", "source": [ "# Train the model\n", "model = CatBoostClassifier()\n", "model.fit(X_train, y_train, verbose=0)" ], "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "id": "E2-IP_GRUVI_", "outputId": "4fde3d8f-b7b9-48ad-d211-99410362a445" }, "execution_count": 12, "outputs": [ { "output_type": "execute_result", "data": { "text/plain": [ "" ] }, "metadata": {}, "execution_count": 12 } ] }, { "cell_type": "markdown", "source": [], "metadata": { "id": "tC7qezXgUVTi" } }, { "cell_type": "code", "source": [ "# Make predictions\n", "y_pred = model.predict(X_test)" ], "metadata": { "id": "Pnlic_sGUVaa" }, "execution_count": 13, "outputs": [] }, { "cell_type": "markdown", "source": [], "metadata": { "id": "MaKa3hgKUVgY" } }, { "cell_type": "code", "source": [ "# Create confusion matrix\n", "confusion_mat = cm(y_test, y_pred)\n", "\n", "# Visualize the confusion matrix using seaborn heatmap\n", "plt.figure(figsize=(10, 7))\n", "sns.heatmap(confusion_mat, annot=True, fmt='d', cmap='YlGnBu')\n", "plt.xlabel('Predicted')\n", "plt.ylabel('Truth')\n", "plt.show()" ], "metadata": { "colab": { "base_uri": "https://localhost:8080/", "height": 624 }, "id": "2qnET-ukUVl-", "outputId": "ebdd11bf-20cb-42d4-e77c-ead43c5f4798" }, "execution_count": 16, "outputs": [ { "output_type": "display_data", "data": { "text/plain": [ "
" ], "image/png": "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b7zxxtaoBQAAEldRwi2NtriuSy+9NM4///y455574t133/3EraEBAIBt12avQbjkkkvihz/8YRx99NEREXHcccdFJvPxCVq5XC4ymUzU1tY2fJUAAFAiab3Maals9oBQVVUVp59+ejz44INbsx4AACBBmz0g5HIbJqlDDz10qxUDAABJcxWjLVB4ShEAALD92aL7IHTv3v0zh4SlS5d+oYIAACBJab26UKls0YBQVVX1iTspAwAA248tGhC+9a1vRfv27bdWLQAAkDhrEDaT9QcAALD92+KrGAEAwPYs4z4Im6eurm5r1gEAAKTAFq1BAACA7Z01CAAAAPUkCAAAUKDcv0Ev9/cPAAAUkCAAAECBijK/ipEEAQAAyDMgAAAAeU4xAgCAAi5zCgAAUE+CAAAABcr9G/Ryf/8AAEABCQIAABSwBgEAAKCeBAEAAAq4URoAAEA9CQIAABSwBgEAAKCeBAEAAAqU+zfo5f7+AQCAAhKEFLv11j/Hb37zp1i8eFn07Nk1LrrotOjXr3vSZVFPf9JLb9LpdzfNiMcefCEW/G1xZLM7xD799ox//cExsfue7ZMujXo+O+mlN6XlKkak0r33PhrV1ZNjzJiTYurUSdGzZ9c49dSLY8mS5UmXRuhPmulNej3/zBtx3AkHxVU3nx0Tf3VafPhhbVw45sZYs6Ym6dIIn5000xtKzYCQUlOmTIsRI4bGN74xJLp16xJVVWdG06bZuPPO6UmXRuhPmulNelVf870YetwBsefeHWPv7p3jgqpvxaKFy+O1l99OujTCZyfN9Kb0KjKl29LIgJBC69atj5demheDB/fP76uoqIjBgwfEs8/OTbAyIvQnzfRm27J61dqIiGjZaseEK8FnJ730hiQkPiC8/PLLMWXKlHjllVciIuKVV16JM844I0455ZR44IEHPvP3a2pqYuXKlUVbTc26rV32VrVs2cqora2Ldu3aFu1v165NvP/+soSq4iP6k156s+2oq6uL6352V/Tuv2d07dYp6XLKns9OeulNMiQICbrvvvtiwIABcf7558fAgQPjvvvui0MOOSTmzZsXb731Vhx11FGfOSRUV1dH69ati7bq6htK9A4A+Dyunjg1/vb6wvhx9XeSLgWAf5DogHDJJZfEBRdcEEuWLIkpU6bEt7/97fje974X06dPjxkzZsQFF1wQEydO3ORr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115x8sknx/z585Muie2cOymn0Pvvvx+1tbWfuCNehw4d4pVXXkmoKti21NXVxbnnnhsHHXRQ9OnTJ+lyqPfCCy/EoEGDYu3atdGiRYuYOnVq7LPPPkmXRUT8/ve/j2eeeSZmzZqVdCkUOPDAA+Pmm2+OHj16xLvvvhtVVVVx8MEHx4svvhgtW7ZMujy2UwYEYLs0ZsyYePHFF52rmzI9evSIOXPmxIoVK+KPf/xjjBw5Mh5++GFDQsIWLFgQ55xzTkyfPj2aNm2adDkU+NrXvpb/7/369YsDDzww9thjj7jjjjucmsdWY0BIoZ133jkaNWoU7733XtH+9957Lzp27JhQVbDtOOuss+Kee+6JRx55JHbbbbeky6FAkyZNolu3bhERsd9++8WsWbPil7/8Zdxwww0JV1beZs+eHYsWLYp99903v6+2tjYeeeSRuOaaa6KmpiYaNWqUYIV8pE2bNtG9e/eYN29e0qWwHbMGIYWaNGkS++23X8yYMSO/r66uLmbMmOFcXdiEXC4XZ511VkydOjUeeOCB6Nq1a9Il8Rnq6uqipqYm6TLK3pFHHhkvvPBCzJkzJ7/tv//+cfLJJ8ecOXMMBymyatWqeP3116NTp05Jl8J2TIKQUmPHjo2RI0fG/vvvH1/+8pdj0qRJsXr16hg9enTSpZW9VatWFX1z8+abb8acOXNip512ii5duiRYGWPGjInbbrst7rrrrmjZsmUsXLgwIiJat24dzZo1S7g6Kisr42tf+1p06dIl/v73v8dtt90WDz30UNx///1Jl1b2WrZs+Ym1Os2bN4927dpZw5Ow888/P4499tjYY4894p133onx48dHo0aN4qSTTkq6NLZjBoSUOvHEE2Px4sVx8cUXx8KFC2PAgAFx3333fWLhMqX39NNPx+GHH57/eezYsRERMXLkyLj55psTqoqIDTfiiog47LDDivZPmTIlRo0aVfqCKLJo0aL47ne/G++++260bt06+vXrF/fff3985StfSbo0SK233347TjrppFiyZEnssssu8c///M/xxBNPxC677JJ0aWzH3AcBAADIswYBAADIMyAAAAB5BgQAACDPgAAAAOQZEAAAgDwDAgAAkGdAAAAA8gwIAABAngEBIGVGjRoVw4YNy/982GGHxbnnnlvyOh566KHIZDKxfPnykh8bgOQYEAA206hRoyKTyUQmk4kmTZpEt27d4pJLLokPP/xwqx73T3/6U/zkJz/ZrOf6ox6AL2qHpAsA2JZ89atfjSlTpkRNTU3ce++9MWbMmGjcuHFUVlYWPW/dunXRpEmTBjnmTjvt1CCvAwCbQ4IAsAWy2Wx07Ngx9thjjzjjjDNiyJAhcffdd+dPC7rsssuic+fO0aNHj4iIWLBgQYwYMSLatGkTO+20Uxx//PHxt7/9Lf96tbW1MXbs2GjTpk20a9cufvSjH0Uulys65j+eYlRTUxPjxo2L3XffPbLZbHTr1i1+85vfxN/+9rc4/PDDIyKibdu2kclkYtSoURERUVdXF9XV1dG1a9do1qxZ9O/fP/74xz8WHefee++N7t27R7NmzeLwww8vqhOA8mFAAPgCmjVrFuvWrYuIiBkzZsTcuXNj+vTpcc8998T69etj6NCh0bJly3j00Ufjf//3f6NFixbx1a9+Nf87P//5z+Pmm2+Om266KR577LFYunRpTJ06dZPH/O53vxu/+93v4qqrroqXX345brjhhmjRokXsvvvuceedd0ZExNy5c+Pdd9+NX/7ylxERUV1dHb/97W/j+uuvj5deeinOO++8+M53vhMPP/xwRGwYZIYPHx7HHntszJkzJ/71X/81Lrzwwq31zwZAijnFCOBzyOVyMWPGjLj//vvj7LPPjsWLF0fz5s1j8uTJ+VOL/vM//zPq6upi8uTJkclkIiJiypQp0aZNm3jooYfiqKOOikmTJkVlZWUMHz48IiKuv/76uP/++zd63FdffTXuuOOOmD59egwZMiQiIvbaa6/84x+djtS+ffto06ZNRGxIHC6//PL4n//5nxg0aFD+dx577LG44YYb4tBDD43rrrsu9t577/j5z38eERE9evSIF154Ia644ooG/FcDYFtgQADYAvfcc0+0aNEi1q9fH3V1dfHtb387JkyYEGPGjIm+ffsWrTt47rnnYt68edGyZcui11i7dm28/vrrsWLFinj33XfjwAMPzD+2ww47xP777/+J04w+MmfOnGjUqFEceuihm13zvHnz4oMPPoivfOUrRfvXrVsXAwcOjIiIl19+uaiOiMgPEwCUFwMCwBY4/PDD47rrrosmTZpE586dY4cdPv5/o82bNy967qpVq2K//faLW2+99ROvs8suu3yu4zdr1myLf2fVqlUREfHnP/85dt1116LHstns56oDgO2XAQFgCzRv3jy6deu2Wc/dd9994/bbb4/27dtHq1atPvU5nTp1iieffDIOOeSQiIj48MMPY/bs2bHvvvt+6vP79u0bdXV18fDDD+dPMSr0UYJRW1ub37fPPvtENpuN+fPnbzR56NWrV9x9991F+5544onPfpMAbHcsUgbYSk4++eTYeeed4/jjj49HH3003nzzzXjooYfiBz/4Qbz99tsREXHOOefExIkTY9q0afHKK6/EmWeeucl7GOy5554xcuTIOOWUU2LatGn517zjjjsiImKPPfaITCYT99xzTyxevDhWrVoVLVu2jPPPPz/OO++8uOWWW+L111+PZ555Jq6++uq45ZZbIiLi9NNPj9deey0uuOCCmDt3btx2221x8803b+1/IgBSyIAAsJXsuOOO8cgjj0SXLl1i+PDh0atXrzj11FNj7dq1+UThhz/8YfzLv/xLjBw5MgYNGhQtW7aM//f//t8mX/e6666Lb37zm3HmmWdGz54943vf+16sXr06IiJ23XXXqKqqigsvvDA6dOgQZ511VkRE/OQnP4mLLrooqquro1evXvHVr341/vznP0fXrl0jIqJLly5x5513xrRp06J///5x/fXXx+WXX74V/3UASKtMbmMr4QAAgLIjQQAAAPIMCAAAQJ4BAQAAyDMgAAAAeQYEAAAgz4AAAADkGRAAAIA8AwIAAJBnQAAAAPIMCAAAQJ4BAQAAyPv/AcTl5ah2R3m7AAAAAElFTkSuQmCC\n" }, "metadata": {} } ] }, { "cell_type": "markdown", "source": [], "metadata": { "id": "RTtLaWwtUVq-" } }, { "cell_type": "code", "source": [ "# Print classification report\n", "print(classification_report(y_test, y_pred))" ], "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "id": "gKT6ajDQUVwN", "outputId": "625025d0-a1ad-470d-dc85-6508168f7c37" }, "execution_count": 15, "outputs": [ { "output_type": "stream", "name": "stdout", "text": [ " precision recall f1-score support\n", "\n", " 1 1.00 1.00 1.00 12\n", " 2 1.00 1.00 1.00 2\n", " 3 0.00 0.00 0.00 1\n", " 4 0.67 1.00 0.80 2\n", " 6 1.00 1.00 1.00 3\n", " 7 1.00 1.00 1.00 1\n", "\n", " accuracy 0.95 21\n", " macro avg 0.78 0.83 0.80 21\n", "weighted avg 0.92 0.95 0.93 21\n", "\n" ] }, { "output_type": "stream", "name": "stderr", "text": [ "/usr/local/lib/python3.10/dist-packages/sklearn/metrics/_classification.py:1344: UndefinedMetricWarning: Precision and F-score are ill-defined and being set to 0.0 in labels with no predicted samples. Use `zero_division` parameter to control this behavior.\n", " _warn_prf(average, modifier, msg_start, len(result))\n", "/usr/local/lib/python3.10/dist-packages/sklearn/metrics/_classification.py:1344: UndefinedMetricWarning: Precision and F-score are ill-defined and being set to 0.0 in labels with no predicted samples. Use `zero_division` parameter to control this behavior.\n", " _warn_prf(average, modifier, msg_start, len(result))\n", "/usr/local/lib/python3.10/dist-packages/sklearn/metrics/_classification.py:1344: UndefinedMetricWarning: Precision and F-score are ill-defined and being set to 0.0 in labels with no predicted samples. Use `zero_division` parameter to control this behavior.\n", " _warn_prf(average, modifier, msg_start, len(result))\n" ] } ] }, { "cell_type": "markdown", "source": [ "## Comparing CatBoost with XGBoost of Zoo Data" ], "metadata": { "id": "4iV9LfBPdezA" } }, { "cell_type": "code", "source": [ "# Adjust labels for XGBoost\n", "y_train_xgb = y_train - 1\n", "y_test_xgb = y_test - 1\n", "\n", "# Train the model\n", "xgb_model = xgb.XGBClassifier()\n", "xgb_model.fit(X_train, y_train_xgb)\n", "\n", "# Make predictions\n", "y_pred_xgb = xgb_model.predict(X_test)\n", "\n", "# Adjust predictions back to original class values\n", "y_pred_xgb = y_pred_xgb + 1\n", "\n", "# Create confusion matrix\n", "confusion_mat_xgb = cm(y_test, y_pred_xgb)\n", "\n", "# Visualize the confusion matrix using seaborn heatmap\n", "plt.figure(figsize=(10, 7))\n", "sns.heatmap(confusion_mat_xgb, annot=True, fmt='d', cmap='YlGnBu')\n", "plt.xlabel('Predicted')\n", "plt.ylabel('Truth')\n", "plt.show()\n", "\n", "# Print classification report\n", "print(classification_report(y_test, y_pred_xgb))" ], "metadata": { "colab": { "base_uri": "https://localhost:8080/", "height": 954 }, "id": "AnBfIUZ5dfLB", "outputId": "510db69c-fd1d-4154-80ce-95d249c876a5" }, "execution_count": 20, "outputs": [ { "output_type": "display_data", "data": { "text/plain": [ "
" ], "image/png": "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b7zxxtaoBQAAEldRwi2NtriuSy+9NM4///y455574t133/3EraEBAIBt12avQbjkkkvihz/8YRx99NEREXHcccdFJvPxCVq5XC4ymUzU1tY2fJUAAFAiab3Maals9oBQVVUVp59+ejz44INbsx4AACBBmz0g5HIbJqlDDz10qxUDAABJcxWjLVB4ShEAALD92aL7IHTv3v0zh4SlS5d+oYIAACBJab26UKls0YBQVVX1iTspAwAA248tGhC+9a1vRfv27bdWLQAAkDhrEDaT9QcAALD92+KrGAEAwPYs4z4Im6eurm5r1gEAAKTAFq1BAACA7Z01CAAAAPUkCAAAUKDcv0Ev9/cPAAAUkCAAAECBijK/ipEEAQAAyDMgAAAAeU4xAgCAAi5zCgAAUE+CAAAABcr9G/Ryf/8AAEABCQIAABSwBgEAAKCeBAEAAAq4URoAAEA9CQIAABSwBgEAAKCeBAEAAAqU+zfo5f7+AQCAAhKEFLv11j/Hb37zp1i8eFn07Nk1LrrotOjXr3vSZVFPf9JLb9LpdzfNiMcefCEW/G1xZLM7xD799ox//cExsfue7ZMujXo+O+mlN6XlKkak0r33PhrV1ZNjzJiTYurUSdGzZ9c49dSLY8mS5UmXRuhPmulNej3/zBtx3AkHxVU3nx0Tf3VafPhhbVw45sZYs6Ym6dIIn5000xtKzYCQUlOmTIsRI4bGN74xJLp16xJVVWdG06bZuPPO6UmXRuhPmulNelVf870YetwBsefeHWPv7p3jgqpvxaKFy+O1l99OujTCZyfN9Kb0KjKl29LIgJBC69atj5demheDB/fP76uoqIjBgwfEs8/OTbAyIvQnzfRm27J61dqIiGjZaseEK8FnJ730hiQkPiC8/PLLMWXKlHjllVciIuKVV16JM844I0455ZR44IEHPvP3a2pqYuXKlUVbTc26rV32VrVs2cqora2Ldu3aFu1v165NvP/+soSq4iP6k156s+2oq6uL6352V/Tuv2d07dYp6XLKns9OeulNMiQICbrvvvtiwIABcf7558fAgQPjvvvui0MOOSTmzZsXb731Vhx11FGfOSRUV1dH69ati7bq6htK9A4A+Dyunjg1/vb6wvhx9XeSLgWAf5DogHDJJZfEBRdcEEuWLIkpU6bEt7/97fje974X06dPjxkzZsQFF1wQEydO3ORr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115x8sknx/z585Muie2cOymn0Pvvvx+1tbWfuCNehw4d4pVXXkmoKti21NXVxbnnnhsHHXRQ9OnTJ+lyqPfCCy/EoEGDYu3atdGiRYuYOnVq7LPPPkmXRUT8/ve/j2eeeSZmzZqVdCkUOPDAA+Pmm2+OHj16xLvvvhtVVVVx8MEHx4svvhgtW7ZMujy2UwYEYLs0ZsyYePHFF52rmzI9evSIOXPmxIoVK+KPf/xjjBw5Mh5++GFDQsIWLFgQ55xzTkyfPj2aNm2adDkU+NrXvpb/7/369YsDDzww9thjj7jjjjucmsdWY0BIoZ133jkaNWoU7733XtH+9957Lzp27JhQVbDtOOuss+Kee+6JRx55JHbbbbeky6FAkyZNolu3bhERsd9++8WsWbPil7/8Zdxwww0JV1beZs+eHYsWLYp99903v6+2tjYeeeSRuOaaa6KmpiYaNWqUYIV8pE2bNtG9e/eYN29e0qWwHbMGIYWaNGkS++23X8yYMSO/r66uLmbMmOFcXdiEXC4XZ511VkydOjUeeOCB6Nq1a9Il8Rnq6uqipqYm6TLK3pFHHhkvvPBCzJkzJ7/tv//+cfLJJ8ecOXMMBymyatWqeP3116NTp05Jl8J2TIKQUmPHjo2RI0fG/vvvH1/+8pdj0qRJsXr16hg9enTSpZW9VatWFX1z8+abb8acOXNip512ii5duiRYGWPGjInbbrst7rrrrmjZsmUsXLgwIiJat24dzZo1S7g6Kisr42tf+1p06dIl/v73v8dtt90WDz30UNx///1Jl1b2WrZs+Ym1Os2bN4927dpZw5Ow888/P4499tjYY4894p133onx48dHo0aN4qSTTkq6NLZjBoSUOvHEE2Px4sVx8cUXx8KFC2PAgAFx3333fWLhMqX39NNPx+GHH57/eezYsRERMXLkyLj55psTqoqIDTfiiog47LDDivZPmTIlRo0aVfqCKLJo0aL47ne/G++++260bt06+vXrF/fff3985StfSbo0SK233347TjrppFiyZEnssssu8c///M/xxBNPxC677JJ0aWzH3AcBAADIswYBAADIMyAAAAB5BgQAACDPgAAAAOQZEAAAgDwDAgAAkGdAAAAA8gwIAABAngEBIGVGjRoVw4YNy/982GGHxbnnnlvyOh566KHIZDKxfPnykh8bgOQYEAA206hRoyKTyUQmk4kmTZpEt27d4pJLLokPP/xwqx73T3/6U/zkJz/ZrOf6ox6AL2qHpAsA2JZ89atfjSlTpkRNTU3ce++9MWbMmGjcuHFUVlYWPW/dunXRpEmTBjnmTjvt1CCvAwCbQ4IAsAWy2Wx07Ngx9thjjzjjjDNiyJAhcffdd+dPC7rsssuic+fO0aNHj4iIWLBgQYwYMSLatGkTO+20Uxx//PHxt7/9Lf96tbW1MXbs2GjTpk20a9cufvSjH0Uulys65j+eYlRTUxPjxo2L3XffPbLZbHTr1i1+85vfxN/+9rc4/PDDIyKibdu2kclkYtSoURERUVdXF9XV1dG1a9do1qxZ9O/fP/74xz8WHefee++N7t27R7NmzeLwww8vqhOA8mFAAPgCmjVrFuvWrYuIiBkzZsTcuXNj+vTpcc8998T69etj6NCh0bJly3j00Ufjf//3f6NFixbx1a9+Nf87P//5z+Pmm2+Om266KR577LFYunRpTJ06dZPH/O53vxu/+93v4qqrroqXX345brjhhmjRokXsvvvuceedd0ZExNy5c+Pdd9+NX/7ylxERUV1dHb/97W/j+uuvj5deeinOO++8+M53vhMPP/xwRGwYZIYPHx7HHntszJkzJ/71X/81Lrzwwq31zwZAijnFCOBzyOVyMWPGjLj//vvj7LPPjsWLF0fz5s1j8uTJ+VOL/vM//zPq6upi8uTJkclkIiJiypQp0aZNm3jooYfiqKOOikmTJkVlZWUMHz48IiKuv/76uP/++zd63FdffTXuuOOOmD59egwZMiQiIvbaa6/84x+djtS+ffto06ZNRGxIHC6//PL4n//5nxg0aFD+dx577LG44YYb4tBDD43rrrsu9t577/j5z38eERE9evSIF154Ia644ooG/FcDYFtgQADYAvfcc0+0aNEi1q9fH3V1dfHtb387JkyYEGPGjIm+ffsWrTt47rnnYt68edGyZcui11i7dm28/vrrsWLFinj33XfjwAMPzD+2ww47xP777/+J04w+MmfOnGjUqFEceuihm13zvHnz4oMPPoivfOUrRfvXrVsXAwcOjIiIl19+uaiOiMgPEwCUFwMCwBY4/PDD47rrrosmTZpE586dY4cdPv5/o82bNy967qpVq2K//faLW2+99ROvs8suu3yu4zdr1myLf2fVqlUREfHnP/85dt1116LHstns56oDgO2XAQFgCzRv3jy6deu2Wc/dd9994/bbb4/27dtHq1atPvU5nTp1iieffDIOOeSQiIj48MMPY/bs2bHvvvt+6vP79u0bdXV18fDDD+dPMSr0UYJRW1ub37fPPvtENpuN+fPnbzR56NWrV9x9991F+5544onPfpMAbHcsUgbYSk4++eTYeeed4/jjj49HH3003nzzzXjooYfiBz/4Qbz99tsREXHOOefExIkTY9q0afHKK6/EmWeeucl7GOy5554xcuTIOOWUU2LatGn517zjjjsiImKPPfaITCYT99xzTyxevDhWrVoVLVu2jPPPPz/OO++8uOWWW+L111+PZ555Jq6++uq45ZZbIiLi9NNPj9deey0uuOCCmDt3btx2221x8803b+1/IgBSyIAAsJXsuOOO8cgjj0SXLl1i+PDh0atXrzj11FNj7dq1+UThhz/8YfzLv/xLjBw5MgYNGhQtW7aM//f//t8mX/e6666Lb37zm3HmmWdGz54943vf+16sXr06IiJ23XXXqKqqigsvvDA6dOgQZ511VkRE/OQnP4mLLrooqquro1evXvHVr341/vznP0fXrl0jIqJLly5x5513xrRp06J///5x/fXXx+WXX74V/3UASKtMbmMr4QAAgLIjQQAAAPIMCAAAQJ4BAQAAyDMgAAAAeQYEAAAgz4AAAADkGRAAAIA8AwIAAJBnQAAAAPIMCAAAQJ4BAQAAyPv/AcTl5ah2R3m7AAAAAElFTkSuQmCC\n" }, "metadata": {} }, { "output_type": "stream", "name": "stdout", "text": [ " precision recall f1-score support\n", "\n", " 1 1.00 1.00 1.00 12\n", " 2 1.00 1.00 1.00 2\n", " 3 0.00 0.00 0.00 1\n", " 4 0.67 1.00 0.80 2\n", " 6 1.00 1.00 1.00 3\n", " 7 1.00 1.00 1.00 1\n", "\n", " accuracy 0.95 21\n", " macro avg 0.78 0.83 0.80 21\n", "weighted avg 0.92 0.95 0.93 21\n", "\n" ] }, { "output_type": "stream", "name": "stderr", "text": [ "/usr/local/lib/python3.10/dist-packages/sklearn/metrics/_classification.py:1344: UndefinedMetricWarning: Precision and F-score are ill-defined and being set to 0.0 in labels with no predicted samples. Use `zero_division` parameter to control this behavior.\n", " _warn_prf(average, modifier, msg_start, len(result))\n", "/usr/local/lib/python3.10/dist-packages/sklearn/metrics/_classification.py:1344: UndefinedMetricWarning: Precision and F-score are ill-defined and being set to 0.0 in labels with no predicted samples. Use `zero_division` parameter to control this behavior.\n", " _warn_prf(average, modifier, msg_start, len(result))\n", "/usr/local/lib/python3.10/dist-packages/sklearn/metrics/_classification.py:1344: UndefinedMetricWarning: Precision and F-score are ill-defined and being set to 0.0 in labels with no predicted samples. Use `zero_division` parameter to control this behavior.\n", " _warn_prf(average, modifier, msg_start, len(result))\n" ] } ] }, { "cell_type": "markdown", "source": [ "## Comparing CatBoost with LightGBM Model" ], "metadata": { "id": "58wQvNGFdfX8" } }, { "cell_type": "code", "source": [ "# Train the model\n", "lgb_model = lgb.LGBMClassifier()\n", "lgb_model.fit(X_train, y_train)\n", "\n", "# Make predictions\n", "y_pred_lgb = lgb_model.predict(X_test)\n", "\n", "# Create confusion matrix\n", "confusion_mat_lgb = cm(y_test, y_pred_lgb)\n", "\n", "# Visualize the confusion matrix using seaborn heatmap\n", "plt.figure(figsize=(10, 7))\n", "sns.heatmap(confusion_mat_lgb, annot=True, fmt='d', cmap='YlGnBu')\n", "plt.xlabel('Predicted')\n", "plt.ylabel('Truth')\n", "plt.show()\n", "\n", "# Print classification report\n", "print(classification_report(y_test, y_pred_lgb))" ], "metadata": { "colab": { "base_uri": "https://localhost:8080/", "height": 954 }, "id": "deb6HUyxdfgD", "outputId": "3c26624d-7ffb-4c73-f78d-630595c7bb52" }, "execution_count": 21, "outputs": [ { "output_type": "display_data", "data": { "text/plain": [ "
" ], "image/png": "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b7zxxtaoBQAAEldRwi2NtriuSy+9NM4///y455574t133/3EraEBAIBt12avQbjkkkvihz/8YRx99NEREXHcccdFJvPxCVq5XC4ymUzU1tY2fJUAAFAiab3Maals9oBQVVUVp59+ejz44INbsx4AACBBmz0g5HIbJqlDDz10qxUDAABJcxWjLVB4ShEAALD92aL7IHTv3v0zh4SlS5d+oYIAACBJab26UKls0YBQVVX1iTspAwAA248tGhC+9a1vRfv27bdWLQAAkDhrEDaT9QcAALD92+KrGAEAwPYs4z4Im6eurm5r1gEAAKTAFq1BAACA7Z01CAAAAPUkCAAAUKDcv0Ev9/cPAAAUkCAAAECBijK/ipEEAQAAyDMgAAAAeU4xAgCAAi5zCgAAUE+CAAAABcr9G/Ryf/8AAEABCQIAABSwBgEAAKCeBAEAAAq4URoAAEA9CQIAABSwBgEAAKCeBAEAAAqU+zfo5f7+AQCAAhKEFLv11j/Hb37zp1i8eFn07Nk1LrrotOjXr3vSZVFPf9JLb9LpdzfNiMcefCEW/G1xZLM7xD799ox//cExsfue7ZMujXo+O+mlN6XlKkak0r33PhrV1ZNjzJiTYurUSdGzZ9c49dSLY8mS5UmXRuhPmulNej3/zBtx3AkHxVU3nx0Tf3VafPhhbVw45sZYs6Ym6dIIn5000xtKzYCQUlOmTIsRI4bGN74xJLp16xJVVWdG06bZuPPO6UmXRuhPmulNelVf870YetwBsefeHWPv7p3jgqpvxaKFy+O1l99OujTCZyfN9Kb0KjKl29LIgJBC69atj5demheDB/fP76uoqIjBgwfEs8/OTbAyIvQnzfRm27J61dqIiGjZaseEK8FnJ730hiQkPiC8/PLLMWXKlHjllVciIuKVV16JM844I0455ZR44IEHPvP3a2pqYuXKlUVbTc26rV32VrVs2cqora2Ldu3aFu1v165NvP/+soSq4iP6k156s+2oq6uL6352V/Tuv2d07dYp6XLKns9OeulNMiQICbrvvvtiwIABcf7558fAgQPjvvvui0MOOSTmzZsXb731Vhx11FGfOSRUV1dH69ati7bq6htK9A4A+Dyunjg1/vb6wvhx9XeSLgWAf5DogHDJJZfEBRdcEEuWLIkpU6bEt7/97fje974X06dPjxkzZsQFF1wQEydO3ORr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115x8sknx/z585Muie2cOymn0Pvvvx+1tbWfuCNehw4d4pVXXkmoKti21NXVxbnnnhsHHXRQ9OnTJ+lyqPfCCy/EoEGDYu3atdGiRYuYOnVq7LPPPkmXRUT8/ve/j2eeeSZmzZqVdCkUOPDAA+Pmm2+OHj16xLvvvhtVVVVx8MEHx4svvhgtW7ZMujy2UwYEYLs0ZsyYePHFF52rmzI9evSIOXPmxIoVK+KPf/xjjBw5Mh5++GFDQsIWLFgQ55xzTkyfPj2aNm2adDkU+NrXvpb/7/369YsDDzww9thjj7jjjjucmsdWY0BIoZ133jkaNWoU7733XtH+9957Lzp27JhQVbDtOOuss+Kee+6JRx55JHbbbbeky6FAkyZNolu3bhERsd9++8WsWbPil7/8Zdxwww0JV1beZs+eHYsWLYp99903v6+2tjYeeeSRuOaaa6KmpiYaNWqUYIV8pE2bNtG9e/eYN29e0qWwHbMGIYWaNGkS++23X8yYMSO/r66uLmbMmOFcXdiEXC4XZ511VkydOjUeeOCB6Nq1a9Il8Rnq6uqipqYm6TLK3pFHHhkvvPBCzJkzJ7/tv//+cfLJJ8ecOXMMBymyatWqeP3116NTp05Jl8J2TIKQUmPHjo2RI0fG/vvvH1/+8pdj0qRJsXr16hg9enTSpZW9VatWFX1z8+abb8acOXNip512ii5duiRYGWPGjInbbrst7rrrrmjZsmUsXLgwIiJat24dzZo1S7g6Kisr42tf+1p06dIl/v73v8dtt90WDz30UNx///1Jl1b2WrZs+Ym1Os2bN4927dpZw5Ow888/P4499tjYY4894p133onx48dHo0aN4qSTTkq6NLZjBoSUOvHEE2Px4sVx8cUXx8KFC2PAgAFx3333fWLhMqX39NNPx+GHH57/eezYsRERMXLkyLj55psTqoqIDTfiiog47LDDivZPmTIlRo0aVfqCKLJo0aL47ne/G++++260bt06+vXrF/fff3985StfSbo0SK233347TjrppFiyZEnssssu8c///M/xxBNPxC677JJ0aWzH3AcBAADIswYBAADIMyAAAAB5BgQAACDPgAAAAOQZEAAAgDwDAgAAkGdAAAAA8gwIAABAngEBIGVGjRoVw4YNy/982GGHxbnnnlvyOh566KHIZDKxfPnykh8bgOQYEAA206hRoyKTyUQmk4kmTZpEt27d4pJLLokPP/xwqx73T3/6U/zkJz/ZrOf6ox6AL2qHpAsA2JZ89atfjSlTpkRNTU3ce++9MWbMmGjcuHFUVlYWPW/dunXRpEmTBjnmTjvt1CCvAwCbQ4IAsAWy2Wx07Ngx9thjjzjjjDNiyJAhcffdd+dPC7rsssuic+fO0aNHj4iIWLBgQYwYMSLatGkTO+20Uxx//PHxt7/9Lf96tbW1MXbs2GjTpk20a9cufvSjH0Uulys65j+eYlRTUxPjxo2L3XffPbLZbHTr1i1+85vfxN/+9rc4/PDDIyKibdu2kclkYtSoURERUVdXF9XV1dG1a9do1qxZ9O/fP/74xz8WHefee++N7t27R7NmzeLwww8vqhOA8mFAAPgCmjVrFuvWrYuIiBkzZsTcuXNj+vTpcc8998T69etj6NCh0bJly3j00Ufjf//3f6NFixbx1a9+Nf87P//5z+Pmm2+Om266KR577LFYunRpTJ06dZPH/O53vxu/+93v4qqrroqXX345brjhhmjRokXsvvvuceedd0ZExNy5c+Pdd9+NX/7ylxERUV1dHb/97W/j+uuvj5deeinOO++8+M53vhMPP/xwRGwYZIYPHx7HHntszJkzJ/71X/81Lrzwwq31zwZAijnFCOBzyOVyMWPGjLj//vvj7LPPjsWLF0fz5s1j8uTJ+VOL/vM//zPq6upi8uTJkclkIiJiypQp0aZNm3jooYfiqKOOikmTJkVlZWUMHz48IiKuv/76uP/++zd63FdffTXuuOOOmD59egwZMiQiIvbaa6/84x+djtS+ffto06ZNRGxIHC6//PL4n//5nxg0aFD+dx577LG44YYb4tBDD43rrrsu9t577/j5z38eERE9evSIF154Ia644ooG/FcDYFtgQADYAvfcc0+0aNEi1q9fH3V1dfHtb387JkyYEGPGjIm+ffsWrTt47rnnYt68edGyZcui11i7dm28/vrrsWLFinj33XfjwAMPzD+2ww47xP777/+J04w+MmfOnGjUqFEceuihm13zvHnz4oMPPoivfOUrRfvXrVsXAwcOjIiIl19+uaiOiMgPEwCUFwMCwBY4/PDD47rrrosmTZpE586dY4cdPv5/o82bNy967qpVq2K//faLW2+99ROvs8suu3yu4zdr1myLf2fVqlUREfHnP/85dt1116LHstns56oDgO2XAQFgCzRv3jy6deu2Wc/dd9994/bbb4/27dtHq1atPvU5nTp1iieffDIOOeSQiIj48MMPY/bs2bHvvvt+6vP79u0bdXV18fDDD+dPMSr0UYJRW1ub37fPPvtENpuN+fPnbzR56NWrV9x9991F+5544onPfpMAbHcsUgbYSk4++eTYeeed4/jjj49HH3003nzzzXjooYfiBz/4Qbz99tsREXHOOefExIkTY9q0afHKK6/EmWeeucl7GOy5554xcuTIOOWUU2LatGn517zjjjsiImKPPfaITCYT99xzTyxevDhWrVoVLVu2jPPPPz/OO++8uOWWW+L111+PZ555Jq6++uq45ZZbIiLi9NNPj9deey0uuOCCmDt3btx2221x8803b+1/IgBSyIAAsJXsuOOO8cgjj0SXLl1i+PDh0atXrzj11FNj7dq1+UThhz/8YfzLv/xLjBw5MgYNGhQtW7aM//f//t8mX/e6666Lb37zm3HmmWdGz54943vf+16sXr06IiJ23XXXqKqqigsvvDA6dOgQZ511VkRE/OQnP4mLLrooqquro1evXvHVr341/vznP0fXrl0jIqJLly5x5513xrRp06J///5x/fXXx+WXX74V/3UASKtMbmMr4QAAgLIjQQAAAPIMCAAAQJ4BAQAAyDMgAAAAeQYEAAAgz4AAAADkGRAAAIA8AwIAAJBnQAAAAPIMCAAAQJ4BAQAAyPv/AcTl5ah2R3m7AAAAAElFTkSuQmCC\n" }, "metadata": {} }, { "output_type": "stream", "name": "stdout", "text": [ " precision recall f1-score support\n", "\n", " 1 1.00 1.00 1.00 12\n", " 2 1.00 1.00 1.00 2\n", " 3 0.00 0.00 0.00 1\n", " 4 0.67 1.00 0.80 2\n", " 6 1.00 1.00 1.00 3\n", " 7 1.00 1.00 1.00 1\n", "\n", " accuracy 0.95 21\n", " macro avg 0.78 0.83 0.80 21\n", "weighted avg 0.92 0.95 0.93 21\n", "\n" ] }, { "output_type": "stream", "name": "stderr", "text": [ "/usr/local/lib/python3.10/dist-packages/sklearn/metrics/_classification.py:1344: UndefinedMetricWarning: Precision and F-score are ill-defined and being set to 0.0 in labels with no predicted samples. Use `zero_division` parameter to control this behavior.\n", " _warn_prf(average, modifier, msg_start, len(result))\n", "/usr/local/lib/python3.10/dist-packages/sklearn/metrics/_classification.py:1344: UndefinedMetricWarning: Precision and F-score are ill-defined and being set to 0.0 in labels with no predicted samples. Use `zero_division` parameter to control this behavior.\n", " _warn_prf(average, modifier, msg_start, len(result))\n", "/usr/local/lib/python3.10/dist-packages/sklearn/metrics/_classification.py:1344: UndefinedMetricWarning: Precision and F-score are ill-defined and being set to 0.0 in labels with no predicted samples. Use `zero_division` parameter to control this behavior.\n", " _warn_prf(average, modifier, msg_start, len(result))\n" ] } ] }, { "cell_type": "code", "source": [], "metadata": { "id": "EOT1F5zQeXzF" }, "execution_count": null, "outputs": [] } ] }