{ "cells": [ { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [], "source": [ "import pandas as pd\n", "import numpy as np\n", "import matplotlib.pyplot as plt\n", "%matplotlib inline\n", "from matplotlib import style\n", "import warnings\n", "warnings.filterwarnings(\"ignore\")" ] }, { "cell_type": "code", "execution_count": 2, "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", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
abdominal_painabnormal_menstruationacidityacute_liver_failurealtered_sensoriumanxietyback_painbelly_painblackheadsbladder_discomfort...weakness_in_limbsweakness_of_one_body_sideweight_gainweight_lossyellow_crust_oozeyellow_urineyellowing_of_eyesyellowish_skinprognosissymptoms
250100000000...00010000Hyperthyroidism11
\n", "

1 rows × 136 columns

\n", "
" ], "text/plain": [ " abdominal_pain abnormal_menstruation acidity acute_liver_failure \\\n", "25 0 1 0 0 \n", "\n", " altered_sensorium anxiety back_pain belly_pain blackheads \\\n", "25 0 0 0 0 0 \n", "\n", " bladder_discomfort ... weakness_in_limbs weakness_of_one_body_side \\\n", "25 0 ... 0 0 \n", "\n", " weight_gain weight_loss yellow_crust_ooze yellow_urine \\\n", "25 0 1 0 0 \n", "\n", " yellowing_of_eyes yellowish_skin prognosis symptoms \n", "25 0 0 Hyperthyroidism 11 \n", "\n", "[1 rows x 136 columns]" ] }, "execution_count": 2, "metadata": {}, "output_type": "execute_result" } ], "source": [ "data=pd.read_csv(\"files/Training.csv\")\n", "data.head()\n", "\n", "test = pd.read_csv(\"files/Testing.csv\", index_col=[0])\n", "test.sample()" ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "(306, 135)" ] }, "execution_count": 3, "metadata": {}, "output_type": "execute_result" } ], "source": [ "data.shape" ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [], "source": [ "data[\"prognosis\"] = data[\"prognosis\"].apply(lambda x: x.replace(\"Paralysis (brain hemorrhageH\", \"Paralysis (brain hemorrhage)\"))" ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "prognosis\n" ] } ], "source": [ "new_data = data.copy()\n", "for i in new_data.columns :\n", " if new_data[i].dtype=='object':\n", " print(i)" ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "Dengue 10\n", "Hepatitis D 10\n", "Chicken pox 10\n", "Migraine 10\n", "Diabetes 9\n", "Hypoglycemia 9\n", "Hepatitis B 9\n", "Hepatitis A 9\n", "Jaundice 9\n", "Hyperthyroidism 9\n", "Hepatitis E 9\n", "Common Cold 9\n", "Pneumonia 9\n", "Tuberculosis 9\n", "Typhoid 9\n", "Chronic cholestasis 8\n", "Malaria 8\n", "Hypothyroidism 8\n", "Alcoholic hepatitis 8\n", "Varicose veins 8\n", "Peptic ulcer disease 7\n", "Paroxysmal Positional Vertigo 7\n", "Osteoarthritis 7\n", "Psoriasis 7\n", "Hepatitis C 7\n", "GERD 7\n", "Bronchial Asthma 7\n", "Hypertension 6\n", "Cervical spondylosis 6\n", "Impetigo 6\n", "Arthritis 6\n", "Drug Reaction 6\n", "Dimorphic hemorrhoids(piles) 6\n", "Urinary tract infection 5\n", "Allergy 5\n", "Paralysis (brain hemorrhage) 5\n", "Acne 5\n", "Fungal infection 5\n", "Gastroenteritis 5\n", "Heart attack 5\n", "AIDS 5\n", "Covid 2\n", "Name: prognosis, dtype: int64" ] }, "execution_count": 6, "metadata": {}, "output_type": "execute_result" } ], "source": [ "new_data[\"prognosis\"].value_counts()" ] }, { "cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array(['AIDS', 'Acne', 'Alcoholic hepatitis', 'Allergy', 'Arthritis',\n", " 'Bronchial Asthma', 'Cervical spondylosis', 'Chicken pox',\n", " 'Chronic cholestasis', 'Common Cold', 'Covid', 'Dengue',\n", " 'Diabetes ', 'Dimorphic hemorrhoids(piles)', 'Drug Reaction',\n", " 'Fungal infection', 'GERD', 'Gastroenteritis', 'Heart attack',\n", " 'Hepatitis A', 'Hepatitis B', 'Hepatitis C', 'Hepatitis D',\n", " 'Hepatitis E', 'Hypertension ', 'Hyperthyroidism', 'Hypoglycemia',\n", " 'Hypothyroidism', 'Impetigo', 'Jaundice', 'Malaria', 'Migraine',\n", " 'Osteoarthritis', 'Paralysis (brain hemorrhage)',\n", " 'Paroxysmal Positional Vertigo', 'Peptic ulcer disease',\n", " 'Pneumonia', 'Psoriasis', 'Tuberculosis', 'Typhoid',\n", " 'Urinary tract infection', 'Varicose veins'], dtype=object)" ] }, "execution_count": 7, "metadata": {}, "output_type": "execute_result" } ], "source": [ "dis = new_data.prognosis.unique()\n", "dis" ] }, { "cell_type": "code", "execution_count": 8, "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", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
abdominal_painabnormal_menstruationacidityacute_liver_failurealtered_sensoriumanxietyback_painbelly_painblackheadsbladder_discomfort...weakness_in_limbsweakness_of_one_body_sideweight_gainweight_lossyellow_crust_oozeyellow_urineyellowing_of_eyesyellowish_skinprognosissymptoms
131000000000...00000001Alcoholic hepatitis6
\n", "

1 rows × 136 columns

\n", "
" ], "text/plain": [ " abdominal_pain abnormal_menstruation acidity acute_liver_failure \\\n", "13 1 0 0 0 \n", "\n", " altered_sensorium anxiety back_pain belly_pain blackheads \\\n", "13 0 0 0 0 0 \n", "\n", " bladder_discomfort ... weakness_in_limbs weakness_of_one_body_side \\\n", "13 0 ... 0 0 \n", "\n", " weight_gain weight_loss yellow_crust_ooze yellow_urine \\\n", "13 0 0 0 0 \n", "\n", " yellowing_of_eyes yellowish_skin prognosis symptoms \n", "13 0 1 Alcoholic hepatitis 6 \n", "\n", "[1 rows x 136 columns]" ] }, "execution_count": 8, "metadata": {}, "output_type": "execute_result" } ], "source": [ "col = new_data.columns\n", "new_data[\"symptoms\"] = new_data[col].sum(axis=1)\n", "new_data.sample()" ] }, { "cell_type": "code", "execution_count": 9, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "(306, 136)" ] }, "execution_count": 9, "metadata": {}, "output_type": "execute_result" } ], "source": [ "new_data.shape" ] }, { "cell_type": "code", "execution_count": 10, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "{'AIDS': 0, 'Acne': 1, 'Alcoholic hepatitis': 2, 'Allergy': 3, 'Arthritis': 4, 'Bronchial Asthma': 5, 'Cervical spondylosis': 6, 'Chicken pox': 7, 'Chronic cholestasis': 8, 'Common Cold': 9, 'Covid': 10, 'Dengue': 11, 'Diabetes ': 12, 'Dimorphic hemorrhoids(piles)': 13, 'Drug Reaction': 14, 'Fungal infection': 15, 'GERD': 16, 'Gastroenteritis': 17, 'Heart attack': 18, 'Hepatitis A': 19, 'Hepatitis B': 20, 'Hepatitis C': 21, 'Hepatitis D': 22, 'Hepatitis E': 23, 'Hypertension ': 24, 'Hyperthyroidism': 25, 'Hypoglycemia': 26, 'Hypothyroidism': 27, 'Impetigo': 28, 'Jaundice': 29, 'Malaria': 30, 'Migraine': 31, 'Osteoarthritis': 32, 'Paralysis (brain hemorrhage)': 33, 'Paroxysmal Positional Vertigo': 34, 'Peptic ulcer disease': 35, 'Pneumonia': 36, 'Psoriasis': 37, 'Tuberculosis': 38, 'Typhoid': 39, 'Urinary tract infection': 40, 'Varicose veins': 41}\n" ] } ], "source": [ "num=[i for i in range(len(dis))]\n", "dic=dict(zip(dis,num))\n", "print(dic)" ] }, { "cell_type": "code", "execution_count": 11, "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", " \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", "
abdominal_painabnormal_menstruationacidityacute_liver_failurealtered_sensoriumanxietyback_painbelly_painblackheadsbladder_discomfort...weakness_in_limbsweakness_of_one_body_sideweight_gainweight_lossyellow_crust_oozeyellow_urineyellowing_of_eyesyellowish_skinprognosissymptoms
00000000000...0000000004
10000000000...0000000003
20000000000...0000000003
\n", "

3 rows × 136 columns

\n", "
" ], "text/plain": [ " abdominal_pain abnormal_menstruation acidity acute_liver_failure \\\n", "0 0 0 0 0 \n", "1 0 0 0 0 \n", "2 0 0 0 0 \n", "\n", " altered_sensorium anxiety back_pain belly_pain blackheads \\\n", "0 0 0 0 0 0 \n", "1 0 0 0 0 0 \n", "2 0 0 0 0 0 \n", "\n", " bladder_discomfort ... weakness_in_limbs weakness_of_one_body_side \\\n", "0 0 ... 0 0 \n", "1 0 ... 0 0 \n", "2 0 ... 0 0 \n", "\n", " weight_gain weight_loss yellow_crust_ooze yellow_urine \\\n", "0 0 0 0 0 \n", "1 0 0 0 0 \n", "2 0 0 0 0 \n", "\n", " yellowing_of_eyes yellowish_skin prognosis symptoms \n", "0 0 0 0 4 \n", "1 0 0 0 3 \n", "2 0 0 0 3 \n", "\n", "[3 rows x 136 columns]" ] }, "execution_count": 11, "metadata": {}, "output_type": "execute_result" } ], "source": [ "new_data.replace({'prognosis':dic}, inplace=True)\n", "test.replace({'prognosis':dic}, inplace=True)\n", "new_data.head(3)" ] }, { "cell_type": "code", "execution_count": 12, "metadata": {}, "outputs": [], "source": [ "import seaborn as sns" ] }, { "cell_type": "code", "execution_count": 13, "metadata": {}, "outputs": [], "source": [ "X=new_data.drop(columns=\"prognosis\")\n", "y=new_data.prognosis" ] }, { "cell_type": "code", "execution_count": 14, "metadata": {}, "outputs": [], "source": [ "from sklearn.model_selection import train_test_split" ] }, { "cell_type": "code", "execution_count": 15, "metadata": {}, "outputs": [], "source": [ "X_train, X_test , y_train, y_test = X, test.drop(\"prognosis\", axis=1), y, test.prognosis" ] }, { "cell_type": "code", "execution_count": 16, "metadata": {}, "outputs": [], "source": [ "import plotly.graph_objects as go" ] }, { "cell_type": "code", "execution_count": 17, "metadata": {}, "outputs": [ { "data": { "application/vnd.plotly.v1+json": { "config": { "plotlyServerURL": "https://plot.ly" }, "data": [ { "orientation": "h", "type": "bar", "x": [ 10, 10, 10, 10, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 8, 8, 8, 8, 8, 7, 7, 7, 7, 7, 7, 7, 6, 6, 6, 6, 6, 6, 5, 5, 5, 5, 5, 5, 5, 5, 2 ], "y": [ 11, 22, 7, 31, 12, 26, 20, 19, 29, 25, 23, 9, 36, 38, 39, 8, 30, 27, 2, 41, 35, 34, 32, 37, 21, 16, 5, 24, 6, 28, 4, 14, 13, 40, 3, 33, 1, 15, 17, 18, 0, 10 ] } ], "layout": { "height": 1000, "template": { "data": { "bar": [ { "error_x": { "color": "#2a3f5f" }, "error_y": { "color": "#2a3f5f" }, "marker": { "line": { "color": "#E5ECF6", "width": 0.5 }, "pattern": { "fillmode": "overlay", "size": 10, "solidity": 0.2 } }, "type": "bar" } ], "barpolar": [ { "marker": { "line": { "color": "#E5ECF6", "width": 0.5 }, "pattern": { "fillmode": "overlay", "size": 10, "solidity": 0.2 } }, "type": "barpolar" } ], "carpet": [ { "aaxis": { "endlinecolor": "#2a3f5f", "gridcolor": "white", "linecolor": "white", "minorgridcolor": "white", "startlinecolor": "#2a3f5f" }, "baxis": { "endlinecolor": "#2a3f5f", "gridcolor": "white", "linecolor": "white", "minorgridcolor": "white", "startlinecolor": "#2a3f5f" }, "type": "carpet" } ], "choropleth": [ { "colorbar": { "outlinewidth": 0, "ticks": "" }, "type": "choropleth" } ], "contour": [ { "colorbar": { "outlinewidth": 0, "ticks": "" }, "colorscale": [ [ 0, "#0d0887" ], [ 0.1111111111111111, "#46039f" ], [ 0.2222222222222222, "#7201a8" ], [ 0.3333333333333333, "#9c179e" ], [ 0.4444444444444444, "#bd3786" ], [ 0.5555555555555556, "#d8576b" ], [ 0.6666666666666666, "#ed7953" ], [ 0.7777777777777778, "#fb9f3a" ], [ 0.8888888888888888, "#fdca26" ], [ 1, "#f0f921" ] ], "type": "contour" } ], "contourcarpet": [ { "colorbar": { "outlinewidth": 0, "ticks": "" }, "type": "contourcarpet" } ], "heatmap": [ { "colorbar": { "outlinewidth": 0, "ticks": "" }, "colorscale": [ [ 0, "#0d0887" ], [ 0.1111111111111111, "#46039f" ], [ 0.2222222222222222, "#7201a8" ], [ 0.3333333333333333, "#9c179e" ], [ 0.4444444444444444, "#bd3786" ], [ 0.5555555555555556, "#d8576b" ], [ 0.6666666666666666, "#ed7953" ], [ 0.7777777777777778, "#fb9f3a" ], [ 0.8888888888888888, "#fdca26" ], [ 1, "#f0f921" ] ], "type": "heatmap" } ], "heatmapgl": [ { "colorbar": { "outlinewidth": 0, "ticks": "" }, "colorscale": [ [ 0, "#0d0887" ], [ 0.1111111111111111, "#46039f" ], [ 0.2222222222222222, "#7201a8" ], [ 0.3333333333333333, "#9c179e" ], [ 0.4444444444444444, "#bd3786" ], [ 0.5555555555555556, "#d8576b" ], [ 0.6666666666666666, "#ed7953" ], [ 0.7777777777777778, "#fb9f3a" ], [ 0.8888888888888888, "#fdca26" ], [ 1, "#f0f921" ] ], "type": "heatmapgl" } ], "histogram": [ { "marker": { "pattern": { "fillmode": "overlay", "size": 10, "solidity": 0.2 } }, "type": "histogram" } ], "histogram2d": [ { "colorbar": { "outlinewidth": 0, "ticks": "" }, "colorscale": [ [ 0, "#0d0887" ], [ 0.1111111111111111, "#46039f" ], [ 0.2222222222222222, "#7201a8" ], [ 0.3333333333333333, "#9c179e" ], [ 0.4444444444444444, "#bd3786" ], [ 0.5555555555555556, "#d8576b" ], [ 0.6666666666666666, "#ed7953" ], [ 0.7777777777777778, "#fb9f3a" ], [ 0.8888888888888888, "#fdca26" ], [ 1, "#f0f921" ] ], "type": "histogram2d" } ], "histogram2dcontour": [ { "colorbar": { "outlinewidth": 0, "ticks": "" }, "colorscale": [ [ 0, "#0d0887" ], [ 0.1111111111111111, "#46039f" ], [ 0.2222222222222222, "#7201a8" ], [ 0.3333333333333333, "#9c179e" ], [ 0.4444444444444444, "#bd3786" ], [ 0.5555555555555556, "#d8576b" ], [ 0.6666666666666666, "#ed7953" ], [ 0.7777777777777778, "#fb9f3a" ], [ 0.8888888888888888, "#fdca26" ], [ 1, "#f0f921" ] ], "type": "histogram2dcontour" } ], "mesh3d": [ { "colorbar": { "outlinewidth": 0, "ticks": "" }, "type": "mesh3d" } ], "parcoords": [ { "line": { "colorbar": { "outlinewidth": 0, "ticks": "" } }, "type": "parcoords" } ], "pie": [ { "automargin": true, "type": "pie" } ], "scatter": [ { "fillpattern": { "fillmode": "overlay", "size": 10, "solidity": 0.2 }, "type": "scatter" } ], "scatter3d": [ { "line": { "colorbar": { "outlinewidth": 0, "ticks": "" } }, "marker": { "colorbar": { "outlinewidth": 0, "ticks": "" } }, "type": "scatter3d" } ], "scattercarpet": [ { "marker": { "colorbar": { "outlinewidth": 0, "ticks": "" } }, "type": "scattercarpet" } ], "scattergeo": [ { "marker": { "colorbar": { "outlinewidth": 0, "ticks": "" } }, "type": "scattergeo" } ], "scattergl": [ { "marker": { "colorbar": { "outlinewidth": 0, "ticks": "" } }, "type": "scattergl" } ], "scattermapbox": [ { "marker": { "colorbar": { "outlinewidth": 0, "ticks": "" } }, "type": "scattermapbox" } ], "scatterpolar": [ { "marker": { "colorbar": { "outlinewidth": 0, "ticks": "" } }, "type": "scatterpolar" } ], "scatterpolargl": [ { "marker": { "colorbar": { "outlinewidth": 0, "ticks": "" } }, "type": "scatterpolargl" } ], "scatterternary": [ { "marker": { "colorbar": { "outlinewidth": 0, "ticks": "" } }, "type": "scatterternary" } ], "surface": [ { "colorbar": { "outlinewidth": 0, "ticks": "" }, "colorscale": [ [ 0, "#0d0887" ], [ 0.1111111111111111, "#46039f" ], [ 0.2222222222222222, "#7201a8" ], [ 0.3333333333333333, "#9c179e" ], [ 0.4444444444444444, "#bd3786" ], [ 0.5555555555555556, "#d8576b" ], [ 0.6666666666666666, "#ed7953" ], [ 0.7777777777777778, "#fb9f3a" ], [ 0.8888888888888888, "#fdca26" ], [ 1, "#f0f921" ] ], "type": "surface" } ], "table": [ { "cells": { "fill": { "color": "#EBF0F8" }, "line": { "color": "white" } }, "header": { "fill": { "color": "#C8D4E3" }, "line": { "color": "white" } }, "type": "table" } ] }, "layout": { "font": { "family": "Franklin Gothic", "size": 12 } } }, "title": { "text": "Types of Disease" }, "width": 900 } } }, "metadata": {}, "output_type": "display_data" } ], "source": [ "temp=dict(layout=go.Layout(font=dict(family=\"Franklin Gothic\", size=12)))\n", "disease_count = new_data[\"prognosis\"].value_counts().reset_index()\n", "fig = go.Figure()\n", "fig.add_trace(go.Bar(\n", " y=disease_count[\"index\"],\n", " x=disease_count[\"prognosis\"],\n", " orientation='h'\n", "))\n", "\n", "fig.update_layout( template=temp, title=\"Types of Disease\", height=1000, width=900)" ] }, { "cell_type": "code", "execution_count": 18, "metadata": {}, "outputs": [], "source": [ "from sklearn.metrics import confusion_matrix\n", "from sklearn.metrics import classification_report\n" ] }, { "cell_type": "code", "execution_count": 19, "metadata": {}, "outputs": [], "source": [ "from sklearn.ensemble import RandomForestClassifier\n", "model = RandomForestClassifier(n_estimators=100)\n", "model.fit(X_train, y_train)\n", "y_pred = model.predict(X_test)" ] }, { "cell_type": "code", "execution_count": 20, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "(42, 135)" ] }, "execution_count": 20, "metadata": {}, "output_type": "execute_result" } ], "source": [ "X_test.shape" ] }, { "cell_type": "code", "execution_count": 21, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 21, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "conf_matrix = confusion_matrix(y_test,y_pred) \n", "df_conf = pd.DataFrame(conf_matrix)\n", "sns.heatmap(df_conf)" ] }, { "cell_type": "code", "execution_count": 22, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Classification Report:\n", " precision recall f1-score support\n", "\n", " 0 1.00 1.00 1.00 1\n", " 1 1.00 1.00 1.00 1\n", " 2 1.00 1.00 1.00 1\n", " 3 1.00 1.00 1.00 1\n", " 4 1.00 1.00 1.00 1\n", " 5 1.00 1.00 1.00 1\n", " 6 1.00 1.00 1.00 1\n", " 7 1.00 1.00 1.00 1\n", " 8 1.00 1.00 1.00 1\n", " 9 1.00 1.00 1.00 1\n", " 10 1.00 1.00 1.00 1\n", " 11 1.00 1.00 1.00 1\n", " 12 1.00 1.00 1.00 1\n", " 13 1.00 1.00 1.00 1\n", " 14 1.00 1.00 1.00 1\n", " 15 1.00 1.00 1.00 1\n", " 16 1.00 1.00 1.00 1\n", " 17 1.00 1.00 1.00 1\n", " 18 1.00 1.00 1.00 1\n", " 19 1.00 1.00 1.00 1\n", " 20 1.00 1.00 1.00 1\n", " 21 1.00 1.00 1.00 1\n", " 22 1.00 1.00 1.00 1\n", " 23 1.00 1.00 1.00 1\n", " 24 1.00 1.00 1.00 1\n", " 25 1.00 1.00 1.00 1\n", " 26 1.00 1.00 1.00 1\n", " 27 1.00 1.00 1.00 1\n", " 28 1.00 1.00 1.00 1\n", " 29 1.00 1.00 1.00 1\n", " 30 1.00 1.00 1.00 1\n", " 31 1.00 1.00 1.00 1\n", " 32 1.00 1.00 1.00 1\n", " 33 1.00 1.00 1.00 1\n", " 34 1.00 1.00 1.00 1\n", " 35 1.00 1.00 1.00 1\n", " 36 1.00 1.00 1.00 1\n", " 37 1.00 1.00 1.00 1\n", " 38 1.00 1.00 1.00 1\n", " 39 1.00 1.00 1.00 1\n", " 40 1.00 1.00 1.00 1\n", " 41 1.00 1.00 1.00 1\n", "\n", " accuracy 1.00 42\n", " macro avg 1.00 1.00 1.00 42\n", "weighted avg 1.00 1.00 1.00 42\n", "\n" ] } ], "source": [ "print(\"Classification Report:\\n\",classification_report(y_test, y_pred))" ] }, { "cell_type": "code", "execution_count": 35, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "3" ] }, "execution_count": 35, "metadata": {}, "output_type": "execute_result" } ], "source": [ "x = np.random.randint(0,2,135)\n", "x[-1]=6\n", "disease = model.predict([x])\n", "y[disease[0]]" ] }, { "cell_type": "code", "execution_count": 25, "metadata": {}, "outputs": [], "source": [ "def showdis(i):\n", " for key,val in dic.items():\n", " if val==i:\n", " print(key)" ] }, { "cell_type": "code", "execution_count": 26, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Acne\n" ] } ], "source": [ "showdis(y[disease[0]])" ] }, { "cell_type": "code", "execution_count": 27, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "['model.joblib']" ] }, "execution_count": 27, "metadata": {}, "output_type": "execute_result" } ], "source": [ "from joblib import dump\n", "dump(model, \"model.joblib\")" ] }, { "cell_type": "code", "execution_count": 28, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "['disease.joblib']" ] }, "execution_count": 28, "metadata": {}, "output_type": "execute_result" } ], "source": [ "from joblib import dump\n", "dump(dic, \"disease.joblib\")" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] } ], "metadata": { "kernelspec": { "display_name": "Python 3", "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.10.7" }, "orig_nbformat": 4, "vscode": { "interpreter": { "hash": "d5cc8f536c771a0358b4576103dc0345879617bfdfc7539962347f0c8b6f9905" } } }, "nbformat": 4, "nbformat_minor": 2 }