{ "nbformat": 4, "nbformat_minor": 0, "metadata": { "colab": { "provenance": [] }, "kernelspec": { "name": "python3", "display_name": "Python 3" }, "language_info": { "name": "python" } }, "cells": [ { "cell_type": "markdown", "source": [ "Importing all the essential stuff" ], "metadata": { "id": "GY0lAyEVygnv" } }, { "cell_type": "code", "execution_count": null, "metadata": { "id": "OT7h2znxcoLp" }, "outputs": [], "source": [ "import pandas as pd\n", "from sklearn.model_selection import train_test_split\n", "from sklearn.linear_model import LogisticRegression\n", "from sklearn.metrics import accuracy_score\n", "\n", "import matplotlib.pyplot as plt\n", "import seaborn as sns\n", "from sklearn.metrics import confusion_matrix\n", "from sklearn.metrics import classification_report" ] }, { "cell_type": "markdown", "source": [ "Reading and acquiring the dataset" ], "metadata": { "id": "9o1rKoKHymIw" } }, { "cell_type": "code", "source": [ "data=pd.read_csv('HeartDisease.csv')" ], "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "id": "8V_mP798d15d", "outputId": "aeebfaf6-d62b-4bc0-eaa6-bd55fdc6333c", "collapsed": true }, "execution_count": null, "outputs": [ { "output_type": "stream", "name": "stdout", "text": [ " male age currentSmoker cigsPerDay BPMeds prevalentStroke \\\n", "0 1 39 0 0 0 0 \n", "1 0 46 0 0 0 0 \n", "2 1 48 1 20 0 0 \n", "3 0 61 1 30 0 0 \n", "4 0 46 1 23 0 0 \n", "... ... ... ... ... ... ... \n", "4132 1 68 0 0 0 0 \n", "4133 1 50 1 1 0 0 \n", "4134 1 51 1 43 0 0 \n", "4135 0 44 1 15 0 0 \n", "4136 0 52 0 0 0 0 \n", "\n", " prevalentHyp diabetes BMI TenYearCHD \n", "0 0 0 26.97 0 \n", "1 0 0 28.73 0 \n", "2 0 0 25.34 0 \n", "3 1 0 28.58 1 \n", "4 0 0 23.10 0 \n", "... ... ... ... ... \n", "4132 1 0 23.14 1 \n", "4133 1 0 25.97 1 \n", "4134 0 0 19.71 0 \n", "4135 0 0 19.16 0 \n", "4136 0 0 21.47 0 \n", "\n", "[4137 rows x 10 columns]\n", "[]\n" ] } ] }, { "cell_type": "markdown", "source": [ "Getting pandas to understand the data" ], "metadata": { "id": "fFJpTqnZy54q" } }, { "cell_type": "code", "source": [ "df = pd.DataFrame(data)" ], "metadata": { "id": "_uL_UiU9eSqS" }, "execution_count": null, "outputs": [] }, { "cell_type": "markdown", "source": [ "Determining the Predicting column" ], "metadata": { "id": "9L7gSh_6zrP1" } }, { "cell_type": "code", "source": [ "X=df.drop('TenYearCHD',axis=1)\n", "y=df['TenYearCHD']" ], "metadata": { "id": "2tt1BYjEed0h" }, "execution_count": null, "outputs": [] }, { "cell_type": "markdown", "source": [ "Spliting the dataset into Training and Testing datasets" ], "metadata": { "id": "2PvD1TRizwyr" } }, { "cell_type": "code", "source": [ "X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)" ], "metadata": { "id": "H-cuKGVZe2y0" }, "execution_count": null, "outputs": [] }, { "cell_type": "markdown", "source": [ "Determining the Model" ], "metadata": { "id": "T8SwT0C0z3z6" } }, { "cell_type": "code", "source": [ "model = LogisticRegression(random_state=42)\n", "model.fit(X_train, y_train)" ], "metadata": { "colab": { "base_uri": "https://localhost:8080/", "height": 234 }, "id": "ofqGp7tjlu5P", "outputId": "5071185d-e3aa-4fcb-b0b4-18104e2d313c", "collapsed": true }, "execution_count": null, "outputs": [ { "output_type": "stream", "name": "stderr", "text": [ "/usr/local/lib/python3.10/dist-packages/sklearn/linear_model/_logistic.py:458: ConvergenceWarning: lbfgs failed to converge (status=1):\n", "STOP: TOTAL NO. of ITERATIONS REACHED LIMIT.\n", "\n", "Increase the number of iterations (max_iter) or scale the data as shown in:\n", " https://scikit-learn.org/stable/modules/preprocessing.html\n", "Please also refer to the documentation for alternative solver options:\n", " https://scikit-learn.org/stable/modules/linear_model.html#logistic-regression\n", " n_iter_i = _check_optimize_result(\n" ] }, { "output_type": "execute_result", "data": { "text/plain": [ "LogisticRegression(random_state=42)" ], "text/html": [ "
LogisticRegression(random_state=42)
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.
" ] }, "metadata": {}, "execution_count": 6 } ] }, { "cell_type": "markdown", "source": [ "Testing the model" ], "metadata": { "id": "qTjHM0Liz9MJ" } }, { "cell_type": "code", "source": [ "predictions = model.predict(X_test)\n", "print(predictions)" ], "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "collapsed": true, "id": "Y8UoF5H0kdTc", "outputId": "b39aaa8d-a8b5-4a14-9afe-0aec39326633" }, "execution_count": null, "outputs": [ { "output_type": "stream", "name": "stdout", "text": [ "[0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0\n", " 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0\n", " 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0\n", " 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0\n", " 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0\n", " 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0\n", " 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0\n", " 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0\n", " 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0\n", " 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0\n", " 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0\n", " 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0\n", " 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0\n", " 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0\n", " 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0\n", " 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0\n", " 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0\n", " 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0\n", " 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0\n", " 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0\n", " 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0\n", " 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0\n", " 0 0 0 0 0 0 0 0 0 0 0 0 0 0]\n" ] } ] }, { "cell_type": "markdown", "source": [ "Evaluating the model" ], "metadata": { "id": "1I7fw8Ce0CKD" } }, { "cell_type": "code", "source": [ "accuracy = accuracy_score(y_test, predictions)\n", "print(f'Model Accuracy: {accuracy}')" ], "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "id": "T3J0Mar3kqm3", "outputId": "8f0f6fda-7b1d-4d42-eafc-f22dea600f39" }, "execution_count": null, "outputs": [ { "output_type": "stream", "name": "stdout", "text": [ "Model Accuracy: 0.8405797101449275\n" ] } ] }, { "cell_type": "markdown", "source": [ "Confusion Matrix of the model" ], "metadata": { "id": "5QeMo5EV0GYt" } }, { "cell_type": "code", "source": [ "cm = confusion_matrix(y_test, predictions)" ], "metadata": { "id": "I7379CUrlW0n" }, "execution_count": null, "outputs": [] }, { "cell_type": "code", "source": [ "plt.figure(figsize=(6, 4))\n", "sns.heatmap(cm, annot=True, fmt=\"d\", cmap=\"Blues\", cbar=False)\n", "plt.xlabel('Predicted')\n", "plt.ylabel('Actual')\n", "plt.title('Confusion Matrix')\n", "plt.show()" ], "metadata": { "colab": { "base_uri": "https://localhost:8080/", "height": 410 }, "id": "i5ix5ThYlk_f", "outputId": "a38c7ab9-0b97-47ab-8ec6-c3746eec5a82" }, "execution_count": null, "outputs": [ { "output_type": "display_data", "data": { "text/plain": [ "
" ], "image/png": "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L7p4OgC5bDablixZoi5durh6FBQjzkDALV26dEmbN29W27ZtHcs8PDzUtm1bbdiwwYWTAQAkAgJuKiUlRdnZ2apQoYLT8goVKig5OdlFUwEAchEQAADAGAEBt1S2bFl5enrq+PHjTsuPHz+uihUrumgqAEAuAgJuydvbW40bN9aaNWscy3JycrRmzRo1a9bMhZMBACSplKsHAPITFxenmJgY3Xbbbbr99ts1adIkpaenq1evXq4eDSjx0tLStHfvXsfjAwcOKCkpSWXKlFHlypVdOBmKC7dxwq1NnTpVr776qpKTk9WgQQNNnjxZTZs2dfVYQIm3bt06tWnTJs/ymJgYzZ49u/gHQrEjIAAAgDGugQAAAMYICAAAYIyAAAAAxggIAABgjIAAAADGCAgAAGCMgAAAAMYICAAAYIyAAFBkYmNj1aVLF8fj1q1b6/nnny/2OdatWyebzaazZ88W+76BPysCAiiBYmNjZbPZZLPZ5O3trerVq2vkyJG6fPlyke73o48+0qhRowq0Ln/pA+6NH6YFlFD33nuvZs2apczMTH3yySd69tln5eXlpSFDhjitd+nSJXl7exfKPsuUKVMo2wHgepyBAEoou92uihUrKjw8XE8//bTatm2rZcuWOT52GDNmjMLCwhQZGSlJOnz4sLp3767g4GCVKVNG0dHROnjwoGN72dnZiouLU3BwsG666Sa98MILuvJH7Vz5EUZmZqYGDx6sSpUqyW63q3r16po5c6YOHjzo+EFNISEhstlsio2NlfTrj3WPj49XlSpV5Ovrq/r162vRokVO+/nkk09Us2ZN+fr6qk2bNk5zAigcBAQASZKvr68uXbokSVqzZo12796t1atXa8WKFcrKylL79u0VEBCg//znP/r666/l7++ve++91/Ga8ePHa/bs2XrnnXe0fv16nT59WkuWLLnmPh955BEtWLBAkydP1q5duzRjxgz5+/urUqVKWrx4sSRp9+7dOnbsmF577TVJUnx8vN59911Nnz5dO3bsUP/+/fX3v/9dX331laRfQ6dr167q3LmzkpKS1Lt3b7344otF9bYBJZcFoMSJiYmxoqOjLcuyrJycHGv16tWW3W63Bg4caMXExFgVKlSwMjMzHevPnTvXioyMtHJychzLMjMzLV9fX+vzzz+3LMuyQkNDrYSEBMfzWVlZ1i233OLYj2VZVlRUlNWvXz/Lsixr9+7dliRr9erVV53xyy+/tCRZZ86ccSzLyMiwSpcubX3zzTdO6z722GPWww8/bFmWZQ0ZMsSqU6eO0/ODBw/Osy0AN4ZrIIASasWKFfL391dWVpZycnLUs2dPDR8+XM8++6zq1avndN3D1q1btXfvXgUEBDhtIyMjQ/v27dO5c+d07NgxNW3a1PFcqVKldNttt+X5GCNXUlKSPD09FRUVVeCZ9+7dqwsXLqhdu3ZOyy9duqSGDRtKknbt2uU0hyQ1a9aswPsAUDAEBFBCtWnTRm+88Ya8vb0VFhamUqX+/48DPz8/p3XT0tLUuHFjzZs3L892ypUrd1379/X1NX5NWlqaJGnlypW6+eabnZ6z2+3XNQeA60NAACWUn5+fqlevXqB1GzVqpIULF6p8+fIKDAy86jqhoaH67rvv1KpVK0nS5cuXtXnzZjVq1Oiq69erV085OTn66quv1LZt2zzP554Byc7OdiyrU6eO7Ha7Dh06lO+Zi9q1a2vZsmVOy7799tvfP0gARriIEsDv+tvf/qayZcsqOjpa//nPf3TgwAGtW7dOffv21ZEjRyRJ/fr10yuvvKKlS5fqp59+0jPPPHPN73CIiIhQTEyMHn30US1dutSxzQ8++ECSFB4eLpvNphUrVujkyZNKS0tTQECABg4cqP79+2vOnDnat2+ftmzZoilTpmjOnDmSpKeeekp79uzRoEGDtHv3bs2fP1+zZ88u6rcIKHEICAC/q3Tp0kpMTFTlypXVtWtX1a5dW4899pgyMjIcZyQGDBigf/zjH4qJiVGzZs0UEBCgBx544JrbfeONN9StWzc988wzqlWrlh5//HGlp6dLkm6++WaNGDFCL774oipUqKDnnntOkjRq1Ci99NJLio+PV+3atXXvvfdq5cqVqlKliiSpcuXKWrx4sZYuXar69etr+vTpGjt2bBG+O0DJZLPyu8IJAAAgH5yBAAAAxggIAABgjIAAAADGCAgAAGCMgAAAAMYICAAAYIyAAAAAxggIAABgjIAAAADGCAgAAGCMgAAAAMb+DwQEqoQD2+WqAAAAAElFTkSuQmCC\n" }, "metadata": {} } ] } ] }