2025-02-14 21:20:27 +04:00
{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Лабораторная 7"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Информация о диабете индейцев Пима"
]
},
{
"cell_type": "code",
2025-02-15 09:06:16 +04:00
"execution_count": 2,
2025-02-14 21:20:27 +04:00
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Index(['Pregnancies', 'Glucose', 'BloodPressure', 'SkinThickness', 'Insulin',\n",
" 'BMI', 'DiabetesPedigreeFunction', 'Age', 'Outcome'],\n",
" dtype='object')\n"
]
},
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>Pregnancies</th>\n",
" <th>Glucose</th>\n",
" <th>BloodPressure</th>\n",
" <th>SkinThickness</th>\n",
" <th>Insulin</th>\n",
" <th>BMI</th>\n",
" <th>DiabetesPedigreeFunction</th>\n",
" <th>Age</th>\n",
" <th>Outcome</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>6</td>\n",
" <td>148</td>\n",
" <td>72</td>\n",
" <td>35</td>\n",
" <td>0</td>\n",
" <td>33.6</td>\n",
" <td>0.627</td>\n",
" <td>50</td>\n",
" <td>1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>1</td>\n",
" <td>85</td>\n",
" <td>66</td>\n",
" <td>29</td>\n",
" <td>0</td>\n",
" <td>26.6</td>\n",
" <td>0.351</td>\n",
" <td>31</td>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>8</td>\n",
" <td>183</td>\n",
" <td>64</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>23.3</td>\n",
" <td>0.672</td>\n",
" <td>32</td>\n",
" <td>1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>1</td>\n",
" <td>89</td>\n",
" <td>66</td>\n",
" <td>23</td>\n",
" <td>94</td>\n",
" <td>28.1</td>\n",
" <td>0.167</td>\n",
" <td>21</td>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>0</td>\n",
" <td>137</td>\n",
" <td>40</td>\n",
" <td>35</td>\n",
" <td>168</td>\n",
" <td>43.1</td>\n",
" <td>2.288</td>\n",
" <td>33</td>\n",
" <td>1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>...</th>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" </tr>\n",
" <tr>\n",
" <th>763</th>\n",
" <td>10</td>\n",
" <td>101</td>\n",
" <td>76</td>\n",
" <td>48</td>\n",
" <td>180</td>\n",
" <td>32.9</td>\n",
" <td>0.171</td>\n",
" <td>63</td>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>764</th>\n",
" <td>2</td>\n",
" <td>122</td>\n",
" <td>70</td>\n",
" <td>27</td>\n",
" <td>0</td>\n",
" <td>36.8</td>\n",
" <td>0.340</td>\n",
" <td>27</td>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>765</th>\n",
" <td>5</td>\n",
" <td>121</td>\n",
" <td>72</td>\n",
" <td>23</td>\n",
" <td>112</td>\n",
" <td>26.2</td>\n",
" <td>0.245</td>\n",
" <td>30</td>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>766</th>\n",
" <td>1</td>\n",
" <td>126</td>\n",
" <td>60</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>30.1</td>\n",
" <td>0.349</td>\n",
" <td>47</td>\n",
" <td>1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>767</th>\n",
" <td>1</td>\n",
" <td>93</td>\n",
" <td>70</td>\n",
" <td>31</td>\n",
" <td>0</td>\n",
" <td>30.4</td>\n",
" <td>0.315</td>\n",
" <td>23</td>\n",
" <td>0</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"<p>768 rows × 9 columns</p>\n",
"</div>"
],
"text/plain": [
" Pregnancies Glucose BloodPressure SkinThickness Insulin BMI \\\n",
"0 6 148 72 35 0 33.6 \n",
"1 1 85 66 29 0 26.6 \n",
"2 8 183 64 0 0 23.3 \n",
"3 1 89 66 23 94 28.1 \n",
"4 0 137 40 35 168 43.1 \n",
".. ... ... ... ... ... ... \n",
"763 10 101 76 48 180 32.9 \n",
"764 2 122 70 27 0 36.8 \n",
"765 5 121 72 23 112 26.2 \n",
"766 1 126 60 0 0 30.1 \n",
"767 1 93 70 31 0 30.4 \n",
"\n",
" DiabetesPedigreeFunction Age Outcome \n",
"0 0.627 50 1 \n",
"1 0.351 31 0 \n",
"2 0.672 32 1 \n",
"3 0.167 21 0 \n",
"4 2.288 33 1 \n",
".. ... ... ... \n",
"763 0.171 63 0 \n",
"764 0.340 27 0 \n",
"765 0.245 30 0 \n",
"766 0.349 47 1 \n",
"767 0.315 23 0 \n",
"\n",
"[768 rows x 9 columns]"
]
},
2025-02-15 09:06:16 +04:00
"execution_count": 2,
2025-02-14 21:20:27 +04:00
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"import pandas as pd\n",
"import numpy as np\n",
"import skfuzzy as fuzz\n",
2025-02-15 09:06:16 +04:00
"import matplotlib as plt\n",
2025-02-14 21:20:27 +04:00
"from skfuzzy import control as ctrl\n",
"\n",
"df = pd.read_csv(\".//scv//diabetes.csv\")\n",
"print(df.columns)\n",
"df"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Создаем лингвистические переменные"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
2025-02-15 09:06:16 +04:00
"Входные: age(возраст) и bmi(ИМТ)\n",
2025-02-14 21:20:27 +04:00
"\n",
"Выходные: glucose(давление)"
]
},
{
"cell_type": "code",
2025-02-15 09:06:16 +04:00
"execution_count": 3,
2025-02-14 21:20:27 +04:00
"metadata": {},
"outputs": [],
"source": [
2025-02-15 09:06:16 +04:00
"age = ctrl.Antecedent(np.arange(df[\"Age\"].min(), df[\"Age\"].max() + 1, 1), \"age\")\n",
2025-02-14 21:20:27 +04:00
"bmi = ctrl.Antecedent(np.arange(df[\"BMI\"].min(), df[\"BMI\"].max() + 0.1, 0.1), \"bmi\")\n",
"glucose = ctrl.Consequent(np.arange(df[\"Glucose\"].min(), df[\"Glucose\"].max() + 0.1, 0.1), \"glucose\")"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Настраиваем их"
]
},
{
"cell_type": "code",
2025-02-15 09:06:16 +04:00
"execution_count": null,
2025-02-14 21:20:27 +04:00
"metadata": {},
"outputs": [
{
2025-02-15 09:06:16 +04:00
"ename": "AttributeError",
"evalue": "module 'matplotlib' has no attribute 'axvline'",
"output_type": "error",
"traceback": [
"\u001b[1;31m---------------------------------------------------------------------------\u001b[0m",
"\u001b[1;31mAttributeError\u001b[0m Traceback (most recent call last)",
"Cell \u001b[1;32mIn[4], line 5\u001b[0m\n\u001b[0;32m 2\u001b[0m age[\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mmiddle-aged\u001b[39m\u001b[38;5;124m\"\u001b[39m] \u001b[38;5;241m=\u001b[39m fuzz\u001b[38;5;241m.\u001b[39mtrapmf(age\u001b[38;5;241m.\u001b[39muniverse, [\u001b[38;5;241m18\u001b[39m, \u001b[38;5;241m30\u001b[39m, \u001b[38;5;241m45\u001b[39m, \u001b[38;5;241m60\u001b[39m])\n\u001b[0;32m 3\u001b[0m age[\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mold\u001b[39m\u001b[38;5;124m\"\u001b[39m] \u001b[38;5;241m=\u001b[39m fuzz\u001b[38;5;241m.\u001b[39msmf(age\u001b[38;5;241m.\u001b[39muniverse, \u001b[38;5;241m45\u001b[39m, \u001b[38;5;241m85\u001b[39m)\n\u001b[1;32m----> 5\u001b[0m \u001b[43mplt\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43maxvline\u001b[49m(x\u001b[38;5;241m=\u001b[39m\u001b[38;5;241m0\u001b[39m, color\u001b[38;5;241m=\u001b[39m\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mblack\u001b[39m\u001b[38;5;124m'\u001b[39m)\n\u001b[0;32m 6\u001b[0m plt\u001b[38;5;241m.\u001b[39mshow()\n\u001b[0;32m 8\u001b[0m bmi[\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mlow\u001b[39m\u001b[38;5;124m\"\u001b[39m] \u001b[38;5;241m=\u001b[39m fuzz\u001b[38;5;241m.\u001b[39mzmf(bmi\u001b[38;5;241m.\u001b[39muniverse, \u001b[38;5;241m12\u001b[39m, \u001b[38;5;241m18\u001b[39m)\n",
"File \u001b[1;32md:\\5_semester\\AIM\\rep\\AIM-PIbd-31-Razubaev-S-M\\.venv\\Lib\\site-packages\\matplotlib\\_api\\__init__.py:217\u001b[0m, in \u001b[0;36mcaching_module_getattr.<locals>.__getattr__\u001b[1;34m(name)\u001b[0m\n\u001b[0;32m 215\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m name \u001b[38;5;129;01min\u001b[39;00m props:\n\u001b[0;32m 216\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m props[name]\u001b[38;5;241m.\u001b[39m\u001b[38;5;21m__get__\u001b[39m(instance)\n\u001b[1;32m--> 217\u001b[0m \u001b[38;5;28;01mraise\u001b[39;00m \u001b[38;5;167;01mAttributeError\u001b[39;00m(\n\u001b[0;32m 218\u001b[0m \u001b[38;5;124mf\u001b[39m\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mmodule \u001b[39m\u001b[38;5;132;01m{\u001b[39;00m\u001b[38;5;28mcls\u001b[39m\u001b[38;5;241m.\u001b[39m\u001b[38;5;18m__module__\u001b[39m\u001b[38;5;132;01m!r}\u001b[39;00m\u001b[38;5;124m has no attribute \u001b[39m\u001b[38;5;132;01m{\u001b[39;00mname\u001b[38;5;132;01m!r}\u001b[39;00m\u001b[38;5;124m\"\u001b[39m)\n",
"\u001b[1;31mAttributeError\u001b[0m: module 'matplotlib' has no attribute 'axvline'"
2025-02-14 21:20:27 +04:00
]
}
],
"source": [
2025-02-15 09:06:16 +04:00
"age[\"young\"] = fuzz.zmf(age.universe, 7, 30)\n",
"age[\"middle-aged\"] = fuzz.trapmf(age.universe, [18, 30, 45, 60])\n",
"age[\"old\"] = fuzz.smf(age.universe, 45, 85)\n",
"age.view()\n",
"plt.axvline(x=0)\n",
"plt.show()\n",
2025-02-14 21:20:27 +04:00
"\n",
"bmi[\"low\"] = fuzz.zmf(bmi.universe, 12, 18)\n",
"bmi[\"normal\"] = fuzz.trapmf(bmi.universe, [16, 19, 24, 27])\n",
"bmi[\"high\"] = fuzz.smf(bmi.universe, 25, 27)\n",
"bmi.view()\n",
"\n",
"glucose[\"low\"] = fuzz.zmf(glucose.universe, 0, 80)\n",
"glucose[\"normal\"] = fuzz.trapmf(glucose.universe, [70, 80, 90, 100])\n",
"glucose[\"high\"] = fuzz.smf(glucose.universe, 90, 180)\n",
"glucose.view()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"База нечетких правил:"
]
},
{
"cell_type": "code",
2025-02-15 09:06:16 +04:00
"execution_count": null,
2025-02-14 21:20:27 +04:00
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"(<Figure size 640x480 with 1 Axes>, <Axes: >)"
]
},
"execution_count": 16,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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
"text/plain": [
"<Figure size 640x480 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"import numpy as np\n",
"import skfuzzy as fuzz\n",
"from skfuzzy import control as ctrl\n",
"\n",
2025-02-15 09:06:16 +04:00
"rule1 = ctrl.Rule(age[\"young\"] & bmi[\"low\"], glucose[\"low\"])\n",
"rule2 = ctrl.Rule(age[\"young\"] & bmi[\"normal\"], glucose[\"normal\"])\n",
"rule3 = ctrl.Rule(age[\"young\"] & bmi[\"high\"], glucose[\"normal\"])\n",
2025-02-14 21:20:27 +04:00
"\n",
2025-02-15 09:06:16 +04:00
"rule4 = ctrl.Rule(age[\"middle-aged\"] & bmi[\"low\"], glucose[\"normal\"])\n",
"rule5 = ctrl.Rule(age[\"middle-aged\"] & bmi[\"normal\"], glucose[\"normal\"])\n",
"rule6 = ctrl.Rule(age[\"middle-aged\"] & bmi[\"high\"], glucose[\"high\"])\n",
2025-02-14 21:20:27 +04:00
"\n",
2025-02-15 09:06:16 +04:00
"rule7 = ctrl.Rule(age[\"old\"] & bmi[\"low\"], glucose[\"low\"])\n",
"rule8 = ctrl.Rule(age[\"old\"] & bmi[\"normal\"], glucose[\"normal\"])\n",
"rule9 = ctrl.Rule(age[\"old\"] & bmi[\"high\"], glucose[\"high\"])\n",
2025-02-14 21:20:27 +04:00
"\n",
"rule1.view()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Создание нечеткой системы и добавление нечетких правил в базу знаний нечеткой системы"
]
},
{
"cell_type": "code",
"execution_count": 17,
"metadata": {},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"d:\\5_semester\\AIM\\rep\\AIM-PIbd-31-Razubaev-S-M\\.venv\\Lib\\site-packages\\skfuzzy\\control\\controlsystem.py:135: UserWarning: FigureCanvasAgg is non-interactive, and thus cannot be shown\n",
" fig.show()\n"
]
},
{
"data": {
"image/png": "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
"text/plain": [
"<Figure size 640x480 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"glucose_ctrl = ctrl.ControlSystem(\n",
" [\n",
" rule1,\n",
" rule2,\n",
" rule3,\n",
" rule4,\n",
" rule5,\n",
" rule6,\n",
" rule7,\n",
" rule8,\n",
" rule9,\n",
" ]\n",
")\n",
"\n",
"glucose_simulation = ctrl.ControlSystemSimulation(glucose_ctrl)\n",
"\n",
"glucose_ctrl.view()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Проверка расчета выходной переменной"
]
},
{
"cell_type": "code",
"execution_count": 19,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"=============\n",
" Antecedents \n",
"=============\n",
"Antecedent: age = 31\n",
" - young : 0.0\n",
" - middle-aged : 1.0\n",
" - old : 0.0\n",
"Antecedent: bmi = 25\n",
" - low : 0.0\n",
" - normal : 0.6666666666666666\n",
" - high : 0.0\n",
"\n",
"=======\n",
" Rules \n",
"=======\n",
"RULE #0:\n",
" IF age[young] AND bmi[low] THEN glucose[low]\n",
"\tAND aggregation function : fmin\n",
"\tOR aggregation function : fmax\n",
"\n",
" Aggregation (IF-clause):\n",
" - age[young] : 0.0\n",
" - bmi[low] : 0.0\n",
" age[young] AND bmi[low] = 0.0\n",
" Activation (THEN-clause):\n",
" glucose[low] : 0.0\n",
"\n",
"RULE #1:\n",
" IF age[young] AND bmi[normal] THEN glucose[normal]\n",
"\tAND aggregation function : fmin\n",
"\tOR aggregation function : fmax\n",
"\n",
" Aggregation (IF-clause):\n",
" - age[young] : 0.0\n",
" - bmi[normal] : 0.6666666666666666\n",
" age[young] AND bmi[normal] = 0.0\n",
" Activation (THEN-clause):\n",
" glucose[normal] : 0.0\n",
"\n",
"RULE #2:\n",
" IF age[young] AND bmi[high] THEN glucose[normal]\n",
"\tAND aggregation function : fmin\n",
"\tOR aggregation function : fmax\n",
"\n",
" Aggregation (IF-clause):\n",
" - age[young] : 0.0\n",
" - bmi[high] : 0.0\n",
" age[young] AND bmi[high] = 0.0\n",
" Activation (THEN-clause):\n",
" glucose[normal] : 0.0\n",
"\n",
"RULE #3:\n",
" IF age[middle-aged] AND bmi[low] THEN glucose[normal]\n",
"\tAND aggregation function : fmin\n",
"\tOR aggregation function : fmax\n",
"\n",
" Aggregation (IF-clause):\n",
" - age[middle-aged] : 1.0\n",
" - bmi[low] : 0.0\n",
" age[middle-aged] AND bmi[low] = 0.0\n",
" Activation (THEN-clause):\n",
" glucose[normal] : 0.0\n",
"\n",
"RULE #4:\n",
" IF age[middle-aged] AND bmi[normal] THEN glucose[normal]\n",
"\tAND aggregation function : fmin\n",
"\tOR aggregation function : fmax\n",
"\n",
" Aggregation (IF-clause):\n",
" - age[middle-aged] : 1.0\n",
" - bmi[normal] : 0.6666666666666666\n",
" age[middle-aged] AND bmi[normal] = 0.6666666666666666\n",
" Activation (THEN-clause):\n",
" glucose[normal] : 0.6666666666666666\n",
"\n",
"RULE #5:\n",
" IF age[middle-aged] AND bmi[high] THEN glucose[high]\n",
"\tAND aggregation function : fmin\n",
"\tOR aggregation function : fmax\n",
"\n",
" Aggregation (IF-clause):\n",
" - age[middle-aged] : 1.0\n",
" - bmi[high] : 0.0\n",
" age[middle-aged] AND bmi[high] = 0.0\n",
" Activation (THEN-clause):\n",
" glucose[high] : 0.0\n",
"\n",
"RULE #6:\n",
" IF age[old] AND bmi[low] THEN glucose[low]\n",
"\tAND aggregation function : fmin\n",
"\tOR aggregation function : fmax\n",
"\n",
" Aggregation (IF-clause):\n",
" - age[old] : 0.0\n",
" - bmi[low] : 0.0\n",
" age[old] AND bmi[low] = 0.0\n",
" Activation (THEN-clause):\n",
" glucose[low] : 0.0\n",
"\n",
"RULE #7:\n",
" IF age[old] AND bmi[normal] THEN glucose[normal]\n",
"\tAND aggregation function : fmin\n",
"\tOR aggregation function : fmax\n",
"\n",
" Aggregation (IF-clause):\n",
" - age[old] : 0.0\n",
" - bmi[normal] : 0.6666666666666666\n",
" age[old] AND bmi[normal] = 0.0\n",
" Activation (THEN-clause):\n",
" glucose[normal] : 0.0\n",
"\n",
"RULE #8:\n",
" IF age[old] AND bmi[high] THEN glucose[high]\n",
"\tAND aggregation function : fmin\n",
"\tOR aggregation function : fmax\n",
"\n",
" Aggregation (IF-clause):\n",
" - age[old] : 0.0\n",
" - bmi[high] : 0.0\n",
" age[old] AND bmi[high] = 0.0\n",
" Activation (THEN-clause):\n",
" glucose[high] : 0.0\n",
"\n",
"\n",
"==============================\n",
" Intermediaries and Conquests \n",
"==============================\n",
"Consequent: glucose = 85.00000000000001\n",
" low:\n",
" Accumulate using accumulation_max : 0.0\n",
" normal:\n",
" Accumulate using accumulation_max : 0.6666666666666666\n",
" high:\n",
" Accumulate using accumulation_max : 0.0\n",
"\n"
]
},
{
"data": {
"text/plain": [
"np.float64(85.00000000000001)"
]
},
"execution_count": 19,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"glucose_simulation.input[\"age\"] = 31\n",
"glucose_simulation.input[\"bmi\"] = 25\n",
"glucose_simulation.compute()\n",
"\n",
"glucose_simulation.print_state()\n",
"glucose_simulation.output[\"glucose\"]"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Визуализации функции принадлежности"
]
},
{
"cell_type": "code",
"execution_count": 20,
"metadata": {},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"d:\\5_semester\\AIM\\rep\\AIM-PIbd-31-Razubaev-S-M\\.venv\\Lib\\site-packages\\skfuzzy\\control\\fuzzyvariable.py:125: UserWarning: FigureCanvasAgg is non-interactive, and thus cannot be shown\n",
" fig.show()\n"
]
},
{
"data": {
"image/png": "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
"text/plain": [
"<Figure size 640x480 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"glucose.view(sim=glucose_simulation)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Оценка качества"
]
},
{
"cell_type": "code",
"execution_count": 25,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>Age</th>\n",
" <th>BMI</th>\n",
" <th>Glucose</th>\n",
" <th>glucose_pred</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>115</th>\n",
" <td>61</td>\n",
" <td>31.2</td>\n",
" <td>146</td>\n",
" <td>156.076444</td>\n",
" </tr>\n",
" <tr>\n",
" <th>116</th>\n",
" <td>38</td>\n",
" <td>34.0</td>\n",
" <td>124</td>\n",
" <td>164.363268</td>\n",
" </tr>\n",
" <tr>\n",
" <th>117</th>\n",
" <td>25</td>\n",
" <td>33.7</td>\n",
" <td>78</td>\n",
" <td>155.611863</td>\n",
" </tr>\n",
" <tr>\n",
" <th>118</th>\n",
" <td>22</td>\n",
" <td>28.2</td>\n",
" <td>97</td>\n",
" <td>142.749562</td>\n",
" </tr>\n",
" <tr>\n",
" <th>119</th>\n",
" <td>21</td>\n",
" <td>23.2</td>\n",
" <td>99</td>\n",
" <td>85.000000</td>\n",
" </tr>\n",
" <tr>\n",
" <th>120</th>\n",
" <td>25</td>\n",
" <td>53.2</td>\n",
" <td>162</td>\n",
" <td>155.611863</td>\n",
" </tr>\n",
" <tr>\n",
" <th>121</th>\n",
" <td>24</td>\n",
" <td>34.2</td>\n",
" <td>111</td>\n",
" <td>152.260658</td>\n",
" </tr>\n",
" <tr>\n",
" <th>122</th>\n",
" <td>23</td>\n",
" <td>33.6</td>\n",
" <td>107</td>\n",
" <td>148.066203</td>\n",
" </tr>\n",
" <tr>\n",
" <th>123</th>\n",
" <td>69</td>\n",
" <td>26.8</td>\n",
" <td>132</td>\n",
" <td>158.239802</td>\n",
" </tr>\n",
" <tr>\n",
" <th>124</th>\n",
" <td>23</td>\n",
" <td>33.3</td>\n",
" <td>113</td>\n",
" <td>148.066203</td>\n",
" </tr>\n",
" <tr>\n",
" <th>125</th>\n",
" <td>26</td>\n",
" <td>55.0</td>\n",
" <td>88</td>\n",
" <td>158.305050</td>\n",
" </tr>\n",
" <tr>\n",
" <th>126</th>\n",
" <td>30</td>\n",
" <td>42.9</td>\n",
" <td>120</td>\n",
" <td>164.363268</td>\n",
" </tr>\n",
" <tr>\n",
" <th>127</th>\n",
" <td>23</td>\n",
" <td>33.3</td>\n",
" <td>118</td>\n",
" <td>148.066203</td>\n",
" </tr>\n",
" <tr>\n",
" <th>128</th>\n",
" <td>40</td>\n",
" <td>34.5</td>\n",
" <td>117</td>\n",
" <td>164.363268</td>\n",
" </tr>\n",
" <tr>\n",
" <th>129</th>\n",
" <td>62</td>\n",
" <td>27.9</td>\n",
" <td>105</td>\n",
" <td>156.763261</td>\n",
" </tr>\n",
" <tr>\n",
" <th>130</th>\n",
" <td>33</td>\n",
" <td>29.7</td>\n",
" <td>173</td>\n",
" <td>164.363268</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" Age BMI Glucose glucose_pred\n",
"115 61 31.2 146 156.076444\n",
"116 38 34.0 124 164.363268\n",
"117 25 33.7 78 155.611863\n",
"118 22 28.2 97 142.749562\n",
"119 21 23.2 99 85.000000\n",
"120 25 53.2 162 155.611863\n",
"121 24 34.2 111 152.260658\n",
"122 23 33.6 107 148.066203\n",
"123 69 26.8 132 158.239802\n",
"124 23 33.3 113 148.066203\n",
"125 26 55.0 88 158.305050\n",
"126 30 42.9 120 164.363268\n",
"127 23 33.3 118 148.066203\n",
"128 40 34.5 117 164.363268\n",
"129 62 27.9 105 156.763261\n",
"130 33 29.7 173 164.363268"
]
},
"execution_count": 25,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"def fuzzy_pred(row):\n",
" glucose_simulation.input[\"age\"] = row[\"Age\"]\n",
" glucose_simulation.input[\"bmi\"] = row[\"BMI\"]\n",
" glucose_simulation.compute()\n",
" return glucose_simulation.output[\"glucose\"]\n",
"\n",
"result = df.copy()\n",
"\n",
"result[\"glucose_pred\"] = result.apply(fuzzy_pred, axis=1)\n",
"\n",
"result.loc[115:130, [\"Age\", \"BMI\", \"Glucose\", \"glucose_pred\"]]"
]
},
{
"cell_type": "code",
"execution_count": 29,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"{'RMSE': 44.436073098835, 'RMAE': 6.078634343122391, 'R2': -0.9341083419845992}"
]
},
"execution_count": 29,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"import math\n",
"from sklearn import metrics\n",
"\n",
"rmetrics = {}\n",
"rmetrics[\"RMSE\"] = math.sqrt(\n",
" metrics.mean_squared_error(result[\"Glucose\"], result[\"glucose_pred\"])\n",
")\n",
"rmetrics[\"RMAE\"] = math.sqrt(\n",
" metrics.mean_absolute_error(result[\"Glucose\"], result[\"glucose_pred\"])\n",
")\n",
"rmetrics[\"R2\"] = metrics.r2_score(\n",
" result[\"Glucose\"], result[\"glucose_pred\"]\n",
")\n",
"rmetrics"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Вывод: данные прогнозируются с низкой точностью и допускается множество ошибок"
]
}
],
"metadata": {
"kernelspec": {
"display_name": ".venv",
"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.12.6"
}
},
"nbformat": 4,
"nbformat_minor": 2
}