2021-05-30 15:36:17 +02:00
{
"cells": [
{
"cell_type": "code",
"execution_count": 1,
"id": "absolute-lending",
"metadata": {},
"outputs": [],
"source": [
"import pandas as pd \n",
"import numpy as np\n",
"from sklearn.model_selection import train_test_split\n",
"import matplotlib.pyplot as plt\n",
"\n",
2021-05-31 16:33:55 +02:00
"# Wizualizacja\n",
"def autolabel(rects, values ,ax):\n",
" # Attach some text labels.\n",
" for (rect, value) in zip(rects, values):\n",
" ax.text(rect.get_x() + rect.get_width() / 2.,\n",
" rect.get_y() + rect.get_height() / 2.,\n",
" '%.3f'%value,\n",
" ha = 'center',\n",
" va = 'center',\n",
" fontsize= 15,\n",
" color ='black')\n",
" \n",
"def plot_priori(labels, posteriori): \n",
" keys =[ r\"$\\bf{\" + (x.split('.',1)[0]).replace('_', ' ')+ \"}$\" + '\\n' + x.split('.',1)[1] for i in range(1) for j in range(len(labels[i])) for x in labels[i][j].keys()]\n",
" aprori = [list(x) for i in range(1) for j in range(len(labels[i])) for x in labels[i][j].values()]\n",
" yes_aprori = np.array(aprori)[:,0]\n",
" no_aprori = np.array(aprori)[:,1]\n",
" \n",
" width = 0.55\n",
"\n",
" fig = plt.figure(figsize=(25,10))\n",
" \n",
" ax1 = fig.add_subplot(121)\n",
" rec1 = ax1.bar(keys,yes_aprori,width, color ='lime', label= 'Positive stroke')\n",
" rec2 = ax1.bar(keys,no_aprori,width, color ='crimson', bottom = yes_aprori, label= 'Negative stroke')\n",
" ax1.set_yticks(np.arange(0, 1.1,0.1))\n",
" ax1.set_ylabel('Probability',fontsize=18)\n",
" ax1.set_xlabel('\\nFeatures',fontsize=18)\n",
" ax1.tick_params(axis='x', which='major', labelsize=12)\n",
" autolabel(rec1,yes_aprori, ax1)\n",
" autolabel(rec2,no_aprori, ax1)\n",
" ax1.legend(fontsize=15)\n",
" \n",
" ax2 = fig.add_subplot(122)\n",
" rec3 = ax2.bar(0, posteriori[1],capsize=1 ,color=['crimson'], label='Negative stroke')\n",
" rec4 = ax2.bar(1, posteriori[0], color=['lime'],label='Positive stroke')\n",
" ax2.set_ylabel('Probability',fontsize=18)\n",
" ax2.set_xlabel('\\nClasses',fontsize=18)\n",
" ax2.set_xticks([0,1])\n",
" ax2.set_yticks(np.arange(0, 1.1,0.1))\n",
" ax2.tick_params(axis='x', which='major', labelsize=15)\n",
" autolabel(rec3,[posteriori[1]], ax2)\n",
" autolabel(rec4,[posteriori[0]], ax2)\n",
" ax2.legend(fontsize=15)\n",
" \n",
" plt.show()\n",
"\n",
"\n",
2021-05-30 15:36:17 +02:00
"#Wczytanie i normalizacja danych\n",
"def NormalizeData(data):\n",
" for col in data.columns:\n",
" if data[col].dtype == object: \n",
" data[col] = data[col].str.lower()\n",
" if col == 'smoking_status':\n",
" data[col] = data[col].str.replace(\" \", \"_\")\n",
" if col == 'stroke':\n",
" data[col] = data[col].replace({1: 'yes'})\n",
" data[col] = data[col].replace({0: 'no'})\n",
" if col == 'hypertension':\n",
" data[col] = data[col].replace({1: 'yes'})\n",
" data[col] = data[col].replace({0: 'no'})\n",
" if col == 'heart_disease':\n",
" data[col] = data[col].replace({1: 'yes'})\n",
" data[col] = data[col].replace({0: 'no'})\n",
" if col == 'bmi':\n",
" bins = [19,25,30,35,40,90]\n",
" labels=['correct','overweight','obesity_1','obesity_2','extreme']\n",
" data[col] = pd.cut(data[col], bins, labels = labels,include_lowest = True)\n",
" if col == 'age':\n",
" bins = [0, 30, 40, 50, 60, 70, 80, 90]\n",
" labels = ['0-29', '30-39', '40-49', '50-59', '60-69', '70-79', '80-89',]\n",
" data[col] = pd.cut(data[col], bins, labels = labels,include_lowest = True)\n",
" if col == 'avg_glucose_level':\n",
" bins = [50,70,90,110,130,150,170,190,210,230,250,270]\n",
" labels = ['50-70', '70-90', '90-110','110-130','130-150','150-170','170-190','190-210', '210-230','230-250','250-270']\n",
" data[col] = pd.cut(data[col], bins, labels = labels,include_lowest = True)\n",
" data = data.dropna()\n",
" return data\n",
"\n",
"def count_a_priori_prob(dataset):\n",
" is_stroke_amount = len(dataset[dataset.stroke == 'yes'])\n",
" no_stroke_amount = len(dataset[dataset.stroke == 'no'])\n",
" data_length = len(dataset.stroke)\n",
" return {'yes': float(is_stroke_amount)/float(data_length), 'no': float(no_stroke_amount)/float(data_length)}\n",
"\n",
"def separate_labels_from_properties(X_train):\n",
"\n",
" labels = X_train.columns\n",
" labels_values = {}\n",
" for label in labels:\n",
" labels_values[label] = set(X_train[label])\n",
" \n",
" to_return = []\n",
" for x in labels:\n",
" to_return.append({x: labels_values[x]})\n",
"\n",
" return to_return\n",
"\n",
"data = pd.read_csv(\"healthcare-dataset-stroke-data.csv\")\n",
"data = NormalizeData(data)\n",
"\n",
"#podział danych na treningowy i testowy \n",
"data_train, data_test = train_test_split(data, random_state = 42)\n",
"\n",
"#rozdzielenie etykiet i cech\n",
"X_train =data_train[['gender', 'age', 'bmi','smoking_status', 'work_type','hypertension','heart_disease']]\n",
"Y_train = data_train['stroke']\n",
"\n",
"#rozdzielenie etykiet i cech\n",
"# Dane wejściowe - zbiór danych, wektor etykiet, wektor prawdopodobieństw a priori dla klas.\n",
"\n",
"# Wygenerowanie wektora prawdopodobieństw a priori dla klas.\n",
"a_priori_prob = count_a_priori_prob(data_train)\n",
"labels = separate_labels_from_properties(X_train)\n",
"\n",
"class NaiveBayes():\n",
" def __init__(self, dataset, labels, a_priori_prob):\n",
" self.dataset = dataset\n",
" self.labels = labels\n",
" self.a_priori_prob = a_priori_prob\n",
" \n",
" def count_bayes(self):\n",
" label_probs_return = []\n",
" posteriori_return = []\n",
" final_probs = {'top_yes': 0.0, 'top_no': 0.0, 'total': 0.0}\n",
" \n",
" # self.labels - Wartości etykiet które nas interesują, opcjonalnie podane sa wszystkie.\n",
" # [{'gender': {'female', 'male', 'other'}}, {'age': {'50-59', '40-49', '60-69', '70+', '18-29', '30-39'}}, {'ever_married': {'no', 'yes'}}, {'Residence_type': {'rural', 'urban'}}, {'bmi': {'high', 'mid', 'low'}}, {'smoking_status': {'unknown', 'smokes', 'never_smoked', 'formerly_smoked'}}, {'work_type': {'self_employed', 'private', 'never_worked', 'govt_job'}}, {'hypertension': {'no', 'yes'}}, {'heart_disease': {'no', 'yes'}}]\n",
" # Dla kazdej z klas - 'yes', 'no'\n",
" for idx, cls in enumerate(list(set(self.dataset['stroke']))):\n",
" label_probs = []\n",
" for label in self.labels:\n",
" label_name = list(label.keys())[0]\n",
" for label_value in label[label_name]:\n",
" # Oblicz ilość występowania danej cechy w zbiorze danych np. heart_disease.yes\n",
"\n",
" amount_label_value_yes_class = len(self.dataset.loc[(self.dataset['stroke'] == 'yes') & (self.dataset[label_name] == label_value)])\n",
" amount_label_value_no_class = len(self.dataset.loc[(self.dataset['stroke'] == 'no') & (self.dataset[label_name] == label_value)])\n",
" amount_yes_class = len(self.dataset.loc[(self.dataset['stroke'] == 'yes')])\n",
" amount_no_class = len(self.dataset.loc[(self.dataset['stroke'] == 'no')]) \n",
" # Obliczenie P(heart_disease.yes|'stroke'|), P(heart_disease.yes|'no stroke') itd. dla kazdej cechy.\n",
" # Zapisujemy do listy w formacie (cecha.wartość: prob stroke, cecha.wartość: prob no stroke)\n",
" label_probs.append({str(label_name + \".\" + label_value):(amount_label_value_yes_class/amount_yes_class, amount_label_value_no_class/amount_no_class)})\n",
"\n",
" # Suma prawdopodobienstw mozliwych wartosci danej cechy dla danej klasy, powinna sumować się do 1.\n",
"# print(label_probs)\n",
" label_probs_return.append(label_probs)\n",
" # Obliczanie licznika wzoru Bayesa (mnozymy wartosci prob cech z prawdop apriori danej klasy):\n",
" top = 1\n",
" for label_prob in label_probs:\n",
" top *= list(label_prob.values())[0][idx]\n",
" top *= self.a_priori_prob[cls]\n",
"\n",
" final_probs[cls] = top\n",
" final_probs['total'] += top\n",
" \n",
"# print(\"Prawdopodobieństwo a posteriori dla klasy yes-stroke\", final_probs['yes']/final_probs['total'])\n",
"# print(\"Prawdopodobieństwo a posteriori dla klasy no-stroke\", final_probs['no']/final_probs['total'])\n",
" posteriori_return.append(final_probs['yes']/final_probs['total'])\n",
" posteriori_return.append(final_probs['no']/final_probs['total'])\n",
" return posteriori_return, label_probs_return\n",
"\n",
2021-05-31 16:05:08 +02:00
"labels = [{'age': {'70-79'}},{'hypertension': {'yes'}},{'heart_disease': {'yes'}},{'bmi': {'correct'}},{'gender': {'male'}},{'smoking_status': {'smokes'}}]\n",
2021-05-30 15:36:17 +02:00
"naive_bayes = NaiveBayes(data_train, labels, a_priori_prob)\n",
"posteriori, labels = naive_bayes.count_bayes()"
]
},
{
"cell_type": "code",
2021-05-31 16:05:08 +02:00
"execution_count": 2,
2021-05-31 16:33:55 +02:00
"id": "molecular-ladder",
2021-05-30 15:36:17 +02:00
"metadata": {},
"outputs": [],
"source": [
2021-05-31 16:33:55 +02:00
"# plot_priori(labels,posteriori)"
2021-05-30 15:36:17 +02:00
]
},
{
"cell_type": "code",
2021-05-31 16:05:08 +02:00
"execution_count": 3,
2021-05-31 16:33:55 +02:00
"id": "future-child",
2021-05-30 15:36:17 +02:00
"metadata": {},
"outputs": [
{
"data": {
2021-05-31 16:33:55 +02:00
"image/png": "iVBORw0KGgoAAAANSUhEUgAABa4AAAKDCAYAAADy9p1tAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjQuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8rg+JYAAAACXBIWXMAAAsTAAALEwEAmpwYAAClyUlEQVR4nOzdeZzWVd3/8deZhVlgBlmGRRZBRNxwA8kMlQAVBHEX8i5RS+yXct/uaZogpZaSuaQpdRua3gnuGKRmuRYGmJY7IiqKKAjKADMDs5zfHzNczc4wzHIBr2ePeTDf8z3f7/X5XunDc7051zkhxogkSZIkSZIkSckipbULkCRJkiRJkiSpMoNrSZIkSZIkSVJSMbiWJEmSJEmSJCUVg2tJkiRJkiRJUlIxuJYkSZIkSZIkJRWDa0mSJEmSJElSUjG4liRJktQkQgh3hxBWhhDeqON8CCHcGkJYEkL4dwjh4JauUZIkSdsHg2tJkiRJTWUmMKqe86OB/hU/k4Bft0BNkiRJ2g4ZXEuSJElqEjHGF4A19XQ5Hrg3lnsZ2CWE0L1lqpMkSdL2JK21C2hqnTt3jn369GntMiRJktTEXnnllS9ijHmtXYe2SQ/g40rHn1S0rajeMYQwifJZ2bRt23bQXnvt1SIFSpIkqeXUN8bf4YLrPn36sGjRotYuQ5IkSU0shPBRa9eglhNjnAHMABg8eHB0jC9JkrTjqW+M71IhkiRJklrKcqBXpeOeFW2SJElSFQbXkiRJklrKHOCMUO5QYG2MscYyIZIkSdIOt1SIJEmSpNYRQvgDMAzoHEL4BJgCpAPEGO8E5gHHAkuAAuCs1qlUkiRJyc7gWpIkSVKTiDF+awvnI3BeC5UjSZKk7ZhLhUiSJEmSJEmSkorBtSRJkiRJkiQpqbhUiCRJO7j8/HxWrlxJcXFxa5ci1Sk9PZ0uXbqQm5vb2qVIkiQlPcf42h5s6xjf4FqSpB1Yfn4+n3/+OT169CArK4sQQmuXJNUQY6SwsJDly5cDGF5LkiTVwzG+tgdNMcZ3qRBJknZgK1eupEePHmRnZzugVdIKIZCdnU2PHj1YuXJla5cjSZKU1Bzja3vQFGN8g2tJknZgxcXFZGVltXYZUoNkZWX5dVdJkqQtcIyv7cm2jPENriVJ2sE5C0PbC/9ZlSRJahjHTdpebMs/qwbXkiRJkiRJkqSkYnAtSZIkSZIkSUoqBteSJO2EQiv9rzGmTp1KCCHxs+uuu3LyySfz/vvvN+17EgK/+tWvEsczZszgscceq9GvT58+XHLJJU362o11ww038NxzzzXpPZPp+SRJktRw7+cd3io/jbF5jH/MMcfUOHfKKacwbNiwbXw3Gm/x4sVMnTqVr776qkr7zJkzCSGwfv361imskgULFjB16tQmvWcyPd9mBteSJCnptW/fnvnz5zN//nymT5/Oa6+9xogRI9iwYUOTvcb8+fM59dRTE8d1BdePPvoo//3f/91kr7stmiO4liRJklrK008/zcKFC1u7jCoWL17MNddcUyO4HjNmDPPnzyc7O7t1CqtkwYIFXHPNNa1dRrNLa+0CJEmStiQtLY1DDz0UgEMPPZTevXtz+OGHM2/evCph87bYfP8tOeigg5rk9VpSYWGhO89LkiQpqXTs2JEePXpw7bXX1jphJNnk5eWRl5fX2mVslRgjGzduJDMzs7VLaRRnXEuSpO3OoEGDAPjwww8B+OKLL5g4cSKdOnUiOzubYcOGsWjRoirXzJkzh0GDBtG2bVs6dOjA1772NZ5//vnE+cpLhQwbNoxXXnmFe+65J7FEycyZM4GqS2nMnDmTNm3a1JiN8eabbxJC4Jlnnkm0Pf744wwePJjMzEy6devGZZddRnFxcb3P+dJLL3H44YeTm5tLbm4uBx54IA8++GCijtWrV3PNNdckatw8+zqEwE033cQFF1xAXl4eAwcObPD7VN3y5cvZa6+9GDlyJAUFBQC8+OKLHHnkkWRnZ9OpUyfOOecc1q1bV+99JEmSpMpCCFx55ZXMmTOH119/vd6+y5YtY8KECXTs2JHs7GyOOeYY3n333Rp9Ro8eTVZWFn379mXmzJk1lh155513mDBhAr169SI7O5t9992Xm2++mbKyMgCee+45jjvuOAD69u1LCIE+ffoANZfS6Nu3L5deemmNWk899VSGDh2aOF6zZg2TJk2ia9euZGZmcthhh/GPf/yj3uctLi7mkksuoXfv3mRkZLDrrrty4oknsmnTJmbOnMnkyZMT72EIIfGMU6dOpXPnzrz00ksccsghZGZmJj4/zJ49m4EDB5KRkUGvXr248sorKSkpqbeOG2+8kczMTObMmQNAUVERl112Gb169SIjI4MDDjiAefPm1XuPbWFwLUmStjubA+tu3boBcMIJJ/DUU08xffp0Zs2aRVlZGd/85jdZsmQJAO+//z6nnHIKw4cP54knnuD+++9n7NixrFmzptb733HHHey1114ce+yxiSVKxowZU6PfCSecQAiBRx99tEr7rFmz6Nq1K9/85jeB8kHiSSedxJAhQ5gzZw5TpkxhxowZXHHFFXU+Y35+PmPHjmX33Xfn4Ycf5qGHHuI73/lOIiR/9NFHad++Pd/97ncTNR588MGJ62+88UZWrFjB73//e2699dYGvU+1vc9HHHEE/fr1449//CPZ2dn87W9/Y+TIkXTr1o2HHnqIm2++mXnz5nHWWWfV+SySJElSbU499VT69+/PtddeW2efNWvWMHToUN59913uvPNOZs+ezYYNGxg5ciSFhYVA+czicePG8fbbb3P33Xdz0003ceutt9YIiJcvX86AAQO44447mDdvHueccw5Tpkzh5z//OQAHH3ww06dPB+CRRx5h/vz5Ncb6m5122mmJUHiz9evXM3fuXCZMmADAxo0bGTlyJM888ww33ngjjz32GHl5eYwcOZLPPvuszme+/vrruf/++/nJT37Cn//8Z26++Wbat29PaWkpY8aM4eKLLwZIfA644447EtcWFBQwceJEvve97/Hkk08yZMgQnn76acaPH8/BBx/M448/zuTJk5k+fTrnn39+nTVMmzaNKVOmMGfOHMaNGweUrz8+c+ZMfvSjH/HEE09wyCGHMG7cOF577bU677MtXCpEkiRtFzbPBli6dCk/+MEPyMnJYeTIkTz55JP87W9/47nnnuPII48EYPjw4fTp04cbb7yRu+66i1dffZWcnBxuvPHGxP2OPfbYOl9rn332oW3btuTl5dW7hMguu+zCqFGjmDVrVpXgdtasWZxyyimkpqYSY+TSSy/ljDPOqDKgzMjI4LzzzuOKK66gU6dONe69ePFi1q5dy69+9StycnIAOProoxPnDzroINLS0ujZs2etNXbv3p1Zs2YljhvyPlW2ZMkShg8fziGHHMIf/vAH2rRpA8Dll1/OYYcdVuXePXr0YMSIEbzxxhvst99+db5fkiRJUmUpKSlcccUVfPe732XatGnsueeeNfr88pe/ZMOGDbz22mt07NgRgG984xv06dOHu+++m/POO4958+bxr3/9iwULFnDIIYcAMGTIEPr06UO/fv0S9xoxYgQjRowAysPuoUOHUlBQwG9+8xuuuOIKcnNzGTBgAFA+3t4827o2EyZM4IYbbuDll19OjMefeOIJNm3alFjO8L777uONN97gzTffpH///gCMHDmSAQMG8Itf/KLK55PKFixYwOmnn87EiRMTbaeddhoAWVlZibpq+xxQWFjITTfdxPHHH59omzhxIsOGDeOee+4BYNSoUQBcccUVXHXVVfTs2bPKPX70ox9x22238ac//Snx2eEvf/kLc+fOrfJ54uijj2bx4sVce+21NUL8puCMa0mSlPRWr15Neno66enpDBgwgKVLlzJr1iy6d+/OggUL6NKlS2LwBNC2bVvGjh3LSy+9BMDAgQNZu3YtEydO5Omnn27STR3Hjx/PX/7yF1avXg3Aa6+9xuLFixk/fjxQHkAvW7aM0047jZKSksTP8OHDKSoq4o033qj1vv369aNdu3acfvrpPP744zWWI9mS6sF8Q96nzd59912
"text/plain": [
"<Figure size 1800x720 with 2 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
},
{
"data": {
"image/png": "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Zu7cuY2OsSMsXEuSpF1OVcG6R48eAJx00kk8/fTTTJ8+nVmzZlFRUcEXvvAFFi9eDMCSJUs47bTTGDlyJE888QS//e1vOf7441m3bl2D4999993st99+jB8/vnqJkgkTJtTrd9JJJxFC4NFHH63VPmvWLLp3784XvvAFIJEknnLKKQwfPpzZs2dz/fXXM2PGDK655pqt3uPGjRs5/vjj2XvvvfnDH/7AI488wllnnVVdJH/00UfJz8/na1/7WnWMhx56aPX1t9xyC6tWreI3v/kNt99+e5Nep4Ze56OPPpqBAwfy5JNPkpOTw9/+9jdGjx5Njx49eOSRR/jZz37G3LlzOe+887Z6L5IkSVJDTj/9dAYNGsSNN9641T7r1q1jxIgRLFy4kHvuuYeHHnqIgoICRo8eTVFREZCYWXzCCSfw9ttvc99993Hrrbdy++231ysQr1y5ksGDB3P33Xczd+5cLrjgAq6//npuvvlmAA499FCmT58OwB//+EfmzZtXL9evcsYZZ1QXhats3ryZOXPmMGnSJABKSkoYPXo0zz77LLfccguPPfYYXbt2ZfTo0axevXqr93zTTTfx29/+lh/84Af8+c9/5mc/+xn5+fmUl5czYcIELr/8coDq9wF333139bWFhYWcc845fP3rX+epp55i+PDhPPPMM0ycOJFDDz2Uxx9/nEsuuYTp06dz8cUXbzWGG264geuvv57Zs2dzwgknAIn1x2fOnMl3v/tdnnjiCQ477DBOOOEEXnvtta2OsyNcKkSSJO0SqmYDLF26lG9+85vk5uYyevRonnrqKf72t7/x/PPPc8wxxwAwcuRI+vfvzy233MK9997Lv/71L3Jzc7nllluqxxs/fvxWn+uAAw6gXbt2dO3atdElRDp06MBxxx3HrFmzahVuZ82axWmnnUZqaioxRq688krOPvvsWgllZmYmF110Eddccw2dO3euN/aiRYvYsGEDd955J7m5uQB88YtfrD5/yCGHkJaWRu/evRuMsWfPnsyaNav6uCmvU02LFy9m5MiRHHbYYfz+978nIyMDgKuvvpojjzyy1ti9evVi1KhRvPHGGxx00EFbfb0kSZKkmlJSUrjmmmv42te+xg033MC+++5br89Pf/pTCgoKeO211+jUqRMAn//85+nfvz/33XcfF110EXPnzuXf//438+fP57DDDgNg+PDh9O/fn4EDB1aPNWrUKEaNGgUkit0jRoygsLCQX/ziF1xzzTXk5eUxePBgIJFvV822bsikSZOYNm0aL7/8cnU+/sQTT7Bly5bq5QwfeOAB3njjDd58800GDRoEwOjRoxk8eDA/+clPar0/qWn+/PmceeaZnHPOOdVtZ5xxBgDZ2dnVcTX0PqCoqIhbb72VE088sbrtnHPO4dhjj+XXv/41AMcddxwA11xzDddddx29e/euNcZ3v/td7rjjDv70pz9Vv3f4y1/+wpw5c2q9n/jiF7/IokWLuPHGG+sV8VuCM64lSVLS++STT0hPTyc9PZ3BgwezdOlSZs2aRc+ePZk/fz7dunWrTp4A2rVrx/HHH89LL70EwJAhQ9iwYQPnnHMOzzzzTItu6jhx4kT+8pe/8MknnwDw2muvsWjRIiZOnAgkCtDLly/njDPOoKysrPoxcuRIiouLeeONNxocd+DAgbR
"text/plain": [
"<Figure size 1800x720 with 2 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
},
{
"data": {
"image/png": "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MwCnnnoqzz//PNOmTWPmzJmUlJTwjW98gyVLlgCwdOlSzjjjDIYOHcqzzz7Lo48+yujRo1m3bl2N97/vvvvYb7/9OOmkk8qXKBk1alS1fqeeeiohBH7/+99Xap85cyadOnXiG9/4BlD6l+X0009n0KBBzJ49m0mTJjF9+nSuv/76Wp9xw4YNjB49mn322Ycnn3ySJ554gnPPPbc8JP/9739P69at+fa3v11e4+GHH15+/dSpU1mzZg3/+7//y913371D71NN7/Oxxx5L7969+cMf/kBWVhZ/+9vfGD58OJ07d+aJJ57gzjvvZO7cuVx44YW1PoskSZIkSdKe7swzz6Rv377ccssttfZZt24dgwcP5v333+f+++9n1qxZbN68meHDh5OXlweUziweM2YM7777Lg899BB33HEHd999d7WAePXq1fTr14/77ruPuXPncvHFFzNp0iR++tOfAnD44Yczbdo0AJ566inmzZtXLePa6qyzzioPhbfatGkTc+bMYdy4cQAUFBQwfPhwXnzxRaZOncrTTz9NTk4Ow4cP55NPPqn1mW+77TYeffRRfvSjH/GnP/2JO++8k9atW1NcXMyoUaO46qqrAMrzr/vuu6/82tzcXM4//3y+853v8NxzzzFo0CBeeOEFxo4dy+GHH84zzzzDhAkTmDZtGpdddlmtNUyZMoVJkyYxe/ZsxowZA5SuPz5jxgx++MMf8uyzz3LEEUcwZswY3nzzzVrvsytcKqQZ2/pbkWXLlvG9732PVq1aMXz4cJ577jn+9re/8fLLL3PccccBMHToUHr27MnUqVN54IEH+Oc//0mrVq2YOnVq+f1OOumkWl+rf//+tGjRgpycnG0uIdKmTRtGjBjBzJkzKwW3M2fO5IwzziA5OZkYI9dccw3nnXdepb9Y6enpXHrppVx//fW0b9++2r0XL17M+vXr+cUvfkGrVq0AOOGEE8rPH3bYYaSkpNCtW7caa+zSpQszZ84sP96R96miJUuWMHToUI444gh+97vfkZaWBsB1113HUUcdVeneXbt2ZdiwYbz99tsceOCBtb5fkiRJkiRJe6qkpCSuv/56vv3tbzNlyhT23Xffan1+/vOfs3nzZt58803atWsHwNFHH03Pnj156KGHuPTSS5k7dy7/+te/mD9/PkcccQQAgwYNomfPnvTu3bv8XsOGDWPYsGFAadg9ePBgcnNzefDBB7n++uvJzs6mX79+QGnOtHW2dU3GjRvH7bffzuuvv16eQz377LNs2bKlfBnfRx55hLfffptFixbRt29fAIYPH06/fv342c9+VimXq2j+/Pmcc845nH/++eVtZ511FgCZmZnlddWUf+Xl5XHHHXdwyimnlLedf/75DBkyhIcffhiAESNGAHD99ddzww030K1bt0r3+OEPf8g999zDH//4x/LM7M9//jNz5syplKOdcMIJLF68mFtuuaVaiF8fnHHdTH3xxRekpqaSmppKv379WLZsGTNnzqRLly7Mnz+fjh07lv8QAbRo0YLRo0fz2muvAXDQQQexfv16zj//fF544YV63dRx7Nix/PnPf+aLL74A4M0332Tx4sWMHTsWKA2gV6xYwVlnnUVRUVH519ChQ8nPz+ftt9+u8b69e/emZcuWnHPOOTzzzDPVliPZnqrB/I68T1u9//7
"text/plain": [
"<Figure size 1800x720 with 2 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
},
{
"data": {
"image/png": "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
2021-05-30 15:36:17 +02:00
"text/plain": [
2021-05-31 16:05:08 +02:00
"<Figure size 1800x720 with 2 Axes>"
2021-05-30 15:36:17 +02:00
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
2021-05-31 16:33:55 +02:00
"labels = [[{'age': {'60-69'}},{'hypertension': {'no'}},{'heart_disease': {'yes'}},{'bmi': {'obesity_1'}},{'gender': {'female'}},{'smoking_status': {'smokes'}}],\n",
" [{'age': {'70-79'}},{'hypertension': {'yes'}},{'heart_disease': {'yes'}},{'bmi': {'correct'}},{'gender': {'male'}},{'smoking_status': {'never_smoked'}}],\n",
" [{'age': {'70-79'}},{'hypertension': {'yes'}},{'heart_disease': {'yes'}},{'bmi': {'correct'}},{'gender': {'female'}},{'smoking_status': {'never_smoked'}}],\n",
" [{'age': {'30-39'}},{'hypertension': {'no'}},{'heart_disease': {'yes'}},{'bmi': {'obesity_2'}},{'avg_glucose_level': {'250-270'}},{'gender': {'female'}},{'smoking_status': {'smokes'}}]\n",
" \n",
" ]\n",
"\n",
"for i in labels:\n",
" naive_bayes = NaiveBayes(data_train, i, a_priori_prob)\n",
" posteriori, labels = naive_bayes.count_bayes()\n",
" plot_priori(labels,posteriori)"
2021-05-30 15:36:17 +02:00
]
2021-05-31 16:33:55 +02:00
},
{
"cell_type": "code",
"execution_count": null,
"id": "latter-sister",
"metadata": {},
"outputs": [],
"source": []
},
{
"cell_type": "code",
"execution_count": null,
"id": "animal-writing",
"metadata": {},
"outputs": [],
"source": []
},
{
"cell_type": "code",
"execution_count": null,
"id": "union-haven",
"metadata": {},
"outputs": [],
"source": []
2021-05-30 15:36:17 +02:00
}
],
"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.8.5"
}
},
"nbformat": 4,
"nbformat_minor": 5
}