{ "cells": [ { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [ { "data": { "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", "
AgeSexBPCholesterolNa_to_KDrug
17648MHIGHNORMAL10.446drugA
11961FHIGHHIGH25.475DrugY
6568FNORMALNORMAL27.050DrugY
\n", "
" ], "text/plain": [ " Age Sex BP Cholesterol Na_to_K Drug\n", "176 48 M HIGH NORMAL 10.446 drugA\n", "119 61 F HIGH HIGH 25.475 DrugY\n", "65 68 F NORMAL NORMAL 27.050 DrugY" ] }, "execution_count": 1, "metadata": {}, "output_type": "execute_result" } ], "source": [ "import pandas as pd\n", "\n", "drug_df = pd.read_csv(\"Data/drug.csv\")\n", "drug_df = drug_df.sample(frac=1)\n", "drug_df.head(3)" ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [], "source": [ "from sklearn.model_selection import train_test_split\n", "\n", "X = drug_df.drop(\"Drug\", axis=1).values\n", "y = drug_df.Drug.values\n", "\n", "X_train, X_test, y_train, y_test = train_test_split(\n", " X, y, test_size=0.3, random_state=125\n", ")" ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
Pipeline(steps=[('preprocessing',\n",
       "                 ColumnTransformer(transformers=[('encoder', OrdinalEncoder(),\n",
       "                                                  [1, 2, 3]),\n",
       "                                                 ('num_imputer',\n",
       "                                                  SimpleImputer(strategy='median'),\n",
       "                                                  [0, 4]),\n",
       "                                                 ('num_scaler',\n",
       "                                                  StandardScaler(), [0, 4])])),\n",
       "                ('model',\n",
       "                 RandomForestClassifier(n_estimators=10, random_state=125))])
In a Jupyter environment, please rerun this cell to show the HTML representation or trust the notebook.
On GitHub, the HTML representation is unable to render, please try loading this page with nbviewer.org.
" ], "text/plain": [ "Pipeline(steps=[('preprocessing',\n", " ColumnTransformer(transformers=[('encoder', OrdinalEncoder(),\n", " [1, 2, 3]),\n", " ('num_imputer',\n", " SimpleImputer(strategy='median'),\n", " [0, 4]),\n", " ('num_scaler',\n", " StandardScaler(), [0, 4])])),\n", " ('model',\n", " RandomForestClassifier(n_estimators=10, random_state=125))])" ] }, "execution_count": 3, "metadata": {}, "output_type": "execute_result" } ], "source": [ "from sklearn.compose import ColumnTransformer\n", "from sklearn.ensemble import RandomForestClassifier\n", "from sklearn.impute import SimpleImputer\n", "from sklearn.pipeline import Pipeline\n", "from sklearn.preprocessing import OrdinalEncoder, StandardScaler\n", "\n", "cat_col = [1,2,3]\n", "num_col = [0,4]\n", "\n", "transform = ColumnTransformer(\n", " [\n", " (\"encoder\", OrdinalEncoder(), cat_col),\n", " (\"num_imputer\", SimpleImputer(strategy=\"median\"), num_col),\n", " (\"num_scaler\", StandardScaler(), num_col),\n", " ]\n", ")\n", "pipe = Pipeline(\n", " steps=[\n", " (\"preprocessing\", transform),\n", " (\"model\", RandomForestClassifier(n_estimators=10, random_state=125)),\n", " ]\n", ")\n", "pipe.fit(X_train, y_train)" ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Accuracy: 90.0% F1: 0.85\n" ] } ], "source": [ "from sklearn.metrics import accuracy_score, f1_score\n", "\n", "predictions = pipe.predict(X_test)\n", "accuracy = accuracy_score(y_test, predictions)\n", "f1 = f1_score(y_test, predictions, average=\"macro\")\n", "\n", "print(\"Accuracy: \", str(round(accuracy, 2) * 100) + \"%\", \"F1: \", round(f1, 2))" ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [], "source": [ "# Write metrics to file\n", "with open(\"Results/metrics.txt\", \"w\") as outfile:\n", " outfile.write(f\"\\nAccuracy = {round(accuracy,2)}, F1 Score = {round(f1,2)}.\")" ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [ { "data": { "image/png": "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4YKCUx5EREQkGUcoiIiILEUrIPlGElb6+HIWFERERBYihBZC4tNCpR5vLiwoiIiILEUI6SMMXENBREREtoojFERERJYiTLCGwkpHKFhQEBERWYpWCygkroGw0jUUnPIgIiIiyThCQUREZCmc8iAiIiKphFYLIXHKw1ovG+WUBxEREUnGEQoiIiJL4ZQHERERSaYVgMI2CwpOeRAREZFkHKEgIiKyFCEASL0PhXWOULCgICIishChFRASpzwECwoiIqKnnNBC+ggFLxslIiIiGXzyySeoV68eHB0d0bZtW/z0008m/wwWFERERBYitMIkmzG2bNmCSZMmYebMmTh58iRefPFFhIWF4dq1ayY9NxYUREREliK0ptmMsGzZMowYMQIjR45EkyZNsHz5cgQEBGD16tUmPTWuoTCB8gUypSiRfL8SIjKCtljuCKoE7b1CuUOwauX5scRiR1P8nihFCQAgJydHr12lUkGlUum1FRcXIyEhAR988IFee/fu3XHkyBFpgTyABYUJ5ObmAgB+xi6ZIyF6ytySO4AqYrzcAVQNubm5cHd3N0vf1apVg5+fH36+aZrfE66urggICNBrmzt3LiIiIvTabt++DY1GA19fX712X19f3Lx50ySxlGNBYQI1a9ZEamoq1Go1FAqF3OEAKKtcAwICkJqaCjc3N7nDsVrMk2GYp8djjgxjjXkSQiA3Nxc1a9Y022c4OjriypUrKC42zaiaEKLC75sHRyfu9+C+DzteKhYUJmBnZ4fatWvLHcZDubm5Wc0/WmvGPBmGeXo85sgw1pYnc41M3M/R0RGOjo5m/5z71ahRA/b29hVGI9LT0yuMWkjFRZlEREQ2qlq1amjbti3279+v175//348//zzJv0sjlAQERHZsMmTJ+Of//wngoOD0bFjR3z22We4du0aRo8ebdLPYUFho1QqFebOnVvpnBoxT4Zinh6POTIM82R5AwcOxJ07d/Cvf/0LaWlpaNasGXbt2oU6deqY9HMUwlpvCk5ERERVBtdQEBERkWQsKIiIiEgyFhREREQkGQsKshkhISGYNGmS3GFYNebIMMyTYZgnuh8LCisyfPhwKBQKKBQKKJVK+Pr6IjQ0FOvXr4dWa9zDYJ7EiBEj0Lx58wp3ctu1axeUSiVOnDhh9hiqknv37sHT0xNeXl64d++e3OFYlZiYGN13WaFQ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1nB0dERwcPBDH8X9OMuWLUPz5s3h4uKCgIAAjB07Fnl5eRX227FjBxo1agRHR0eEhoYiNTVV7/3vvvsObdu2haOjI+rXr4958+ahtLTU6HiIyHgsKIgszMnJCSUlJbrXFy9exNatW/H111/rphxeeeUV3Lx5E7t27UJCQgLatGmDl156CXfv3gUAbN26FXPnzsX8+fNx4sQJ+Pv7P/bZB9OnT8fChQsxe/ZsnD17Fps2bYKvry+AsqIAAA4cOIC0tDRs27YNALB27VrMnDkT8+fPR1JSEhYsWIDZs2cjNjYWAJCfn49evXohKCgICQkJiIiIwNSpU43OiZ2dHVasWIHff/8dsbGxOHjwIN577z29fQoKCjB//nzExsbil19+QU5ODgYNGqR7f+/evRgyZAgmTJiAs2fP4tNPP0VMTIyuaCIiM5P51t9ENm3YsGGib9++utfHjh0T1atXFwMGDBBCCDF37lyhVCpFenq6bp8ffvhBuLm5icLCQr2+GjRoID799FMhhBAdO3YUo0eP1nu/Q4cOomXLlg/97JycHKFSqcTatWsfGueVK1cEAHHy5Em99oCAALFp0ya9tg8//FB07NhRCCHEp59+Kry8vER+fr7u/dWrVz+0r/s96lHX5bZu3SqqV6+ue13+OPSjR4/q2pKSkgQAcezYMSGEEC+++KJYsGCBXj+ff/658Pf3170GILZv3/7IzyWiJ8c1FERmtnPnTri6uqK0tBQlJSXo27cvVq5cqXu/Tp068Pb21r1OSEhAXl4eqlevrtfPvXv3cOnSJQBAUlISRo8erfd+x44dcejQoYfGkJSUhKKiIrz00ksGx52RkYHU1FSMGDEC4eHhuvbS0lLd+oykpCS0bNkSzs7OenEY69ChQ1iwYAHOnj2LnJwclJaWorCwEPn5+XBxcQEAODg4IDg4WHdM48aN4eHhgaSkJLRv3x4JCQk4fvy43oiERqNBYWEhCgoK9GIkItNjQUFkZl27dsXq1auhVCpRs2bNCosuy39hltNqtfD390dcXFyFvp700kknJyejj9FqtQDKpj06dOig9569vT0AQJjg2YJXr17FP/7xD4wePRoffvghvLy88PPPP2PEiBF6U0NA2WWfDypv02q1mDdvHl577bUK+zg6OkqOk4gqx4KCyMxcXFwQGBho8P5t2rTBzZs34eDggLp16z50nyZNmuDo0aMYOnSoru3o0aOP7LNhw4ZwcnLCDz/8gJEjR1Z4v1q1agDK/kdfztfXF7Vq1cLly5fxxhtvPLTfpk2b4vPPP8e9e/d0RUtlcTzMiRMnUFpaiqVLl8LOrmxZ19atWyvsV1paihMnTqB9+/YAgOTkZGRlZaFx48YAyvKWnJxsVK6JyHRYUBBZmZdffhkdO3ZEv379sHDhQgQFBeHPP//Erl270K9fPwQHB2PixIkYNmwYgoOD8cILL2Djxo34448/UL9+/Yf26ejoiPfffx/vvfceqlWrhk6dOiEjIwN//PEHRowYAR8fHzg5OWHPnj2oXbs2HB0d4e7ujoiICEyYMAFubm4ICwtDUVERTpw4gczMTEyePBmDBw/GzJkzMWLECMyaNQspKSlYsmSJUefboEEDlJaWYuXKlejduzd++eUXrFmzpsJ+SqUS48ePx4oVK6BUKvHOO+/gueee0xUYc+bMQa9evRAQEID+/fvDzs4Op0+fxpkzZxAZGWn8XwQRGYVXeRBZGYVCgV27dqFz585466230KhRIwwaNAgpKSm6qzIGDhyIOXPm4P3330fbtm1x9epVjBkzptJ+Z8+ejSlTpmDOnDlo0qQJBg4ciPT0dABl6xNWrFiBTz/9FDVr1kTfvn0BACNHjsR///tfxMTEoHnz5ujSpQtiYmJ0l5m6urriu+++w9mzZ9G6dWvMnDkTCxcuNOp8W7VqhWXLlmHhwoVo1qwZNm7ciKioqAr7OTs74/3338fgwYPRsWNHODk54YsvvtC936NHD+zcuRP79+9Hu3bt8Nxzz2HZsmWoU6eOUfEQ0ZNRCFNMghIREdFTjSMUREREJBkLCiIiIpKMBQURERFJxoKCiIiIJGNBQURERJKxoCAiIiLJWFAQERGRZCwoiIiISDIWFERERCQZCwoiIiKSjAUFERERSfb/ATtyGPrNamVlAAAAAElFTkSuQmCC", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "import matplotlib.pyplot as plt\n", "from sklearn.metrics import ConfusionMatrixDisplay, confusion_matrix\n", "\n", "predictions = pipe.predict(X_test)\n", "cm = confusion_matrix(y_test, predictions, labels=pipe.classes_)\n", "disp = ConfusionMatrixDisplay(confusion_matrix=cm, display_labels=pipe.classes_)\n", "disp.plot()\n", "plt.savefig(\"Results/model_results.png\", dpi=120)" ] }, { "cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [], "source": [ "import skops.io as sio\n", "\n", "sio.dump(pipe, \"Model/drug_pipeline.skops\")" ] }, { "cell_type": "code", "execution_count": 8, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
Pipeline(steps=[('preprocessing',\n",
       "                 ColumnTransformer(transformers=[('encoder', OrdinalEncoder(),\n",
       "                                                  [1, 2, 3]),\n",
       "                                                 ('num_imputer',\n",
       "                                                  SimpleImputer(strategy='median'),\n",
       "                                                  [0, 4]),\n",
       "                                                 ('num_scaler',\n",
       "                                                  StandardScaler(), [0, 4])])),\n",
       "                ('model',\n",
       "                 RandomForestClassifier(n_estimators=10, random_state=125))])
In a Jupyter environment, please rerun this cell to show the HTML representation or trust the notebook.
On GitHub, the HTML representation is unable to render, please try loading this page with nbviewer.org.
" ], "text/plain": [ "Pipeline(steps=[('preprocessing',\n", " ColumnTransformer(transformers=[('encoder', OrdinalEncoder(),\n", " [1, 2, 3]),\n", " ('num_imputer',\n", " SimpleImputer(strategy='median'),\n", " [0, 4]),\n", " ('num_scaler',\n", " StandardScaler(), [0, 4])])),\n", " ('model',\n", " RandomForestClassifier(n_estimators=10, random_state=125))])" ] }, "execution_count": 8, "metadata": {}, "output_type": "execute_result" } ], "source": [ "sio.load(\"Model/drug_pipeline.skops\", trusted=True)" ] } ], "metadata": { "kernelspec": { "display_name": "PY312", "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.9.18" } }, "nbformat": 4, "nbformat_minor": 2 }