{ "cells": [ { "cell_type": "code", "execution_count": 22, "metadata": {}, "outputs": [], "source": [ "import numpy as np\n", "import pandas as pd\n", "import matplotlib.pyplot as plt\n", "import statistics \n", "from collections import Counter\n", "from sklearn.impute import SimpleImputer\n", "import sklearn.preprocessing as sk\n", "from scipy.stats import zscore\n", "import jenkspy\n", "import seaborn as sns; sns.set()\n", "from sklearn.model_selection import train_test_split\n", "from sklearn.tree import DecisionTreeClassifier,export_graphviz,plot_tree\n", "from sklearn import tree\n", "from sklearn.naive_bayes import MultinomialNB\n", "import statsmodels.tools.tools as stattools\n", "from sklearn.metrics import accuracy_score,confusion_matrix,classification_report\n", "from sklearn.ensemble import RandomForestClassifier" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Random Forest on Diabetes Dataset" ] }, { "cell_type": "code", "execution_count": 23, "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", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
61487235033.60.627501
01856629026.60.351310
18183640023.30.672321
218966239428.10.167210
30137403516843.12.288331
45116740025.60.201300
..............................
76210101764818032.90.171630
76321227027036.80.340270
7645121722311226.20.245300
7651126600030.10.349471
7661937031030.40.315230
\n", "

767 rows × 9 columns

\n", "
" ], "text/plain": [ " 6 148 72 35 0 33.6 0.627 50 1\n", "0 1 85 66 29 0 26.6 0.351 31 0\n", "1 8 183 64 0 0 23.3 0.672 32 1\n", "2 1 89 66 23 94 28.1 0.167 21 0\n", "3 0 137 40 35 168 43.1 2.288 33 1\n", "4 5 116 74 0 0 25.6 0.201 30 0\n", ".. .. ... .. .. ... ... ... .. ..\n", "762 10 101 76 48 180 32.9 0.171 63 0\n", "763 2 122 70 27 0 36.8 0.340 27 0\n", "764 5 121 72 23 112 26.2 0.245 30 0\n", "765 1 126 60 0 0 30.1 0.349 47 1\n", "766 1 93 70 31 0 30.4 0.315 23 0\n", "\n", "[767 rows x 9 columns]" ] }, "execution_count": 23, "metadata": {}, "output_type": "execute_result" } ], "source": [ "diabetes=pd.read_csv('Diabetes.csv')\n", "diabetes" ] }, { "cell_type": "code", "execution_count": 24, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "Index(['6', '148', '72', '35', '0', '33.6', '0.627', '50', '1'], dtype='object')" ] }, "execution_count": 24, "metadata": {}, "output_type": "execute_result" } ], "source": [ "dia_col=diabetes.columns\n", "dia_col" ] }, { "cell_type": "code", "execution_count": 25, "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", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
Number of times pregnantPlasma glucose concentration a 2 hours in an oral glucose tolerance testDiastolic blood pressure (mm Hg)Triceps skinfold thickness (mm)2-Hour serum insulin (mu U/ml)body mass index (weight in kg/(height in m)^2)Diabetes pedigree functionAge (year)Class variable (0 or 1)
01856629026.60.351310
18183640023.30.672321
218966239428.10.167210
30137403516843.12.288331
45116740025.60.201300
..............................
76210101764818032.90.171630
76321227027036.80.340270
7645121722311226.20.245300
7651126600030.10.349471
7661937031030.40.315230
\n", "

767 rows × 9 columns

\n", "
" ], "text/plain": [ " Number of times pregnant \\\n", "0 1 \n", "1 8 \n", "2 1 \n", "3 0 \n", "4 5 \n", ".. ... \n", "762 10 \n", "763 2 \n", "764 5 \n", "765 1 \n", "766 1 \n", "\n", " Plasma glucose concentration a 2 hours in an oral glucose tolerance test \\\n", "0 85 \n", "1 183 \n", "2 89 \n", "3 137 \n", "4 116 \n", ".. ... \n", "762 101 \n", "763 122 \n", "764 121 \n", "765 126 \n", "766 93 \n", "\n", " Diastolic blood pressure (mm Hg) Triceps skinfold thickness (mm) \\\n", "0 66 29 \n", "1 64 0 \n", "2 66 23 \n", "3 40 35 \n", "4 74 0 \n", ".. ... ... \n", "762 76 48 \n", "763 70 27 \n", "764 72 23 \n", "765 60 0 \n", "766 70 31 \n", "\n", " 2-Hour serum insulin (mu U/ml) \\\n", "0 0 \n", "1 0 \n", "2 94 \n", "3 168 \n", "4 0 \n", ".. ... \n", "762 180 \n", "763 0 \n", "764 112 \n", "765 0 \n", "766 0 \n", "\n", " body mass index (weight in kg/(height in m)^2) \\\n", "0 26.6 \n", "1 23.3 \n", "2 28.1 \n", "3 43.1 \n", "4 25.6 \n", ".. ... \n", "762 32.9 \n", "763 36.8 \n", "764 26.2 \n", "765 30.1 \n", "766 30.4 \n", "\n", " Diabetes pedigree function Age (year) Class variable (0 or 1) \n", "0 0.351 31 0 \n", "1 0.672 32 1 \n", "2 0.167 21 0 \n", "3 2.288 33 1 \n", "4 0.201 30 0 \n", ".. ... ... ... \n", "762 0.171 63 0 \n", "763 0.340 27 0 \n", "764 0.245 30 0 \n", "765 0.349 47 1 \n", "766 0.315 23 0 \n", "\n", "[767 rows x 9 columns]" ] }, "execution_count": 25, "metadata": {}, "output_type": "execute_result" } ], "source": [ "diabetes=diabetes.rename(columns={dia_col[0]: \"Number of times pregnant\",\n", " dia_col[1]: \"Plasma glucose concentration a 2 hours in an oral glucose tolerance test\" ,\n", " dia_col[2]: \"Diastolic blood pressure (mm Hg)\",\n", " dia_col[3]: \"Triceps skinfold thickness (mm)\",\n", " dia_col[4]: \"2-Hour serum insulin (mu U/ml)\",\n", " dia_col[5]: \"body mass index (weight in kg/(height in m)^2)\",\n", " dia_col[6]: \"Diabetes pedigree function\",\n", " dia_col[7]: \"Age (year)\",\n", " dia_col[8]: \"Class variable (0 or 1)\"})\n", "diabetes" ] }, { "cell_type": "code", "execution_count": 26, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "\n", "RangeIndex: 767 entries, 0 to 766\n", "Data columns (total 9 columns):\n", " # Column Non-Null Count Dtype \n", "--- ------ -------------- ----- \n", " 0 Number of times pregnant 767 non-null int64 \n", " 1 Plasma glucose concentration a 2 hours in an oral glucose tolerance test 767 non-null int64 \n", " 2 Diastolic blood pressure (mm Hg) 767 non-null int64 \n", " 3 Triceps skinfold thickness (mm) 767 non-null int64 \n", " 4 2-Hour serum insulin (mu U/ml) 767 non-null int64 \n", " 5 body mass index (weight in kg/(height in m)^2) 767 non-null float64\n", " 6 Diabetes pedigree function 767 non-null float64\n", " 7 Age (year) 767 non-null int64 \n", " 8 Class variable (0 or 1) 767 non-null int64 \n", "dtypes: float64(2), int64(7)\n", "memory usage: 54.1 KB\n" ] } ], "source": [ "diabetes.info()" ] }, { "cell_type": "code", "execution_count": 27, "metadata": {}, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAA28AAANfCAYAAABOteVRAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4xLjMsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy+AADFEAAAgAElEQVR4nOzdeXxU1f3/8fdkIyChCk0KBZoqArFQCbiUCCTFfkmCyZRFpcEAovIjD2UpVNlCNAoCEePGJmhp+y3gF2iURb4SpNJi+QaLDcpiFakSZDMMUEKCZLLM+f2RR6YJWZgJGTITXs/HI49H5s6dO59z7jafe88512KMMQIAAAAAeDW/pg4AAAAAAHBlJG8AAAAA4ANI3gAAAADAB5C8AQAAAIAPIHkDAAAAAB9A8gYAAAAAPoDk7Ro4fvy4unfvrj/96U/Vpq9cuVIzZ85stO+59957deDAgUZbXn2KioqUlJSkhIQEvf/++9Xe++tf/6rXXntNkvTBBx/o+eefvyYx+aqq9eUNjh8/rttuu01Dhgxx/v3yl79UVlaWJOmdd95RSkpKE0d5ZYsXL9acOXOaOgyf0tBt0Rv2+b/97W8aPny4hgwZomHDhmnXrl21zte9e3edO3fuGkdX3WuvvaaNGzc2aQwNcfz4cfXu3dutz3jrflhYWKgxY8ZccT5fOd5J0v79+/XMM880+PPHjh3TpEmTGvz5y88dVqtVSUlJeu+995zzXM2235B1Nnv2bOXk5Lj8HaNHj1Z2dnaN6Q3Z9uuTnZ2t0aNHN9ryvNXOnTv1yiuvePx76tpP61qfVZ06dUoTJ06Uw+HwVHiNLqCpA7he+Pn56YUXXtAdd9yhW265panDuWqff/65zp49q+3bt9d478CBAyooKJAk/eIXv9AvfvGLax2eT6laX94iODhYmzZtcr7Oz89XYmKievbs2YRRwdMaui029T5fWFiop556SqtXr1bXrl31xRdfaNSoUfrrX/+q1q1bX9NYXPHrX/+6qUO47hUUFFyzi53Xyr/+9S/l5+c3+PMnT57UkSNHriqGy88dJ06c0NixY+Xv76+4uLir2vYbss7mzZvX4O/D1SkqKlJmZqbWr1/f1KHUq0OHDoqIiNBbb72lUaNGNXU4LiF5u0aCg4P1yCOP6KmnntLatWsVFBRU7f2ZM2eqa9eueuyxx2q8vvfee5WYmKiPPvpIBQUFGjdunPbu3avPPvtMAQEBev311/WDH/xAkvTWW2/piy++UElJiR555BE98MADkqQdO3bo9ddfV2lpqYKDgzVjxgz17t1bixcv1qeffqrTp0+re/fuyszMrBbXn//8Zy1ZskQOh0M33HCDZs2apdatWys1NVX5+fkaMmSI1q1bp+DgYEnSvn37tHbtWpWXlyskJETh4eHatm2bVqxYodGjR6tHjx769NNPde7cOY0YMUJnzpzRnj17dOnSJb366qvq3r27CgsLNW/ePH355ZcqLS1VVFSUpk+froCAAC1atEjbt29XYGCgbrrpJi1YsEBhYWE16rJFixb64osvdPbsWfXr109paWkKDAxUz5499Ytf/EJffPGFMjMz1apVK82bN0/nz59XeXm5Ro8e7ayzN954Q1lZWbrhhht055136oMPPtCOHTs0c+ZMtW7dWocOHdK3336r7t2764UXXtANN9ygrKwsrVu3TqWlpSooKND/+3//Tw899JDeeecdbd++XX5+fjp69KiCg4P1wgsvqKioqFp9TZ06tfE3vkbwgx/8QOHh4crLy6s2/dNPP9WLL76okpIS2Ww23XPPPZo/f77Kyso0d+5c7d27V4GBgerUqZMWLFigf//733r44YfVr18/HTx4UOXl5Zo8ebLWrVunr7/+Wj179tTLL78sPz8/LV++XB988IGKi4t16dIlzZgxQ4MGDaoR2zvvvKM33nhDwcHB6tu3r/74xz/qn//8Z7V57r33Xr322mv66U9/WuP1X/7yF7366qtyOBxq1aqVnnvuOUVERNS67d9+++366quvNHv2bJWUlMgYowceeEDJycmSpNdff13vv/++HA6HOnbsqPT0dOe+WdWKFSu0YcMGBQQEKDw8XBkZGQoJCdHSpUv1v//7v/L399fNN9+sp59+WqGhoRo9erQiIyO1d+9enTp1SlFRUZo7d678/PzqjH/v3r3KzMzUpUuX5Ofnp4kTJ2rgwIEub4vh4eHKysrSpUuX1Lp1a61YsULPPvusjh49qvPnz+uGG25QZmamCgsL69znv/32Wz377LM6ceKEjDEaOnSoxo0bp+PHj2vs2LGKiYnRvn37dOHCBU2bNq3W9evKdlBaWqr09HR17dpVknTrrbfKGKN///vftSZvixcv1r59+3T+/Hk99thjzvVXX/0nJycrPj5ekqq9vvyY8pe//MWlY1Tl8f2nP/2pxo8fr//7v//T6dOnNW7cOD300EM1Ynb32NKlS5cay6ivfN/73vf09ddfa+TIkfrpT39a635dH1/bD2fNmqXi4mINGTJE77zzjj755BMtXLhQly5dUmBgoKZMmaLo6Ohqn6nv3HT5dnDo0CG315fNZlN6erq+/vpr+fn5KSkpSWPGjKn3eyudOnVKixYtUmFhoWbNmqUFCxbUed6vre6SkpKUlpam/Px8PfbYY1q5cmW969tVHTt21OTJk7Vy5UrFxcVV2/br2qZtNptmzJihf//735KkmJgYTZkypUHrrOq+Wtc2drnt27frjTfeUHFxsaxWqx5//PFq75eWliojI0O7d++Wv7+/br/9dudvo8OHD2vOnDk6f/68LBaLHn30UQ0dOlRSxV3Hd999VzfeeKPCw8Nrra+///3vyszM1A9/+EN9/fXXCg4OVkZGhrp06aKZM2fq/PnzOnbsmH7+85/r17/+tTIzM/Xxxx+rvLxcP/nJT5SWlqbWrVvrrbfe0tq1axUYGKgWLVpozpw5uvXWW+ucXte+edNNNyk5OVldunTRiRMntGrVKh0/frzWc8vl3nrrLfXv318tW7aUJP30pz/VI488opycHH333XeaOHGisrOz9eWXXyosLEzLly9Xq1atXJ7PXTt37lRmZqb8/Px02223KScnR2+99ZY6deqkBx98UA888IBGjBhR4/e5VzLwuGPHjpnIyEhTXl5ukpOTTUZGhjHGmN/+9rdmxowZxhhjZsyYYX772986P1P19cCBA838+fONMcb87//+r4mIiDCff/65McaYJ554wrz++uvO+dLT040xxnz77bcmKirKfPnll+bIkSMmMTHRnDt3zhhjzJdffmn69etnLl68aBYtWmTi4uJMaWlpjbj/9a9/mXvuucd88803xhhjcnJyTL9+/UxhYaH56KOPTEJCQq3lXbRokXnuueeMMca8/fbbZvz48cYYY0aNGmUmTpxojDHm008/Nd26dTMffPCBMcaYefPmmbS0NGOMMTNnzjR//OMfjTHGlJWVmaeeesq88cYb5uTJk6ZPnz7GbrcbY4xZuXKl2b59e43vnzFjhhk6dKgpKioydrvdJCcnm1WrVhljjOnWrZvZsGGDMcaY0tJSc99995mD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tzaVd3JrO+/XVXeeYrFYnK1zKtVXRwMGDND48eN16tQp3XPPPXryyScVEhJS7beOq+usUl3bWG0eeOABBQQEqHXr1oqLi1NOTk61O9kffvihpk6dqsDAQEkVd/cmTJigvLw82e1253J/8IMfKDY2Vn/7299UUFCgQYMGOY+n999/v1atWlXr90dERDi3pfvvv19z5sxx3oW84447nPP99a9/VWFhobNPX2lpqdq1ayd/f3/Fx8crKSlJP//5z9W/f3/FxMTUOf1KAgICFBkZKamitU1d55Yf/vCH1T535MiRGncY4+LiJFWc+7t16+a8I96pU6dq69fV+aq68847tWLFimrTKvsV/uMf/1CXLl2cv52HDRtWo292p06ddOTIEfXt2/dKVdLkSN6usQ4dOui5557TjBkznLfSpYqN3xjjfF1aWlrtc1Vv41YeMGpT9QDscDgUEBCg8vJyRUVF6dVXX3W+d+rUKYWFhWn79u113n52OBw1DoLGGJWVldUbQ30uvx1d23IcDodee+0158HywoULslgs8vPz0+rVq3XgwAHt3r1b8+fP14ABAzR9+vQay/D3968Wc9V6qSxvZTOvqu3zz5w5o5CQEL3yyivV1kfV5UmqdiKqXHfffvutfvWrX2nEiBG64447nM006vuMt7q830JdRo0ape7du2vAgAEaPHiw9u3bJ2OM2rRpo02bNmnv3r366KOPNGXKFD322GOKiYlRYGBgte2qtm3gs88+0xNPPKGxY8eqX79+uuuuu/Tcc8/VmM/f37/e9VRV1fkqf7D6+/tXi8UYo0OHDtW77Q8cOFDbtm1TTk6Odu/eraVLl+qdd96Rw+Go1uStpKSk1pPM5d954cIFXbhwocZ3OhwOlZWVOV/Xtv0EBATUGn95ebm6dOlSbZCk/Px8tW3bVu+++67L22LVY8Nbb72l9evXKzk5WVarVTfeeKOOHz9e6+cq4798uVXLFBgY6Nwv67oY5Op2IFX0h5k8ebKMMVq3bp1uuummOmOrvFhV+b3GmCvWf33H58p6cucYVVVlolY1nqoa49hypfJVXdd17dd18cX9sKry8nKXznV1nZsqVdZhQ9fX5fvzsWPHdNNNN13xe2vjcDjqPO9HRETUWneecuDAAXXr1q3atPrq6Pbbb9cHH3yg3bt366OPPtKDDz6oN998s9rFA1fXWaW6trHamk1e/vvh8ovbte1LpaWl9cZU+X9t31Hf918+rep+6nA4lJqa6kzALl68KLvdLknKzMzUl19+qZycHL3xxhvatGmTXnvttTqnXx5f1YtWQUFBzjqo79xyOYvFUmMQkKrrpr7fka7O56rLj1GSalywCAwMrHe9eBNGm2wC8fHxio6O1n//9387p9100006ePCgpIodofIulLs2bNggqaLj8e7duxUVFaWoqCj93//9n7766itJFe1+f/nLX17x6l1UVJR27dqlY8eOSaq4Y3Dq1Cnnla66+Pv7V/tR4K7+/fvrD3/4g4wxKikp0eOPP67Vq1friy++UGJiorp06aKUlBSNHTu2zs7LW7duVUlJiex2uzZs2FBre+ybb765WpJy6tQpJSYm6uDBg4qJidH777+vwsJCSXJe8azPwYMH1bZtWz3xxBPq37+/80RUXl5e7+eutr6ayoULF3TgwAE99dRTio2N1bfffqtvvvlGDodDf/nLXzR27Fj17t1bkyZN0tChQ53btys+/vhj9ezZU4888ojuvvtuffDBB7XWY//+/bV7925nJ/3LR3StVHm1XqroU2Cz2SRJvXr10ldffaXDhw9Lqhgpcdq0afVu+08++aTee+89JSQkKD09Xa1bt9Y333yj/v37KysrS0VFRZIq+jfU9qP9nnvu0fbt253zLV68WH/4wx80YMAAvf32286rz6tWrdJdd91Vb/v7uuKPjIzU0aNH9fHHH0uqGGAoLi7uioMZ1Lct7tq1S8OGDdODDz6om2++WTt27HCuk9o+17p1a/Xq1Utr1qyRVNFfaOPGjbrnnnvqjaEqV7eD8vJyjR8/Xp06ddLvfve7ehO3utRX/1W3n3/961/OO5iXc+cY5Y6GHluqcnX7qm+/rosv7oeVFzaNMYqMjNTXX3+t/fv3S5IOHz6sjz/+WHfffXeNctZ2brpcQ9dXVFSU3n77bUkV+8vDDz+svLw8l7+36n5Y33m/rrrz9/evcWHiah05ckTLli3To48+Wm16fXWUmZmpZcuW6b/+6780e/Zs3XrrrTp8+HCD1lmlurax2mzcuFHGGBUUFGjr1q3OFkKVBgwYoP/5n/9RaWmpHA6H1qxZo379+umWW25RQECAcwTu/Px8bdu2Tffcc4+io6OVnZ3tvFBX38XRL774Ql988YUkad26derdu7ezFVBV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fkJubi7c3NywfPlyWFhUvjBR337Q0tISw4YNw2effYaIiAjs3LkTvr6+GD58ONauXYubN2+iZcuWiIqKQqdOnQAAL730EoQQuHv3Luzs7PQb2wky2ODBg0VGRkalMhcXF7Fnz55K04WFheK7774TXl5e4t69e0IIIVatWiU2btwovv/+ezFhwgTx6NEjIYQQx48fFz4+PkIIIRYuXChGjBghioqKhEajERMnThTbt28XOTk54tVXXxUajUYIIcTWrVvFoUOHqsQ3efJkkZSUJIQQIjMzU3zwwQfSfD/77DOxdOlSMWvWLGk+CxcuFFu2bJHi3r59uxBCiPPnz4uuXbuKkpIScfPmTdGjRw8hhBB37twRbm5u4uzZs0IIIX755RfRp08fcePGDfHNN9+IGTNmCCGECAgIEPHx8UIIIX788UfRuXNncfr06Srxrlu3TixdulQIIcQ333wjXnvtNZGVlSWEEGL58uVi0aJFQgghJk2aJA4ePCjUarXo1auXuHjxohBCiJSUFPH2229LMV6+fFn85S9/EWlpaUIIIW7evClcXFzEkSNHhBBCJCcni0GDBgkhhNizZ4+YO3euKCsrE0II8dVXX4lp06YJIYR4/fXXxc8//yxtn08++aTW8iddvnxZDB48WJr+5ptvRK9evUROTo7QarVi+PDhIjQ0VGi1WpGZmSm6desmtFqt3vUe8/PzE6dOnaqyfGq6dDqdeO+990RoaGi1n58+fVp069ZNvPHGG5X+6927t9iyZYsoKysTr7/+ukhJSRFCCPHrr7+KgQMHip9++kmcPn1a+Pr6VprX4+l169YJb29v6Vh60g8//CB8fHyETqcTQggRExMj0tPTxb1794SXl5e4efOmtCwPDw9x+/Zt8c0334jevXuLhw8fCiFEpb7l6emFCxeKMWPGiNLSUpGfny9cXFzEP//5TyGEENu2bRNvvfVWte3wOPaFCxeKcePGCY1GI0pLS8WIESNEQkJCrX3u4z7+scfTT8+3rr71aSNHjqzUT7q4uIgvvvhCCCHE5s2bRc+ePcWvv/4qtFqtGDlypNi3b1+t8TztyZie1KNHD2k7bNy4Ufo+mzRpkpg9e7YQQoizZ88KFxcXcfjwYSGEECtXrhSRkZFSvYMHD0rzW758uVi7dm2V5ZDxnT59Wri6uor09HQhRMX32OjRo4UQQoSF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IiIiIhO6fPkysrKy4O3tDaAiSbOyskLbtm2hVqulemq1utI9cfoqLCyCTifqrKdU2kOtfmjw/BsjOQzS6xP3i4ZzfFhYKGr9QYb3vBERERGZkBACq1atwv3791FWVoZdu3Zh6NCh6N69O65fv47s7GxotVokJSXBw8PD3OESUQPGM29EREREJuTq6ooZM2Zg/PjxKC8vh5eXF/z8/AAA0dHRCA0NhUajgaenJ3x8fMwcLRE1ZEzeiIiIiEzgyJEj0r8nTpyIiRMnVqnj5uaGffv21WdYRCRjvGySiIiIiIhIBpi8ERERERERyQCTNyIiIiIiIhlg8kZERERERCQDTN6IiIiIiIhkgMkbERERERGRDDB5IyIiIiIikgEmb0RERERERDLA5I2IiIiIiEgGmLwRERERERHJAJM3IiIiIiIiGWDyRkREREREJANM3oiIiIiIiGSAyRsREREREZEMMHkjIiIiIiKSASZvREREREREMsDkjYiIiIiISAaszB1AQ1RapoVSaW/uMIiIiIiIiCRM3qphY20J//cSjT7f/WsCjD5PIiIiIiJqGnjZJBERERERkQzolbwVFRXBz88Pt27dAgCkpaXB398fXl5eiIuLk+plZmYiMDAQ3t7eWLx4McrLy00TNRERERERURNTZ/J27tw5jB8/HllZWQCAkpISREREYOPGjThw4AAuXLiA1NRUAMCCBQuwZMkSpKSkQAiB+Ph4kwZPRERERETUVNSZvMXHxyMqKgoqlQoAkJGRAWdnZzg5OcHKygr+/v5ITk7G7du3UVJSgh49egAAAgMDkZycbNroiYiIiIiImog6H1iycuXKStP5+flQKpXStEqlQl5eXpVypVKJvLw8I4ZKRERERETUdBn8tEmdTgeFQiFNCyGgUChqLDdU69Z2Bv8NmZ4cX53AmOuHHGMmIiIikiODk7e2bdtCrVZL02q1GiqVqkp5QUGBdKmlIQoLi6DTiTrrccBYv9Tqh+YOwSBKpT1jrgd1xWxhoTDpDzLr16/HwYMHAQCenp4ICwtDWloaVq9eDY1Gg2HDhmHevHkAKh6otHjxYvz222947bXXsHTpUlhZ8W0pREREJB8Gvyqge/fuuH79OrKzs6HVapGUlAQPDw+0b98etra2SE9PBwAkJibCw8PD6AETEQEVT709ceIE9uzZg7179+LixYtISkriA5WIiIio0TI4ebO1tUV0dDRCQ0MxfPhwdOjQAT4+PgCA2NhYrF69Gj4+Pnj06BEmT55s9ICJiICK+2rDw8NhY2MDa2trdOzYEVlZWXygEhERETVael8zdOTIEenfbm5u2LdvX5U6rq6uSEhIME5kRES16NSpk/TvrKwsHDx4EJMmTeIDlYiIiKjR4g0fRCRrV65cQUhICMLCwmBpaSm9kxIw7gOVGsrDlMx5v29ju9e4sa0PwHUiImrsmLwRkWylp6djzpw5iIiIgK+vL86cOWOyByrp+zAlwLSDTXM91EaOD9SpTWNbH4DrZChTP1CJiMgUDL7njYioIcjNzcWsWbMQGxsLX19fAHygEhERETVuPPNGRLK0detWaDQaREdHS2VBQUHSA5U0Gg08PT0rPVApMjISRUVF6NKlCx+oRERERLLD5I2IZCkyMhKRkZHVfsYHKhEREVFjxMsmiYiIiIysqKgIfn5+uHXrFoCKd1P6+/vDy8sLcXFxUr3MzEwEBgbC29sbixcvRnl5ublCJiIZYPJGREREZETnzp3D+PHjpafflpSUICIiAhs3bsSBAwdw4cIFpKamAgAWLFiAJUuWICUlBUIIxMfHmzFyImromLwRERERGVF8fDyioqKkp9pmZGTA2dkZTk5OsLKygr+/P5KTk3H79m2UlJSgR48eAIDAwEAkJyebM3QiauB4zxsRERGREa1cubLSdH5+PpRKpTStUmQj8g8AACAASURBVKmQl5dXpVypVCIvL8/g5RnyygO+N4+qw/2ighzagckbERERkQnpdDooFAppWggBhUJRY7mh9H0PZWN8F+CzksMgvT5xv2g4x0dd76DkZZNEREREJtS2bVuo1WppWq1WQ6VSVSkvKCiQLrUkIqoOkzciIiIiE+revTuuX7+O7OxsaLVaJCUlwcPDA+3bt4etrS3S09MBAImJifDw8DBztETUkPGySSIiIiITsrW1RXR0NEJDQ6HRaODp6QkfHx8AQGxsLCIjI1FUVIQuXbpg8uTJZo6WiBoyJm9EREREJnDkyBHp325ubti3b1+VOq6urkhISKjPsIhIxnjZJBERERERkQwweSMiIiIiIpIBXjZJtSot08LG2tLoj9Qt0ZTj4YNio86TiIiIiKgxY/JGtbKxtoT/e4lGn+/+NQEw/5s0iIiIiIjkg5dNEhERERERyQCTNyIiIiIiIhlg8kZERERERCQDvOeNiEgmSsu0Rn94EMAHCBEREckFkzciIpngA4SIiIiaNl42SUREREREJANM3oiIiIiIiGSAyRsREREREZEMMHkjIiIiIiKSAT6whIiIiIioiTLVk4wBPs3YFJi8ERERERE1UaZ6kjHApxmbAi+bJCIiIiIikgEmb0RERERERDLA5I2IiIiIiEgGmLwRERERERHJAJM3IiIiIiIiGWDyRkREREREJANM3oiIiIiIiGSAyRsREREREZEMMHkjIiIiIiKSASZvREREREREMsDkjYiIiIiISAasfs8fBwcH486dO7CyqpjNsmXLcOPGDWzatAnl5eV48803MXHiRKMESkRERERE1JQ9c/ImhEBWVhaOHj0qJW95eXmYN28edu/eDRsbGwQFBaFv37546aWXjBYwERERERFRU/TMydu1a9cAAFOnTsW9e/cwduxYtGzZEv369UOrVq0AAN7e3khOTsbs2bP/P3v3Hx5Fdf7//7VkQwCBtwV3hXdMeSuiWCzgR7QGaSKtJIGwQlNUEEGrCFgNghaEJIKoQMRUKgJaW0QFVFKUXykEFRTFQLFpS6CiUiUoPwwLWEiAbJLd8/2Di/0SCEkWdrM78Hxcl9fFzE7O3DOT3J5758yc4EQLAAAAABeos37m7fDhw4qPj9fs2bP12muv6e2339aePXvkcDj82zidTpWUlAQlUACoSVlZmfr27atdu3ZJkgoKCuRyuZSUlKQZM2b4t9u2bZvS0tKUnJyszMxMVVVVhStkAACAs3LWd96uu+46XXfddf7lAQMGaNq0aXrwwQf964wxstlsAbXbunXzsw0JFuNwtLB0+6FAzIHZvHmzsrKyVFxcLEkqLy9XRkaG5s+fr7Zt22rEiBFat26dEhMTNXbsWD3zzDPq2rWrMjIylJubq7vuuitssQMAAATqrIu3v//976qsrFR8fLyk44VabGys3G63fxu32y2n0xlQuwcOlMnnM3VuZ8VOLqpzu0tD1rbD0SKk7YfC+Rhzo0a2kH4hk5ubq0mTJmncuHGSpKKiIrVr105xcXGSJJfLpfz8fF155ZUqLy9X165dJUlpaWmaOXMmxRsAALCUsx42WVpaqunTp8vj8aisrExLlizRc889pw0bNujgwYM6duyY3nvvPSUkJAQzXgDwmzJlirp16+Zf3rdv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Qvf++++rY8eO2rp1q77++mu1b98+aG2/+uqruvHGG3XJJZcErc2aREVFadiwYZo8eTI5AgiSJ598UocOHdLrr7+uFi1a6OjRo/rd736nzMxMPffcc+EOr15++ctf6pe//GWD7zcrK0vp6emy2Wx68cUX1axZM61atUp79uzRnXfeqWuvvVZt2rQJyr6qqqq0YMEC/elPf9LRo0f968mLgaF4a2CxsbEaNWqU5s6dq+TkZI0fP14dOnTQ/fffr8WLF2vRokWqrKzUoUOH9MADD+iuu+6SJLndbt1///3at2+fYmNj9fTTT8vhcKi0tFRTpkzRV199pcrKSsXHx2vcuHFatGiRtm7dqunTpysqKkqJiYnKycnRZ599Jq/Xq5/85CfKyspS8+bN9eabb+rtt99WdHS0YmJi9NRTT51W9L344ovauXOnvv/+e7ndbnXs2FFTpkxR8+bNVVJSoqeeekp79+5VZWWlUlNTNXLkSEnSm2++qddff13NmzfXVVddVa29H374QRMnTlRRUZGefPJJVVZW6sc//rH27Nmj8ePHS5KmTJmiZs2a6ciRI3rnnXe0fv16vfTSS6qsrFSTJk30+OOP+7+Feumll/Tee+/J5/MpNjZWkyZN0qWXXurfZ1lZmYYNG6aqqiqlpaXpxRdfVK9evbRhwwa1atVKknT11Vdrw4YN2r59u2bMmKG4uDht375dVVVVmjx5sq6//nodOXJEzzzzjP7xj38oKipKt956qwYNGqSZM2eqtLRUEyZMUP/+/fX0008rLy9PpaWlmjx5sr744gvZbDb9/Oc/16OPPiq73a6f/vSnGj58uD799FPt27dPw4YN819zANW99dZb6tOnj3784x/r9ddf93/L/Morr2jx4sW66KKL1K1bN61Zs0Zr165VRUXFGfPeyY4dO6bXX39dK1askDFGKSkpmjhxom6++WZJUmZmpq666irdc889Z8wz//rXv/zf9LvdbnXv3l1Tp07Vrl27NHjwYLVv3167d+/W/PnzdcMNN2jSpEnatm2brrnmmgY/j8D5ZNeuXVqxYoXWr1/v/9tu1qyZJk+erH/84x+nbX+mvpbb7dbjjz+uH374QZKUmJio0aNHn3H9yRYtWqQPP/xQL7/8siTp66+/1r333quPPvpIS5YsqXF/7777rhYvXqxjx46pefPm+tWvfqXVq1frj3/84xnziST5fD5lZmbq3//+t+x2u7KystS1a9dq8dTWLzvZ5s2bdeDAAXXu3FmS9MEHHygnJ0eS9L//+7+6+eabtWrVKv3mN7+p9nPff/+9nnzySe3evVvGGPXv31/Dhg2rMd85nU7/z33++ef68ssvNWvWLN13333V2iQvBsAgZL777jvTtWvX09Z/9dVXpkuXLsYYYx5//HHz5z//2ZSVlZk77rjDHDx40BhjzD//+U//z77zzjuma9eupri42BhjzO9//3vzyCOPGGOMGT9+vHnjjTeMMcZUVVWZ3/3ud+aVV14xxhhz9913m1WrVhljjHnxxRdNdna28fl8/jYmTZpkqqqqTKdOnUxJSYkxxpglS5aYt99++7SYZ86caRISEozb7TZer9c8+uijJjs72xhjzJAhQ8yaNWuMMcaUl5ebIUOGmL/+9a/m888/N/Hx8Wbfvn3GGGOeeOIJ07NnT397kydPNpWVlSYhIcF89NFHxhhjNmzYYK6++mqzceNGs3HjRtOxY0eza9cuY4wxO3bsMH379vWfo6+++srcfPPN5siRI2bJkiVm9OjRprKy0hhjzNtvv22GDRtW5zW56qqrzIEDB05b3rhxo7nmmmvM559/bowxZu7cuWbw4MHGGGOmTp1qxowZY6qqqozH4zGDBw82GzduNO+8844ZPny4McaYjRs3mtTUVGOMMePGjTNPP/208fl8xuPxmPvuu8/88Y9/9O9v/vz5xhhjtmzZYq699lpTXl5+WtzAhW779u2mU6dO5uDBg2bz5s2mc+fO5uDBg+bjjz82ycnJ5tChQ8bn85kJEyb488yZ8t6p1q5da+6++27/8rx588yoUaOMMcaUlpaam266yRw6dKjWPDNmzBizceNGY4wxZWVl5mc/+5nZsmWL+e6778xVV11lPvvss2r7fPrpp80LL7wQ3JMEXIDy8/PNr3/961q3qU9fa9asWeaJJ54wxhhz5MgRM3r0aHP48OEzrj9ZaWmp6datm7+/M336dPP888/X2be74YYbTGlpqX/5RB+irnzy17/+1RhjzCeffGISEhKMx+Px96uMOXO/7FTZ2dlm5syZ/uVrr73WfwzGGPP888+bqVOnnvZzgwcPNq+++qoxxpjDhw8bl8tl8vLyzpjvTnWm/jF5sX648xYGNptNTZo0qbbuoosu0ssvv6x169ap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\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "def plot_series(dia_01,row,col,num_of_figs):\n", " columns=dia_01.columns\n", " fig, axs = plt.subplots(row,col,figsize=(15,15))\n", " counter=1\n", " for i in range(0,row):\n", " for j in range(0,col):\n", " if counter>num_of_figs:\n", " break\n", " axs[i,j].hist(dia_01.iloc[:,counter-1])\n", " axs[i,j].set_title(columns[counter-1])\n", " counter +=1\n", " plt.show()\n", "plot_series(diabetes,3,3,9)" ] }, { "cell_type": "code", "execution_count": 28, "metadata": { "scrolled": true }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "sum of Zeros in Number of times pregnant column:\n", " 111 \n", "max of Number of times pregnant column:\n", " 17 \n", "sum of NAN in Number of times pregnant column:\n", " 0 \n", "_-_-_-_-_-\n", "\n", "sum of Zeros in Plasma glucose concentration a 2 hours in an oral glucose tolerance test column:\n", " 5 \n", "max of Plasma glucose concentration a 2 hours in an oral glucose tolerance test column:\n", " 199 \n", "sum of NAN in Plasma glucose concentration a 2 hours in an oral glucose tolerance test column:\n", " 0 \n", "_-_-_-_-_-\n", "\n", "sum of Zeros in Diastolic blood pressure (mm Hg) column:\n", " 35 \n", "max of Diastolic blood pressure (mm Hg) column:\n", " 122 \n", "sum of NAN in Diastolic blood pressure (mm Hg) column:\n", " 0 \n", "_-_-_-_-_-\n", "\n", "sum of Zeros in Triceps skinfold thickness (mm) column:\n", " 227 \n", "max of Triceps skinfold thickness (mm) column:\n", " 99 \n", "sum of NAN in Triceps skinfold thickness (mm) column:\n", " 0 \n", "_-_-_-_-_-\n", "\n", "sum of Zeros in 2-Hour serum insulin (mu U/ml) column:\n", " 373 \n", "max of 2-Hour serum insulin (mu U/ml) column:\n", " 846 \n", "sum of NAN in 2-Hour serum insulin (mu U/ml) column:\n", " 0 \n", "_-_-_-_-_-\n", "\n", "sum of Zeros in body mass index (weight in kg/(height in m)^2) column:\n", " 11 \n", "max of body mass index (weight in kg/(height in m)^2) column:\n", " 67.1 \n", "sum of NAN in body mass index (weight in kg/(height in m)^2) column:\n", " 0 \n", "_-_-_-_-_-\n", "\n", "sum of Zeros in Diabetes pedigree function column:\n", " 0 \n", "max of Diabetes pedigree function column:\n", " 2.42 \n", "sum of NAN in Diabetes pedigree function column:\n", " 0 \n", "_-_-_-_-_-\n", "\n", "sum of Zeros in Age (year) column:\n", " 0 \n", "max of Age (year) column:\n", " 81 \n", "sum of NAN in Age (year) column:\n", " 0 \n", "_-_-_-_-_-\n", "\n" ] } ], "source": [ "dia_col=diabetes.columns\n", "for c in dia_col:\n", " ser2 = diabetes[c]\n", " #pd.to_numeric(ser2).plot(kind='hist', stacked = True) \n", " if c==dia_col[8]:\n", " continue\n", " print('sum of Zeros in {} column:\\n'.format(c),ser2.eq(0).sum(),\n", " '\\nmax of {} column:\\n'.format(c),ser2.max(),\n", " '\\nsum of NAN in {} column:\\n'.format(c),ser2.isna().sum(),'\\n_-_-_-_-_-\\n')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ " i think the zeros in column 2,3,6 are missing data." ] }, { "cell_type": "code", "execution_count": 29, "metadata": {}, "outputs": [], "source": [ "m=(pd.to_numeric(diabetes[dia_col[1]]).mean()*diabetes[dia_col[1]].count())/(diabetes[dia_col[1]].count()-diabetes[dia_col[1]].eq(0).sum())\n", "diabetes[dia_col[1]]=diabetes[dia_col[1]].replace({0:m})\n", "m=(pd.to_numeric(diabetes[dia_col[2]]).mean()*diabetes[dia_col[2]].count())/(diabetes[dia_col[2]].count()-diabetes[dia_col[2]].eq(0).sum())\n", "diabetes[dia_col[2]]=diabetes[dia_col[2]].replace({0:m})\n", "m=(pd.to_numeric(diabetes[dia_col[5]]).mean()*diabetes[dia_col[5]].count())/(diabetes[dia_col[5]].count()-diabetes[dia_col[5]].eq(0).sum())\n", "diabetes[dia_col[5]]=diabetes[dia_col[5]].replace({0:m})\n" ] }, { "cell_type": "code", "execution_count": 30, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "sum of Zeros in Number of times pregnant column:\n", " 111 \n", "max of Number of times pregnant column:\n", " 17 \n", "sum of NAN in Number of times pregnant column:\n", " 0 \n", "_-_-_-_-_-\n", "\n", "sum of Zeros in Plasma glucose concentration a 2 hours in an oral glucose tolerance test column:\n", " 0 \n", "max of Plasma glucose concentration a 2 hours in an oral glucose tolerance test column:\n", " 199.0 \n", "sum of NAN in Plasma glucose concentration a 2 hours in an oral glucose tolerance test column:\n", " 0 \n", "_-_-_-_-_-\n", "\n", "sum of Zeros in Diastolic blood pressure (mm Hg) column:\n", " 0 \n", "max of Diastolic blood pressure (mm Hg) column:\n", " 122.0 \n", "sum of NAN in Diastolic blood pressure (mm Hg) column:\n", " 0 \n", "_-_-_-_-_-\n", "\n", "sum of Zeros in Triceps skinfold thickness (mm) column:\n", " 227 \n", "max of Triceps skinfold thickness (mm) column:\n", " 99 \n", "sum of NAN in Triceps skinfold thickness (mm) column:\n", " 0 \n", "_-_-_-_-_-\n", "\n", "sum of Zeros in 2-Hour serum insulin (mu U/ml) column:\n", " 373 \n", "max of 2-Hour serum insulin (mu U/ml) column:\n", " 846 \n", "sum of NAN in 2-Hour serum insulin (mu U/ml) column:\n", " 0 \n", "_-_-_-_-_-\n", "\n", "sum of Zeros in body mass index (weight in kg/(height in m)^2) column:\n", " 0 \n", "max of body mass index (weight in kg/(height in m)^2) column:\n", " 67.1 \n", "sum of NAN in body mass index (weight in kg/(height in m)^2) column:\n", " 0 \n", "_-_-_-_-_-\n", "\n", "sum of Zeros in Diabetes pedigree function column:\n", " 0 \n", "max of Diabetes pedigree function column:\n", " 2.42 \n", "sum of NAN in Diabetes pedigree function column:\n", " 0 \n", "_-_-_-_-_-\n", "\n", "sum of Zeros in Age (year) column:\n", " 0 \n", "max of Age (year) column:\n", " 81 \n", "sum of NAN in Age (year) column:\n", " 0 \n", "_-_-_-_-_-\n", "\n" ] } ], "source": [ "dia_col=diabetes.columns\n", "for c in dia_col:\n", " ser2 = diabetes[c]\n", " #pd.to_numeric(ser2).plot(kind='hist', stacked = True) \n", " if c==dia_col[8]:\n", " continue\n", " print('sum of Zeros in {} column:\\n'.format(c),ser2.eq(0).sum(),\n", " '\\nmax of {} column:\\n'.format(c),ser2.max(),\n", " '\\nsum of NAN in {} column:\\n'.format(c),ser2.isna().sum(),'\\n_-_-_-_-_-\\n')" ] }, { "cell_type": "code", "execution_count": 31, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([[1.00e+00, 8.50e+01, 6.60e+01, ..., 2.66e+01, 3.51e-01, 3.10e+01],\n", " [8.00e+00, 1.83e+02, 6.40e+01, ..., 2.33e+01, 6.72e-01, 3.20e+01],\n", " [1.00e+00, 8.90e+01, 6.60e+01, ..., 2.81e+01, 1.67e-01, 2.10e+01],\n", " ...,\n", " [5.00e+00, 1.21e+02, 7.20e+01, ..., 2.62e+01, 2.45e-01, 3.00e+01],\n", " [1.00e+00, 1.26e+02, 6.00e+01, ..., 3.01e+01, 3.49e-01, 4.70e+01],\n", " [1.00e+00, 9.30e+01, 7.00e+01, ..., 3.04e+01, 3.15e-01, 2.30e+01]])" ] }, "execution_count": 31, "metadata": {}, "output_type": "execute_result" } ], "source": [ "dia_norm=diabetes.copy()\n", "dia_y=dia_norm[dia_col[8]]\n", "dia_norm=dia_norm.drop([dia_col[8]],axis=1)\n", "dia_col=dia_norm.columns\n", "dia_col\n", "dia_norm=dia_norm.to_numpy()\n", "dia_norm" ] }, { "cell_type": "code", "execution_count": 32, "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", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
Number of times pregnantPlasma glucose concentration a 2 hours in an oral glucose tolerance testDiastolic blood pressure (mm Hg)Triceps skinfold thickness (mm)2-Hour serum insulin (mu U/ml)body mass index (weight in kg/(height in m)^2)Diabetes pedigree functionAge (year)Class variable (0 or 1)
0-0.843726-1.204829-0.5295600.532023-0.693559-0.851771-0.364265-0.1889400
11.2342402.016619-0.694899-1.286882-0.693559-1.3317700.604701-0.1037951
2-0.843726-1.073342-0.5295600.1556980.122357-0.633591-0.919684-1.0403930
3-1.1405790.504511-2.6789710.9083490.7646741.5482195.482732-0.0186501
40.343683-0.1858000.131797-1.286882-0.693559-0.997225-0.817052-0.2740860
..............................
7621.827945-0.6788790.2971361.7237200.8688330.064588-0.9076102.5357090
763-0.5468740.011432-0.1988810.406582-0.6935590.631859-0.397469-0.5295220
7640.343683-0.021440-0.0335420.1556980.278596-0.909953-0.684235-0.2740860
765-0.8437260.142920-1.025578-1.286882-0.693559-0.342683-0.3703021.1733841
766-0.843726-0.941854-0.1988810.657465-0.693559-0.299046-0.472934-0.8701030
\n", "

767 rows × 9 columns

\n", "
" ], "text/plain": [ " Number of times pregnant \\\n", "0 -0.843726 \n", "1 1.234240 \n", "2 -0.843726 \n", "3 -1.140579 \n", "4 0.343683 \n", ".. ... \n", "762 1.827945 \n", "763 -0.546874 \n", "764 0.343683 \n", "765 -0.843726 \n", "766 -0.843726 \n", "\n", " Plasma glucose concentration a 2 hours in an oral glucose tolerance test \\\n", "0 -1.204829 \n", "1 2.016619 \n", "2 -1.073342 \n", "3 0.504511 \n", "4 -0.185800 \n", ".. ... \n", "762 -0.678879 \n", "763 0.011432 \n", "764 -0.021440 \n", "765 0.142920 \n", "766 -0.941854 \n", "\n", " Diastolic blood pressure (mm Hg) Triceps skinfold thickness (mm) \\\n", "0 -0.529560 0.532023 \n", "1 -0.694899 -1.286882 \n", "2 -0.529560 0.155698 \n", "3 -2.678971 0.908349 \n", "4 0.131797 -1.286882 \n", ".. ... ... \n", "762 0.297136 1.723720 \n", "763 -0.198881 0.406582 \n", "764 -0.033542 0.155698 \n", "765 -1.025578 -1.286882 \n", "766 -0.198881 0.657465 \n", "\n", " 2-Hour serum insulin (mu U/ml) \\\n", "0 -0.693559 \n", "1 -0.693559 \n", "2 0.122357 \n", "3 0.764674 \n", "4 -0.693559 \n", ".. ... \n", "762 0.868833 \n", "763 -0.693559 \n", "764 0.278596 \n", "765 -0.693559 \n", "766 -0.693559 \n", "\n", " body mass index (weight in kg/(height in m)^2) \\\n", "0 -0.851771 \n", "1 -1.331770 \n", "2 -0.633591 \n", "3 1.548219 \n", "4 -0.997225 \n", ".. ... \n", "762 0.064588 \n", "763 0.631859 \n", "764 -0.909953 \n", "765 -0.342683 \n", "766 -0.299046 \n", "\n", " Diabetes pedigree function Age (year) Class variable (0 or 1) \n", "0 -0.364265 -0.188940 0 \n", "1 0.604701 -0.103795 1 \n", "2 -0.919684 -1.040393 0 \n", "3 5.482732 -0.018650 1 \n", "4 -0.817052 -0.274086 0 \n", ".. ... ... ... \n", "762 -0.907610 2.535709 0 \n", "763 -0.397469 -0.529522 0 \n", "764 -0.684235 -0.274086 0 \n", "765 -0.370302 1.173384 1 \n", "766 -0.472934 -0.870103 0 \n", "\n", "[767 rows x 9 columns]" ] }, "execution_count": 32, "metadata": {}, "output_type": "execute_result" } ], "source": [ "scaler = sk.StandardScaler()\n", "dia_norm=scaler.fit_transform(dia_norm)\n", "dia_norm=pd.DataFrame(dia_norm,columns=dia_col)\n", "dia_norm= pd.concat((dia_norm,dia_y), axis = 1)\n", "dia_norm" ] }, { "cell_type": "code", "execution_count": 33, "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", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
Number of times pregnantPlasma glucose concentration a 2 hours in an oral glucose tolerance testDiastolic blood pressure (mm Hg)Triceps skinfold thickness (mm)2-Hour serum insulin (mu U/ml)body mass index (weight in kg/(height in m)^2)Diabetes pedigree functionAge (year)Class variable (0 or 1)
289-1.140579-1.4349331.2891720.532023-0.3463610.646404-0.113722-1.0403930
3280.640535-0.547391-0.1988810.720186-0.103322-0.240865-1.0555200.3219310
394-0.5468740.175791-1.1909170.2184191.693429-0.6917723.405946-0.6998120
321-1.1405790.077176-0.198881-0.032464-0.693559-0.735408-0.6570670.2367861
3261.8279451.885132-0.198881-1.286882-0.6935590.384587-0.8200710.3219310
..............................
579-1.1405790.9647181.4545121.598278-0.6935591.402765-0.303893-1.0403931
5020.937388-0.908982-0.6948990.281140-0.0078430.1227700.8039270.6625120
537-1.1405790.1757910.6278151.0337901.1292320.5591321.003154-0.8701030
196-0.250022-0.481647-0.860239-0.471511-0.276921-1.3899510.622812-0.8701031
1750.640535-1.2048290.462476-1.286882-0.693559-0.182683-0.2706890.7476580
\n", "

613 rows × 9 columns

\n", "
" ], "text/plain": [ " Number of times pregnant \\\n", "289 -1.140579 \n", "328 0.640535 \n", "394 -0.546874 \n", "321 -1.140579 \n", "326 1.827945 \n", ".. ... \n", "579 -1.140579 \n", "502 0.937388 \n", "537 -1.140579 \n", "196 -0.250022 \n", "175 0.640535 \n", "\n", " Plasma glucose concentration a 2 hours in an oral glucose tolerance test \\\n", "289 -1.434933 \n", "328 -0.547391 \n", "394 0.175791 \n", "321 0.077176 \n", "326 1.885132 \n", ".. ... \n", "579 0.964718 \n", "502 -0.908982 \n", "537 0.175791 \n", "196 -0.481647 \n", "175 -1.204829 \n", "\n", " Diastolic blood pressure (mm Hg) Triceps skinfold thickness (mm) \\\n", "289 1.289172 0.532023 \n", "328 -0.198881 0.720186 \n", "394 -1.190917 0.218419 \n", "321 -0.198881 -0.032464 \n", "326 -0.198881 -1.286882 \n", ".. ... ... \n", "579 1.454512 1.598278 \n", "502 -0.694899 0.281140 \n", "537 0.627815 1.033790 \n", "196 -0.860239 -0.471511 \n", "175 0.462476 -1.286882 \n", "\n", " 2-Hour serum insulin (mu U/ml) \\\n", "289 -0.346361 \n", "328 -0.103322 \n", "394 1.693429 \n", "321 -0.693559 \n", "326 -0.693559 \n", ".. ... \n", "579 -0.693559 \n", "502 -0.007843 \n", "537 1.129232 \n", "196 -0.276921 \n", "175 -0.693559 \n", "\n", " body mass index (weight in kg/(height in m)^2) \\\n", "289 0.646404 \n", "328 -0.240865 \n", "394 -0.691772 \n", "321 -0.735408 \n", "326 0.384587 \n", ".. ... \n", "579 1.402765 \n", "502 0.122770 \n", "537 0.559132 \n", "196 -1.389951 \n", "175 -0.182683 \n", "\n", " Diabetes pedigree function Age (year) Class variable (0 or 1) \n", "289 -0.113722 -1.040393 0 \n", "328 -1.055520 0.321931 0 \n", "394 3.405946 -0.699812 0 \n", "321 -0.657067 0.236786 1 \n", "326 -0.820071 0.321931 0 \n", ".. ... ... ... \n", "579 -0.303893 -1.040393 1 \n", "502 0.803927 0.662512 0 \n", "537 1.003154 -0.870103 0 \n", "196 0.622812 -0.870103 1 \n", "175 -0.270689 0.747658 0 \n", "\n", "[613 rows x 9 columns]" ] }, "execution_count": 33, "metadata": {}, "output_type": "execute_result" } ], "source": [ "dia_col=dia_norm.columns\n", "dia_col\n", "d_train,d_test=train_test_split(dia_norm,test_size=0.2,random_state=7)\n", "d_train" ] }, { "cell_type": "code", "execution_count": 34, "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", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
Number of times pregnantPlasma glucose concentration a 2 hours in an oral glucose tolerance testDiastolic blood pressure (mm Hg)Triceps skinfold thickness (mm)2-Hour serum insulin (mu U/ml)body mass index (weight in kg/(height in m)^2)Diabetes pedigree functionAge (year)Class variable (0 or 1)
353-0.250022-1.0404700.462476-1.286882-0.6935591.4900370.263601-1.0403930
236-1.1405791.8851321.4545120.406582-0.6935591.6936730.646961-0.8701031
323-0.546874-0.3172870.2144670.720186-0.6935590.471860-0.977037-1.0403930
98-0.8437260.0114321.4545121.9118831.2160322.508215-0.442748-0.1889401
7000.6405350.1100480.4624760.657465-0.693559-0.7063180.2817121.3436751
..............................
1531.2342402.1809790.462476-1.286882-0.6935592.246398-1.0102420.8328031
3920.046831-0.185800-0.033542-0.5342310.061597-1.506314-0.0261830.3219310
308-0.5468740.077176-0.3642210.4693031.0858320.0645881.217473-0.2740861
700.3436830.570255-0.6948990.9083490.521635-0.560864-0.183150-0.6146670
513-0.250022-0.744622-1.521596-0.0951850.052917-0.997225-0.958926-0.7849570
\n", "

154 rows × 9 columns

\n", "
" ], "text/plain": [ " Number of times pregnant \\\n", "353 -0.250022 \n", "236 -1.140579 \n", "323 -0.546874 \n", "98 -0.843726 \n", "700 0.640535 \n", ".. ... \n", "153 1.234240 \n", "392 0.046831 \n", "308 -0.546874 \n", "70 0.343683 \n", "513 -0.250022 \n", "\n", " Plasma glucose concentration a 2 hours in an oral glucose tolerance test \\\n", "353 -1.040470 \n", "236 1.885132 \n", "323 -0.317287 \n", "98 0.011432 \n", "700 0.110048 \n", ".. ... \n", "153 2.180979 \n", "392 -0.185800 \n", "308 0.077176 \n", "70 0.570255 \n", "513 -0.744622 \n", "\n", " Diastolic blood pressure (mm Hg) Triceps skinfold thickness (mm) \\\n", "353 0.462476 -1.286882 \n", "236 1.454512 0.406582 \n", "323 0.214467 0.720186 \n", "98 1.454512 1.911883 \n", "700 0.462476 0.657465 \n", ".. ... ... \n", "153 0.462476 -1.286882 \n", "392 -0.033542 -0.534231 \n", "308 -0.364221 0.469303 \n", "70 -0.694899 0.908349 \n", "513 -1.521596 -0.095185 \n", "\n", " 2-Hour serum insulin (mu U/ml) \\\n", "353 -0.693559 \n", "236 -0.693559 \n", "323 -0.693559 \n", "98 1.216032 \n", "700 -0.693559 \n", ".. ... \n", "153 -0.693559 \n", "392 0.061597 \n", "308 1.085832 \n", "70 0.521635 \n", "513 0.052917 \n", "\n", " body mass index (weight in kg/(height in m)^2) \\\n", "353 1.490037 \n", "236 1.693673 \n", "323 0.471860 \n", "98 2.508215 \n", "700 -0.706318 \n", ".. ... \n", "153 2.246398 \n", "392 -1.506314 \n", "308 0.064588 \n", "70 -0.560864 \n", "513 -0.997225 \n", "\n", " Diabetes pedigree function Age (year) Class variable (0 or 1) \n", "353 0.263601 -1.040393 0 \n", "236 0.646961 -0.870103 1 \n", "323 -0.977037 -1.040393 0 \n", "98 -0.442748 -0.188940 1 \n", "700 0.281712 1.343675 1 \n", ".. ... ... ... \n", "153 -1.010242 0.832803 1 \n", "392 -0.026183 0.321931 0 \n", "308 1.217473 -0.274086 1 \n", "70 -0.183150 -0.614667 0 \n", "513 -0.958926 -0.784957 0 \n", "\n", "[154 rows x 9 columns]" ] }, "execution_count": 34, "metadata": {}, "output_type": "execute_result" } ], "source": [ "d_test" ] }, { "cell_type": "code", "execution_count": 35, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "0 396\n", "1 217\n", "Name: Class variable (0 or 1), dtype: int64" ] }, "execution_count": 35, "metadata": {}, "output_type": "execute_result" } ], "source": [ "dia_y_train=d_train[dia_col[8]]\n", "dia_y_train.value_counts()" ] }, { "cell_type": "code", "execution_count": 36, "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", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
indexNumber of times pregnantPlasma glucose concentration a 2 hours in an oral glucose tolerance testDiastolic blood pressure (mm Hg)Triceps skinfold thickness (mm)2-Hour serum insulin (mu U/ml)body mass index (weight in kg/(height in m)^2)Diabetes pedigree functionAge (year)
0289-1.140579-1.4349331.2891720.532023-0.3463610.646404-0.113722-1.040393
13280.640535-0.547391-0.1988810.720186-0.103322-0.240865-1.0555200.321931
2394-0.5468740.175791-1.1909170.2184191.693429-0.6917723.405946-0.699812
3321-1.1405790.077176-0.198881-0.032464-0.693559-0.735408-0.6570670.236786
43261.8279451.885132-0.198881-1.286882-0.6935590.384587-0.8200710.321931
..............................
608579-1.1405790.9647181.4545121.598278-0.6935591.402765-0.303893-1.040393
6095020.937388-0.908982-0.6948990.281140-0.0078430.1227700.8039270.662512
610537-1.1405790.1757910.6278151.0337901.1292320.5591321.003154-0.870103
611196-0.250022-0.481647-0.860239-0.471511-0.276921-1.3899510.622812-0.870103
6121750.640535-1.2048290.462476-1.286882-0.693559-0.182683-0.2706890.747658
\n", "

613 rows × 9 columns

\n", "
" ], "text/plain": [ " index Number of times pregnant \\\n", "0 289 -1.140579 \n", "1 328 0.640535 \n", "2 394 -0.546874 \n", "3 321 -1.140579 \n", "4 326 1.827945 \n", ".. ... ... \n", "608 579 -1.140579 \n", "609 502 0.937388 \n", "610 537 -1.140579 \n", "611 196 -0.250022 \n", "612 175 0.640535 \n", "\n", " Plasma glucose concentration a 2 hours in an oral glucose tolerance test \\\n", "0 -1.434933 \n", "1 -0.547391 \n", "2 0.175791 \n", "3 0.077176 \n", "4 1.885132 \n", ".. ... \n", "608 0.964718 \n", "609 -0.908982 \n", "610 0.175791 \n", "611 -0.481647 \n", "612 -1.204829 \n", "\n", " Diastolic blood pressure (mm Hg) Triceps skinfold thickness (mm) \\\n", "0 1.289172 0.532023 \n", "1 -0.198881 0.720186 \n", "2 -1.190917 0.218419 \n", "3 -0.198881 -0.032464 \n", "4 -0.198881 -1.286882 \n", ".. ... ... \n", "608 1.454512 1.598278 \n", "609 -0.694899 0.281140 \n", "610 0.627815 1.033790 \n", "611 -0.860239 -0.471511 \n", "612 0.462476 -1.286882 \n", "\n", " 2-Hour serum insulin (mu U/ml) \\\n", "0 -0.346361 \n", "1 -0.103322 \n", "2 1.693429 \n", "3 -0.693559 \n", "4 -0.693559 \n", ".. ... \n", "608 -0.693559 \n", "609 -0.007843 \n", "610 1.129232 \n", "611 -0.276921 \n", "612 -0.693559 \n", "\n", " body mass index (weight in kg/(height in m)^2) \\\n", "0 0.646404 \n", "1 -0.240865 \n", "2 -0.691772 \n", "3 -0.735408 \n", "4 0.384587 \n", ".. ... \n", "608 1.402765 \n", "609 0.122770 \n", "610 0.559132 \n", "611 -1.389951 \n", "612 -0.182683 \n", "\n", " Diabetes pedigree function Age (year) \n", "0 -0.113722 -1.040393 \n", "1 -1.055520 0.321931 \n", "2 3.405946 -0.699812 \n", "3 -0.657067 0.236786 \n", "4 -0.820071 0.321931 \n", ".. ... ... \n", "608 -0.303893 -1.040393 \n", "609 0.803927 0.662512 \n", "610 1.003154 -0.870103 \n", "611 0.622812 -0.870103 \n", "612 -0.270689 0.747658 \n", "\n", "[613 rows x 9 columns]" ] }, "execution_count": 36, "metadata": {}, "output_type": "execute_result" } ], "source": [ "dia_x_train=d_train.copy()\n", "dia_x_train=dia_x_train.drop([dia_col[8]],axis=1)\n", "dia_x_train.reset_index()" ] }, { "cell_type": "code", "execution_count": 37, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "0 104\n", "1 50\n", "Name: Class variable (0 or 1), dtype: int64" ] }, "execution_count": 37, "metadata": {}, "output_type": "execute_result" } ], "source": [ "dia_y_test=d_test[dia_col[8]]\n", "dia_y_test.value_counts()" ] }, { "cell_type": "code", "execution_count": 38, "metadata": { "scrolled": true }, "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", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
indexNumber of times pregnantPlasma glucose concentration a 2 hours in an oral glucose tolerance testDiastolic blood pressure (mm Hg)Triceps skinfold thickness (mm)2-Hour serum insulin (mu U/ml)body mass index (weight in kg/(height in m)^2)Diabetes pedigree functionAge (year)
0353-0.250022-1.0404700.462476-1.286882-0.6935591.4900370.263601-1.040393
1236-1.1405791.8851321.4545120.406582-0.6935591.6936730.646961-0.870103
2323-0.546874-0.3172870.2144670.720186-0.6935590.471860-0.977037-1.040393
398-0.8437260.0114321.4545121.9118831.2160322.508215-0.442748-0.188940
47000.6405350.1100480.4624760.657465-0.693559-0.7063180.2817121.343675
..............................
1491531.2342402.1809790.462476-1.286882-0.6935592.246398-1.0102420.832803
1503920.046831-0.185800-0.033542-0.5342310.061597-1.506314-0.0261830.321931
151308-0.5468740.077176-0.3642210.4693031.0858320.0645881.217473-0.274086
152700.3436830.570255-0.6948990.9083490.521635-0.560864-0.183150-0.614667
153513-0.250022-0.744622-1.521596-0.0951850.052917-0.997225-0.958926-0.784957
\n", "

154 rows × 9 columns

\n", "
" ], "text/plain": [ " index Number of times pregnant \\\n", "0 353 -0.250022 \n", "1 236 -1.140579 \n", "2 323 -0.546874 \n", "3 98 -0.843726 \n", "4 700 0.640535 \n", ".. ... ... \n", "149 153 1.234240 \n", "150 392 0.046831 \n", "151 308 -0.546874 \n", "152 70 0.343683 \n", "153 513 -0.250022 \n", "\n", " Plasma glucose concentration a 2 hours in an oral glucose tolerance test \\\n", "0 -1.040470 \n", "1 1.885132 \n", "2 -0.317287 \n", "3 0.011432 \n", "4 0.110048 \n", ".. ... \n", "149 2.180979 \n", "150 -0.185800 \n", "151 0.077176 \n", "152 0.570255 \n", "153 -0.744622 \n", "\n", " Diastolic blood pressure (mm Hg) Triceps skinfold thickness (mm) \\\n", "0 0.462476 -1.286882 \n", "1 1.454512 0.406582 \n", "2 0.214467 0.720186 \n", "3 1.454512 1.911883 \n", "4 0.462476 0.657465 \n", ".. ... ... \n", "149 0.462476 -1.286882 \n", "150 -0.033542 -0.534231 \n", "151 -0.364221 0.469303 \n", "152 -0.694899 0.908349 \n", "153 -1.521596 -0.095185 \n", "\n", " 2-Hour serum insulin (mu U/ml) \\\n", "0 -0.693559 \n", "1 -0.693559 \n", "2 -0.693559 \n", "3 1.216032 \n", "4 -0.693559 \n", ".. ... \n", "149 -0.693559 \n", "150 0.061597 \n", "151 1.085832 \n", "152 0.521635 \n", "153 0.052917 \n", "\n", " body mass index (weight in kg/(height in m)^2) \\\n", "0 1.490037 \n", "1 1.693673 \n", "2 0.471860 \n", "3 2.508215 \n", "4 -0.706318 \n", ".. ... \n", "149 2.246398 \n", "150 -1.506314 \n", "151 0.064588 \n", "152 -0.560864 \n", "153 -0.997225 \n", "\n", " Diabetes pedigree function Age (year) \n", "0 0.263601 -1.040393 \n", "1 0.646961 -0.870103 \n", "2 -0.977037 -1.040393 \n", "3 -0.442748 -0.188940 \n", "4 0.281712 1.343675 \n", ".. ... ... \n", "149 -1.010242 0.832803 \n", "150 -0.026183 0.321931 \n", "151 1.217473 -0.274086 \n", "152 -0.183150 -0.614667 \n", "153 -0.958926 -0.784957 \n", "\n", "[154 rows x 9 columns]" ] }, "execution_count": 38, "metadata": {}, "output_type": "execute_result" } ], "source": [ "dia_x_test=d_test.copy()\n", "dia_x_test=dia_x_test.drop([dia_col[8]],axis=1)\n", "dia_x_test.reset_index()" ] }, { "cell_type": "code", "execution_count": 39, "metadata": { "scrolled": true }, "outputs": [ { "data": { "text/plain": [ "RandomForestClassifier(criterion='entropy', max_depth=5, random_state=0)" ] }, "execution_count": 39, "metadata": {}, "output_type": "execute_result" } ], "source": [ "model = RandomForestClassifier(criterion='entropy',n_estimators=100,max_depth = 5, random_state=0)\n", "model.fit(dia_x_train, dia_y_train)" ] }, { "cell_type": "code", "execution_count": 40, "metadata": {}, "outputs": [], "source": [ "dia_y_predict=model.predict(dia_x_test)" ] }, { "cell_type": "code", "execution_count": 41, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "0.7987012987012987" ] }, "execution_count": 41, "metadata": {}, "output_type": "execute_result" } ], "source": [ "accuracy_score(dia_y_test,dia_y_predict)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "seems like max_depth=5 or 10... has the max accuracy.\n", "if we we must test the depth to find the most efficient depth , increasing or redusing the depth may increase or reduse the accuracy." ] }, { "cell_type": "code", "execution_count": 42, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "RandomForestClassifier(criterion='entropy', max_depth=5, random_state=0)" ] }, "execution_count": 42, "metadata": {}, "output_type": "execute_result" } ], "source": [ "model = RandomForestClassifier(criterion='entropy',n_estimators=100,max_depth = 5, random_state=0)\n", "model.fit(dia_x_test, dia_y_test)" ] }, { "cell_type": "code", "execution_count": 43, "metadata": {}, "outputs": [], "source": [ "y_pred=model.predict(dia_x_test)" ] }, { "cell_type": "code", "execution_count": 44, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "true negative : 103 \n", "false positive : 1 \n", "false negative : 4 \n", "true positive : 46\n" ] } ], "source": [ "tn, fp, fn, tp = confusion_matrix(dia_y_test, y_pred).ravel()\n", "print(\"true negative : {} \\nfalse positive : {} \\nfalse negative : {} \\ntrue positive : {}\".format(tn, fp, fn, tp))" ] }, { "cell_type": "code", "execution_count": 45, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ " precision recall f1-score support\n", "\n", " 0 0.96 0.99 0.98 104\n", " 1 0.98 0.92 0.95 50\n", "\n", " accuracy 0.97 154\n", " macro avg 0.97 0.96 0.96 154\n", "weighted avg 0.97 0.97 0.97 154\n", "\n" ] } ], "source": [ "print(classification_report(dia_y_test, y_pred))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "precision is the ratio tp / (tp + fp)\n", "\n", "The recall is the ratio tp / (tp + fn)\n", "\n", "The F-beta score can be interpreted as a weighted harmonic mean of the precision and recall, where an F-beta score reaches its best value at 1 and worst score at 0.\n", "\n", "The support is the number of occurrences of each class in y_true." ] }, { "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.7.7" } }, "nbformat": 4, "nbformat_minor": 4 }