1583 lines
418 KiB
Plaintext
1583 lines
418 KiB
Plaintext
|
{
|
|||
|
"cells": [
|
|||
|
{
|
|||
|
"cell_type": "markdown",
|
|||
|
"metadata": {},
|
|||
|
"source": [
|
|||
|
"## Управление потоком жидкости"
|
|||
|
]
|
|||
|
},
|
|||
|
{
|
|||
|
"cell_type": "markdown",
|
|||
|
"metadata": {},
|
|||
|
"source": [
|
|||
|
"<img src=\"assets/fis.png\" width=\"600\" style=\"background-color: white\">"
|
|||
|
]
|
|||
|
},
|
|||
|
{
|
|||
|
"cell_type": "markdown",
|
|||
|
"metadata": {},
|
|||
|
"source": [
|
|||
|
"#### Создание лингвистических переменных\n",
|
|||
|
"\n",
|
|||
|
"Входные X: level (уровень жидкости) и flow (расход жидкости) \\\n",
|
|||
|
"Выходные Y: influx (приток жидкости)"
|
|||
|
]
|
|||
|
},
|
|||
|
{
|
|||
|
"cell_type": "code",
|
|||
|
"execution_count": 1,
|
|||
|
"metadata": {},
|
|||
|
"outputs": [],
|
|||
|
"source": [
|
|||
|
"import numpy as np\n",
|
|||
|
"from skfuzzy import control as ctrl\n",
|
|||
|
"\n",
|
|||
|
"level = ctrl.Antecedent(np.arange(1.5, 9.0, 0.1), \"level\")\n",
|
|||
|
"flow = ctrl.Antecedent(np.arange(0, 0.6, 0.01), \"flow\")\n",
|
|||
|
"influx = ctrl.Consequent(np.arange(0, 0.6, 0.01), \"influx\")"
|
|||
|
]
|
|||
|
},
|
|||
|
{
|
|||
|
"cell_type": "markdown",
|
|||
|
"metadata": {},
|
|||
|
"source": [
|
|||
|
"#### Формирование нечетких переменных для лингвистических переменных и их визуализация"
|
|||
|
]
|
|||
|
},
|
|||
|
{
|
|||
|
"cell_type": "code",
|
|||
|
"execution_count": 2,
|
|||
|
"metadata": {},
|
|||
|
"outputs": [
|
|||
|
{
|
|||
|
"name": "stderr",
|
|||
|
"output_type": "stream",
|
|||
|
"text": [
|
|||
|
"/Users/user/Projects/python/ckmai/.venv/lib/python3.12/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"
|
|||
|
},
|
|||
|
{
|
|||
|
"data": {
|
|||
|
"image/png": "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
|
|||
|
"text/plain": [
|
|||
|
"<Figure size 640x480 with 1 Axes>"
|
|||
|
]
|
|||
|
},
|
|||
|
"metadata": {},
|
|||
|
"output_type": "display_data"
|
|||
|
},
|
|||
|
{
|
|||
|
"data": {
|
|||
|
"image/png": "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
|
|||
|
"text/plain": [
|
|||
|
"<Figure size 640x480 with 1 Axes>"
|
|||
|
]
|
|||
|
},
|
|||
|
"metadata": {},
|
|||
|
"output_type": "display_data"
|
|||
|
}
|
|||
|
],
|
|||
|
"source": [
|
|||
|
"import skfuzzy as fuzz\n",
|
|||
|
"\n",
|
|||
|
"level[\"low\"] = fuzz.zmf(level.universe, 2, 4)\n",
|
|||
|
"level[\"average\"] = fuzz.trapmf(level.universe, [2, 4, 6, 8])\n",
|
|||
|
"level[\"high\"] = fuzz.smf(level.universe, 6, 8)\n",
|
|||
|
"level.view()\n",
|
|||
|
"\n",
|
|||
|
"flow[\"low\"] = fuzz.zmf(flow.universe, 0.2, 0.3)\n",
|
|||
|
"flow[\"average\"] = fuzz.trapmf(flow.universe, [0.15, 0.25, 0.35, 0.45])\n",
|
|||
|
"flow[\"high\"] = fuzz.smf(flow.universe, 0.3, 0.4)\n",
|
|||
|
"flow.view()\n",
|
|||
|
"\n",
|
|||
|
"influx[\"low\"] = fuzz.zmf(influx.universe, 0.2, 0.3)\n",
|
|||
|
"influx[\"average\"] = fuzz.trapmf(influx.universe, [0.15, 0.25, 0.35, 0.45])\n",
|
|||
|
"influx[\"high\"] = fuzz.smf(influx.universe, 0.3, 0.4)\n",
|
|||
|
"influx.view()"
|
|||
|
]
|
|||
|
},
|
|||
|
{
|
|||
|
"cell_type": "markdown",
|
|||
|
"metadata": {},
|
|||
|
"source": [
|
|||
|
"#### Формирование и визуализация базы нечетких правил\n",
|
|||
|
"\n",
|
|||
|
"В случае ошибки необходимо в файле\n",
|
|||
|
"```\n",
|
|||
|
".venv/lib/python3.13/site-packages/skfuzzy/control/visualization.py\n",
|
|||
|
"```\n",
|
|||
|
"удалить лишний отступ на 182 строке, должно быть:\n",
|
|||
|
"```python\n",
|
|||
|
" if not matplotlib_present:\n",
|
|||
|
" raise ImportError(\"`ControlSystemVisualizer` can only be used \"\n",
|
|||
|
" \"with `matplotlib` present in the system.\")\n",
|
|||
|
"\n",
|
|||
|
" self.ctrl = control_system\n",
|
|||
|
"\n",
|
|||
|
" self.fig, self.ax = plt.subplots()\n",
|
|||
|
"```"
|
|||
|
]
|
|||
|
},
|
|||
|
{
|
|||
|
"cell_type": "code",
|
|||
|
"execution_count": 3,
|
|||
|
"metadata": {},
|
|||
|
"outputs": [
|
|||
|
{
|
|||
|
"data": {
|
|||
|
"text/plain": [
|
|||
|
"(<Figure size 640x480 with 1 Axes>, <Axes: >)"
|
|||
|
]
|
|||
|
},
|
|||
|
"execution_count": 3,
|
|||
|
"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": [
|
|||
|
"rule1 = ctrl.Rule(level[\"low\"] & flow[\"high\"], influx[\"high\"])\n",
|
|||
|
"rule2 = ctrl.Rule(level[\"low\"] & flow[\"average\"], influx[\"high\"])\n",
|
|||
|
"rule3 = ctrl.Rule(level[\"low\"] & flow[\"low\"], influx[\"average\"])\n",
|
|||
|
"rule4 = ctrl.Rule(level[\"average\"] & flow[\"high\"], influx[\"high\"])\n",
|
|||
|
"rule5 = ctrl.Rule(level[\"average\"] & flow[\"average\"], influx[\"average\"])\n",
|
|||
|
"rule6 = ctrl.Rule(level[\"average\"] & flow[\"low\"], influx[\"average\"])\n",
|
|||
|
"rule7 = ctrl.Rule(level[\"high\"] & flow[\"high\"], influx[\"average\"])\n",
|
|||
|
"rule8 = ctrl.Rule(level[\"high\"] & flow[\"average\"], influx[\"low\"])\n",
|
|||
|
"rule9 = ctrl.Rule(level[\"high\"] & flow[\"low\"], influx[\"low\"])\n",
|
|||
|
"\n",
|
|||
|
"rule1.view()"
|
|||
|
]
|
|||
|
},
|
|||
|
{
|
|||
|
"cell_type": "markdown",
|
|||
|
"metadata": {},
|
|||
|
"source": [
|
|||
|
"#### Создание нечеткой системы и добавление нечетких правил в базу знаний нечеткой системы"
|
|||
|
]
|
|||
|
},
|
|||
|
{
|
|||
|
"cell_type": "code",
|
|||
|
"execution_count": 4,
|
|||
|
"metadata": {},
|
|||
|
"outputs": [],
|
|||
|
"source": [
|
|||
|
"influx_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",
|
|||
|
"influxes = ctrl.ControlSystemSimulation(influx_ctrl)"
|
|||
|
]
|
|||
|
},
|
|||
|
{
|
|||
|
"cell_type": "markdown",
|
|||
|
"metadata": {},
|
|||
|
"source": [
|
|||
|
"#### Пример расчета выходной переменной influx на основе входных переменных level и flow\n",
|
|||
|
"\n",
|
|||
|
"Система также формирует подробный журнал выполнения процесса нечеткого логического вывода"
|
|||
|
]
|
|||
|
},
|
|||
|
{
|
|||
|
"cell_type": "code",
|
|||
|
"execution_count": 5,
|
|||
|
"metadata": {},
|
|||
|
"outputs": [
|
|||
|
{
|
|||
|
"name": "stdout",
|
|||
|
"output_type": "stream",
|
|||
|
"text": [
|
|||
|
"=============\n",
|
|||
|
" Antecedents \n",
|
|||
|
"=============\n",
|
|||
|
"Antecedent: level = 2.5\n",
|
|||
|
" - low : 0.875\n",
|
|||
|
" - average : 0.25\n",
|
|||
|
" - high : 0.0\n",
|
|||
|
"Antecedent: flow = 0.4\n",
|
|||
|
" - low : 0.0\n",
|
|||
|
" - average : 0.4999999999999997\n",
|
|||
|
" - high : 1.0\n",
|
|||
|
"\n",
|
|||
|
"=======\n",
|
|||
|
" Rules \n",
|
|||
|
"=======\n",
|
|||
|
"RULE #0:\n",
|
|||
|
" IF level[low] AND flow[high] THEN influx[high]\n",
|
|||
|
"\tAND aggregation function : fmin\n",
|
|||
|
"\tOR aggregation function : fmax\n",
|
|||
|
"\n",
|
|||
|
" Aggregation (IF-clause):\n",
|
|||
|
" - level[low] : 0.875\n",
|
|||
|
" - flow[high] : 1.0\n",
|
|||
|
" level[low] AND flow[high] = 0.875\n",
|
|||
|
" Activation (THEN-clause):\n",
|
|||
|
" influx[high] : 0.875\n",
|
|||
|
"\n",
|
|||
|
"RULE #1:\n",
|
|||
|
" IF level[low] AND flow[average] THEN influx[high]\n",
|
|||
|
"\tAND aggregation function : fmin\n",
|
|||
|
"\tOR aggregation function : fmax\n",
|
|||
|
"\n",
|
|||
|
" Aggregation (IF-clause):\n",
|
|||
|
" - level[low] : 0.875\n",
|
|||
|
" - flow[average] : 0.4999999999999997\n",
|
|||
|
" level[low] AND flow[average] = 0.4999999999999997\n",
|
|||
|
" Activation (THEN-clause):\n",
|
|||
|
" influx[high] : 0.4999999999999997\n",
|
|||
|
"\n",
|
|||
|
"RULE #2:\n",
|
|||
|
" IF level[low] AND flow[low] THEN influx[average]\n",
|
|||
|
"\tAND aggregation function : fmin\n",
|
|||
|
"\tOR aggregation function : fmax\n",
|
|||
|
"\n",
|
|||
|
" Aggregation (IF-clause):\n",
|
|||
|
" - level[low] : 0.875\n",
|
|||
|
" - flow[low] : 0.0\n",
|
|||
|
" level[low] AND flow[low] = 0.0\n",
|
|||
|
" Activation (THEN-clause):\n",
|
|||
|
" influx[average] : 0.0\n",
|
|||
|
"\n",
|
|||
|
"RULE #3:\n",
|
|||
|
" IF level[average] AND flow[high] THEN influx[high]\n",
|
|||
|
"\tAND aggregation function : fmin\n",
|
|||
|
"\tOR aggregation function : fmax\n",
|
|||
|
"\n",
|
|||
|
" Aggregation (IF-clause):\n",
|
|||
|
" - level[average] : 0.25\n",
|
|||
|
" - flow[high] : 1.0\n",
|
|||
|
" level[average] AND flow[high] = 0.25\n",
|
|||
|
" Activation (THEN-clause):\n",
|
|||
|
" influx[high] : 0.25\n",
|
|||
|
"\n",
|
|||
|
"RULE #4:\n",
|
|||
|
" IF level[average] AND flow[average] THEN influx[average]\n",
|
|||
|
"\tAND aggregation function : fmin\n",
|
|||
|
"\tOR aggregation function : fmax\n",
|
|||
|
"\n",
|
|||
|
" Aggregation (IF-clause):\n",
|
|||
|
" - level[average] : 0.25\n",
|
|||
|
" - flow[average] : 0.4999999999999997\n",
|
|||
|
" level[average] AND flow[average] = 0.25\n",
|
|||
|
" Activation (THEN-clause):\n",
|
|||
|
" influx[average] : 0.25\n",
|
|||
|
"\n",
|
|||
|
"RULE #5:\n",
|
|||
|
" IF level[average] AND flow[low] THEN influx[average]\n",
|
|||
|
"\tAND aggregation function : fmin\n",
|
|||
|
"\tOR aggregation function : fmax\n",
|
|||
|
"\n",
|
|||
|
" Aggregation (IF-clause):\n",
|
|||
|
" - level[average] : 0.25\n",
|
|||
|
" - flow[low] : 0.0\n",
|
|||
|
" level[average] AND flow[low] = 0.0\n",
|
|||
|
" Activation (THEN-clause):\n",
|
|||
|
" influx[average] : 0.0\n",
|
|||
|
"\n",
|
|||
|
"RULE #6:\n",
|
|||
|
" IF level[high] AND flow[high] THEN influx[average]\n",
|
|||
|
"\tAND aggregation function : fmin\n",
|
|||
|
"\tOR aggregation function : fmax\n",
|
|||
|
"\n",
|
|||
|
" Aggregation (IF-clause):\n",
|
|||
|
" - level[high] : 0.0\n",
|
|||
|
" - flow[high] : 1.0\n",
|
|||
|
" level[high] AND flow[high] = 0.0\n",
|
|||
|
" Activation (THEN-clause):\n",
|
|||
|
" influx[average] : 0.0\n",
|
|||
|
"\n",
|
|||
|
"RULE #7:\n",
|
|||
|
" IF level[high] AND flow[average] THEN influx[low]\n",
|
|||
|
"\tAND aggregation function : fmin\n",
|
|||
|
"\tOR aggregation function : fmax\n",
|
|||
|
"\n",
|
|||
|
" Aggregation (IF-clause):\n",
|
|||
|
" - level[high] : 0.0\n",
|
|||
|
" - flow[average] : 0.4999999999999997\n",
|
|||
|
" level[high] AND flow[average] = 0.0\n",
|
|||
|
" Activation (THEN-clause):\n",
|
|||
|
" influx[low] : 0.0\n",
|
|||
|
"\n",
|
|||
|
"RULE #8:\n",
|
|||
|
" IF level[high] AND flow[low] THEN influx[low]\n",
|
|||
|
"\tAND aggregation function : fmin\n",
|
|||
|
"\tOR aggregation function : fmax\n",
|
|||
|
"\n",
|
|||
|
" Aggregation (IF-clause):\n",
|
|||
|
" - level[high] : 0.0\n",
|
|||
|
" - flow[low] : 0.0\n",
|
|||
|
" level[high] AND flow[low] = 0.0\n",
|
|||
|
" Activation (THEN-clause):\n",
|
|||
|
" influx[low] : 0.0\n",
|
|||
|
"\n",
|
|||
|
"\n",
|
|||
|
"==============================\n",
|
|||
|
" Intermediaries and Conquests \n",
|
|||
|
"==============================\n",
|
|||
|
"Consequent: influx = 0.4315251220586045\n",
|
|||
|
" low:\n",
|
|||
|
" Accumulate using accumulation_max : 0.0\n",
|
|||
|
" average:\n",
|
|||
|
" Accumulate using accumulation_max : 0.25\n",
|
|||
|
" high:\n",
|
|||
|
" Accumulate using accumulation_max : 0.875\n",
|
|||
|
"\n"
|
|||
|
]
|
|||
|
},
|
|||
|
{
|
|||
|
"data": {
|
|||
|
"text/plain": [
|
|||
|
"np.float64(0.4315251220586045)"
|
|||
|
]
|
|||
|
},
|
|||
|
"execution_count": 5,
|
|||
|
"metadata": {},
|
|||
|
"output_type": "execute_result"
|
|||
|
}
|
|||
|
],
|
|||
|
"source": [
|
|||
|
"influxes.input[\"level\"] = 2.5\n",
|
|||
|
"influxes.input[\"flow\"] = 0.4\n",
|
|||
|
"influxes.compute()\n",
|
|||
|
"influxes.print_state()\n",
|
|||
|
"influxes.output[\"influx\"]"
|
|||
|
]
|
|||
|
},
|
|||
|
{
|
|||
|
"cell_type": "markdown",
|
|||
|
"metadata": {},
|
|||
|
"source": [
|
|||
|
"#### Визуализация функции принадлежности для выходной переменной influx\n",
|
|||
|
"\n",
|
|||
|
"Функция получена в процессе аккумуляции и используется для дефаззификации значения выходной переменной influx"
|
|||
|
]
|
|||
|
},
|
|||
|
{
|
|||
|
"cell_type": "code",
|
|||
|
"execution_count": 6,
|
|||
|
"metadata": {},
|
|||
|
"outputs": [
|
|||
|
{
|
|||
|
"data": {
|
|||
|
"image/png": "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
|
|||
|
"text/plain": [
|
|||
|
"<Figure size 640x480 with 1 Axes>"
|
|||
|
]
|
|||
|
},
|
|||
|
"metadata": {},
|
|||
|
"output_type": "display_data"
|
|||
|
}
|
|||
|
],
|
|||
|
"source": [
|
|||
|
"influx.view(sim=influxes)"
|
|||
|
]
|
|||
|
},
|
|||
|
{
|
|||
|
"cell_type": "markdown",
|
|||
|
"metadata": {},
|
|||
|
"source": [
|
|||
|
"## Пример решения задачи регрессии на основе нечеткого логического вывода"
|
|||
|
]
|
|||
|
},
|
|||
|
{
|
|||
|
"cell_type": "markdown",
|
|||
|
"metadata": {},
|
|||
|
"source": [
|
|||
|
"#### Загрузка данных"
|
|||
|
]
|
|||
|
},
|
|||
|
{
|
|||
|
"cell_type": "code",
|
|||
|
"execution_count": 7,
|
|||
|
"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>T</th>\n",
|
|||
|
" <th>Al2O3</th>\n",
|
|||
|
" <th>TiO2</th>\n",
|
|||
|
" <th>Density</th>\n",
|
|||
|
" </tr>\n",
|
|||
|
" </thead>\n",
|
|||
|
" <tbody>\n",
|
|||
|
" <tr>\n",
|
|||
|
" <th>0</th>\n",
|
|||
|
" <td>20</td>\n",
|
|||
|
" <td>0.0</td>\n",
|
|||
|
" <td>0.0</td>\n",
|
|||
|
" <td>1.06250</td>\n",
|
|||
|
" </tr>\n",
|
|||
|
" <tr>\n",
|
|||
|
" <th>1</th>\n",
|
|||
|
" <td>25</td>\n",
|
|||
|
" <td>0.0</td>\n",
|
|||
|
" <td>0.0</td>\n",
|
|||
|
" <td>1.05979</td>\n",
|
|||
|
" </tr>\n",
|
|||
|
" <tr>\n",
|
|||
|
" <th>2</th>\n",
|
|||
|
" <td>35</td>\n",
|
|||
|
" <td>0.0</td>\n",
|
|||
|
" <td>0.0</td>\n",
|
|||
|
" <td>1.05404</td>\n",
|
|||
|
" </tr>\n",
|
|||
|
" </tbody>\n",
|
|||
|
"</table>\n",
|
|||
|
"</div>"
|
|||
|
],
|
|||
|
"text/plain": [
|
|||
|
" T Al2O3 TiO2 Density\n",
|
|||
|
"0 20 0.0 0.0 1.06250\n",
|
|||
|
"1 25 0.0 0.0 1.05979\n",
|
|||
|
"2 35 0.0 0.0 1.05404"
|
|||
|
]
|
|||
|
},
|
|||
|
"metadata": {},
|
|||
|
"output_type": "display_data"
|
|||
|
},
|
|||
|
{
|
|||
|
"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>T</th>\n",
|
|||
|
" <th>Al2O3</th>\n",
|
|||
|
" <th>TiO2</th>\n",
|
|||
|
" <th>Density</th>\n",
|
|||
|
" </tr>\n",
|
|||
|
" </thead>\n",
|
|||
|
" <tbody>\n",
|
|||
|
" <tr>\n",
|
|||
|
" <th>0</th>\n",
|
|||
|
" <td>30</td>\n",
|
|||
|
" <td>0.00</td>\n",
|
|||
|
" <td>0.0</td>\n",
|
|||
|
" <td>1.05696</td>\n",
|
|||
|
" </tr>\n",
|
|||
|
" <tr>\n",
|
|||
|
" <th>1</th>\n",
|
|||
|
" <td>55</td>\n",
|
|||
|
" <td>0.00</td>\n",
|
|||
|
" <td>0.0</td>\n",
|
|||
|
" <td>1.04158</td>\n",
|
|||
|
" </tr>\n",
|
|||
|
" <tr>\n",
|
|||
|
" <th>2</th>\n",
|
|||
|
" <td>25</td>\n",
|
|||
|
" <td>0.05</td>\n",
|
|||
|
" <td>0.0</td>\n",
|
|||
|
" <td>1.08438</td>\n",
|
|||
|
" </tr>\n",
|
|||
|
" </tbody>\n",
|
|||
|
"</table>\n",
|
|||
|
"</div>"
|
|||
|
],
|
|||
|
"text/plain": [
|
|||
|
" T Al2O3 TiO2 Density\n",
|
|||
|
"0 30 0.00 0.0 1.05696\n",
|
|||
|
"1 55 0.00 0.0 1.04158\n",
|
|||
|
"2 25 0.05 0.0 1.08438"
|
|||
|
]
|
|||
|
},
|
|||
|
"metadata": {},
|
|||
|
"output_type": "display_data"
|
|||
|
}
|
|||
|
],
|
|||
|
"source": [
|
|||
|
"import pandas as pd\n",
|
|||
|
"\n",
|
|||
|
"\n",
|
|||
|
"density_train = pd.read_csv(\"data/density/density_train.csv\", sep=\";\", decimal=\",\")\n",
|
|||
|
"density_test = pd.read_csv(\"data/density/density_test.csv\", sep=\";\", decimal=\",\")\n",
|
|||
|
"\n",
|
|||
|
"display(density_train.head(3))\n",
|
|||
|
"display(density_test.head(3))"
|
|||
|
]
|
|||
|
},
|
|||
|
{
|
|||
|
"cell_type": "markdown",
|
|||
|
"metadata": {},
|
|||
|
"source": [
|
|||
|
"#### Инициализация лингвистических переменных и автоматическое формирование нечетких переменных"
|
|||
|
]
|
|||
|
},
|
|||
|
{
|
|||
|
"cell_type": "code",
|
|||
|
"execution_count": 8,
|
|||
|
"metadata": {},
|
|||
|
"outputs": [
|
|||
|
{
|
|||
|
"name": "stderr",
|
|||
|
"output_type": "stream",
|
|||
|
"text": [
|
|||
|
"/Users/user/Projects/python/ckmai/.venv/lib/python3.12/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"
|
|||
|
},
|
|||
|
{
|
|||
|
"data": {
|
|||
|
"image/png": "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
|
|||
|
"text/plain": [
|
|||
|
"<Figure size 640x480 with 1 Axes>"
|
|||
|
]
|
|||
|
},
|
|||
|
"metadata": {},
|
|||
|
"output_type": "display_data"
|
|||
|
},
|
|||
|
{
|
|||
|
"data": {
|
|||
|
"image/png": "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
|
|||
|
"text/plain": [
|
|||
|
"<Figure size 640x480 with 1 Axes>"
|
|||
|
]
|
|||
|
},
|
|||
|
"metadata": {},
|
|||
|
"output_type": "display_data"
|
|||
|
},
|
|||
|
{
|
|||
|
"data": {
|
|||
|
"image/png": "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
|
|||
|
"text/plain": [
|
|||
|
"<Figure size 640x480 with 1 Axes>"
|
|||
|
]
|
|||
|
},
|
|||
|
"metadata": {},
|
|||
|
"output_type": "display_data"
|
|||
|
}
|
|||
|
],
|
|||
|
"source": [
|
|||
|
"temp = ctrl.Antecedent(density_train[\"T\"].sort_values().unique(), \"temp\")\n",
|
|||
|
"al = ctrl.Antecedent(np.arange(0, 0.3, 0.005), \"al\")\n",
|
|||
|
"ti = ctrl.Antecedent(np.arange(0, 0.3, 0.005), \"ti\")\n",
|
|||
|
"density = ctrl.Consequent(np.arange(1.03, 1.22, 0.00001), \"density\")\n",
|
|||
|
"\n",
|
|||
|
"temp.automf(3, variable_type=\"quant\")\n",
|
|||
|
"temp.view()\n",
|
|||
|
"al.automf(3, variable_type=\"quant\")\n",
|
|||
|
"al.view()\n",
|
|||
|
"ti.automf(3, variable_type=\"quant\")\n",
|
|||
|
"ti.view()\n",
|
|||
|
"density.automf(5, variable_type=\"quant\")\n",
|
|||
|
"density.view()"
|
|||
|
]
|
|||
|
},
|
|||
|
{
|
|||
|
"cell_type": "markdown",
|
|||
|
"metadata": {},
|
|||
|
"source": [
|
|||
|
"#### Нечеткие правила"
|
|||
|
]
|
|||
|
},
|
|||
|
{
|
|||
|
"cell_type": "code",
|
|||
|
"execution_count": 9,
|
|||
|
"metadata": {},
|
|||
|
"outputs": [],
|
|||
|
"source": [
|
|||
|
"rule11 = ctrl.Rule(\n",
|
|||
|
" temp[\"low\"] & al[\"low\"] & ti[\"low\"],\n",
|
|||
|
" density[\"low\"],\n",
|
|||
|
")\n",
|
|||
|
"rule12 = ctrl.Rule(\n",
|
|||
|
" temp[\"average\"] & al[\"low\"] & ti[\"low\"],\n",
|
|||
|
" density[\"lower\"],\n",
|
|||
|
")\n",
|
|||
|
"rule13 = ctrl.Rule(\n",
|
|||
|
" temp[\"high\"] & al[\"low\"] & ti[\"low\"],\n",
|
|||
|
" density[\"lower\"],\n",
|
|||
|
")\n",
|
|||
|
"\n",
|
|||
|
"rule21 = ctrl.Rule(\n",
|
|||
|
" temp[\"low\"] & al[\"average\"] & ti[\"low\"],\n",
|
|||
|
" density[\"low\"],\n",
|
|||
|
")\n",
|
|||
|
"rule22 = ctrl.Rule(\n",
|
|||
|
" temp[\"average\"] & al[\"average\"] & ti[\"low\"],\n",
|
|||
|
" density[\"low\"],\n",
|
|||
|
")\n",
|
|||
|
"rule23 = ctrl.Rule(\n",
|
|||
|
" temp[\"high\"] & al[\"average\"] & ti[\"low\"],\n",
|
|||
|
" density[\"lower\"],\n",
|
|||
|
")\n",
|
|||
|
"\n",
|
|||
|
"rule31 = ctrl.Rule(\n",
|
|||
|
" temp[\"low\"] & al[\"high\"] & ti[\"low\"],\n",
|
|||
|
" density[\"high\"],\n",
|
|||
|
")\n",
|
|||
|
"rule32 = ctrl.Rule(\n",
|
|||
|
" temp[\"low\"] & al[\"high\"] & ti[\"low\"],\n",
|
|||
|
" density[\"high\"],\n",
|
|||
|
")\n",
|
|||
|
"rule33 = ctrl.Rule(\n",
|
|||
|
" temp[\"high\"] & al[\"high\"] & ti[\"low\"],\n",
|
|||
|
" density[\"average\"],\n",
|
|||
|
")\n",
|
|||
|
"\n",
|
|||
|
"rule41 = ctrl.Rule(\n",
|
|||
|
" temp[\"low\"] & al[\"low\"] & ti[\"average\"],\n",
|
|||
|
" density[\"low\"],\n",
|
|||
|
")\n",
|
|||
|
"rule42 = ctrl.Rule(\n",
|
|||
|
" temp[\"average\"] & al[\"low\"] & ti[\"average\"],\n",
|
|||
|
" density[\"low\"],\n",
|
|||
|
")\n",
|
|||
|
"rule43 = ctrl.Rule(\n",
|
|||
|
" temp[\"high\"] & al[\"low\"] & ti[\"average\"],\n",
|
|||
|
" density[\"lower\"],\n",
|
|||
|
")\n",
|
|||
|
"\n",
|
|||
|
"rule51 = ctrl.Rule(\n",
|
|||
|
" temp[\"low\"] & al[\"low\"] & ti[\"high\"],\n",
|
|||
|
" density[\"higher\"],\n",
|
|||
|
")\n",
|
|||
|
"rule52 = ctrl.Rule(\n",
|
|||
|
" temp[\"average\"] & al[\"low\"] & ti[\"high\"],\n",
|
|||
|
" density[\"high\"],\n",
|
|||
|
")\n",
|
|||
|
"rule53 = ctrl.Rule(\n",
|
|||
|
" temp[\"high\"] & al[\"low\"] & ti[\"high\"],\n",
|
|||
|
" density[\"high\"],\n",
|
|||
|
")"
|
|||
|
]
|
|||
|
},
|
|||
|
{
|
|||
|
"cell_type": "markdown",
|
|||
|
"metadata": {},
|
|||
|
"source": [
|
|||
|
"#### Создание нечеткой системы"
|
|||
|
]
|
|||
|
},
|
|||
|
{
|
|||
|
"cell_type": "code",
|
|||
|
"execution_count": 10,
|
|||
|
"metadata": {},
|
|||
|
"outputs": [
|
|||
|
{
|
|||
|
"data": {
|
|||
|
"text/plain": [
|
|||
|
"[IF (temp[low] AND al[low]) AND ti[low] THEN density[low]\n",
|
|||
|
" \tAND aggregation function : fmin\n",
|
|||
|
" \tOR aggregation function : fmax,\n",
|
|||
|
" IF (temp[average] AND al[low]) AND ti[low] THEN density[lower]\n",
|
|||
|
" \tAND aggregation function : fmin\n",
|
|||
|
" \tOR aggregation function : fmax,\n",
|
|||
|
" IF (temp[high] AND al[low]) AND ti[low] THEN density[lower]\n",
|
|||
|
" \tAND aggregation function : fmin\n",
|
|||
|
" \tOR aggregation function : fmax,\n",
|
|||
|
" IF (temp[low] AND al[average]) AND ti[low] THEN density[low]\n",
|
|||
|
" \tAND aggregation function : fmin\n",
|
|||
|
" \tOR aggregation function : fmax,\n",
|
|||
|
" IF (temp[average] AND al[average]) AND ti[low] THEN density[low]\n",
|
|||
|
" \tAND aggregation function : fmin\n",
|
|||
|
" \tOR aggregation function : fmax,\n",
|
|||
|
" IF (temp[high] AND al[average]) AND ti[low] THEN density[lower]\n",
|
|||
|
" \tAND aggregation function : fmin\n",
|
|||
|
" \tOR aggregation function : fmax,\n",
|
|||
|
" IF (temp[low] AND al[high]) AND ti[low] THEN density[high]\n",
|
|||
|
" \tAND aggregation function : fmin\n",
|
|||
|
" \tOR aggregation function : fmax,\n",
|
|||
|
" IF (temp[low] AND al[high]) AND ti[low] THEN density[high]\n",
|
|||
|
" \tAND aggregation function : fmin\n",
|
|||
|
" \tOR aggregation function : fmax,\n",
|
|||
|
" IF (temp[high] AND al[high]) AND ti[low] THEN density[average]\n",
|
|||
|
" \tAND aggregation function : fmin\n",
|
|||
|
" \tOR aggregation function : fmax,\n",
|
|||
|
" IF (temp[low] AND al[low]) AND ti[average] THEN density[low]\n",
|
|||
|
" \tAND aggregation function : fmin\n",
|
|||
|
" \tOR aggregation function : fmax,\n",
|
|||
|
" IF (temp[average] AND al[low]) AND ti[average] THEN density[low]\n",
|
|||
|
" \tAND aggregation function : fmin\n",
|
|||
|
" \tOR aggregation function : fmax,\n",
|
|||
|
" IF (temp[high] AND al[low]) AND ti[average] THEN density[lower]\n",
|
|||
|
" \tAND aggregation function : fmin\n",
|
|||
|
" \tOR aggregation function : fmax,\n",
|
|||
|
" IF (temp[low] AND al[low]) AND ti[high] THEN density[higher]\n",
|
|||
|
" \tAND aggregation function : fmin\n",
|
|||
|
" \tOR aggregation function : fmax,\n",
|
|||
|
" IF (temp[average] AND al[low]) AND ti[high] THEN density[high]\n",
|
|||
|
" \tAND aggregation function : fmin\n",
|
|||
|
" \tOR aggregation function : fmax,\n",
|
|||
|
" IF (temp[high] AND al[low]) AND ti[high] THEN density[high]\n",
|
|||
|
" \tAND aggregation function : fmin\n",
|
|||
|
" \tOR aggregation function : fmax]"
|
|||
|
]
|
|||
|
},
|
|||
|
"execution_count": 10,
|
|||
|
"metadata": {},
|
|||
|
"output_type": "execute_result"
|
|||
|
}
|
|||
|
],
|
|||
|
"source": [
|
|||
|
"fuzzy_rules = [\n",
|
|||
|
" rule11,\n",
|
|||
|
" rule12,\n",
|
|||
|
" rule13,\n",
|
|||
|
" rule21,\n",
|
|||
|
" rule22,\n",
|
|||
|
" rule23,\n",
|
|||
|
" rule31,\n",
|
|||
|
" rule32,\n",
|
|||
|
" rule33,\n",
|
|||
|
" rule41,\n",
|
|||
|
" rule42,\n",
|
|||
|
" rule43,\n",
|
|||
|
" rule51,\n",
|
|||
|
" rule52,\n",
|
|||
|
" rule53,\n",
|
|||
|
"]\n",
|
|||
|
"\n",
|
|||
|
"density_cntrl = ctrl.ControlSystem(fuzzy_rules)\n",
|
|||
|
"\n",
|
|||
|
"sim = ctrl.ControlSystemSimulation(density_cntrl)\n",
|
|||
|
"\n",
|
|||
|
"fuzzy_rules"
|
|||
|
]
|
|||
|
},
|
|||
|
{
|
|||
|
"cell_type": "markdown",
|
|||
|
"metadata": {},
|
|||
|
"source": [
|
|||
|
"#### Пример использования полученной нечеткой системы"
|
|||
|
]
|
|||
|
},
|
|||
|
{
|
|||
|
"cell_type": "code",
|
|||
|
"execution_count": 11,
|
|||
|
"metadata": {},
|
|||
|
"outputs": [
|
|||
|
{
|
|||
|
"name": "stdout",
|
|||
|
"output_type": "stream",
|
|||
|
"text": [
|
|||
|
"=============\n",
|
|||
|
" Antecedents \n",
|
|||
|
"=============\n",
|
|||
|
"Antecedent: temp = 20\n",
|
|||
|
" - low : 1.0\n",
|
|||
|
" - average : 0.0\n",
|
|||
|
" - high : 0.0\n",
|
|||
|
"Antecedent: al = 0.295\n",
|
|||
|
" - low : 0.0\n",
|
|||
|
" - average : 0.0\n",
|
|||
|
" - high : 1.0\n",
|
|||
|
"Antecedent: ti = 0.0\n",
|
|||
|
" - low : 1.0\n",
|
|||
|
" - average : 0.0\n",
|
|||
|
" - high : 0.0\n",
|
|||
|
"\n",
|
|||
|
"=======\n",
|
|||
|
" Rules \n",
|
|||
|
"=======\n",
|
|||
|
"RULE #0:\n",
|
|||
|
" IF (temp[low] AND al[low]) AND ti[low] THEN density[low]\n",
|
|||
|
"\tAND aggregation function : fmin\n",
|
|||
|
"\tOR aggregation function : fmax\n",
|
|||
|
"\n",
|
|||
|
" Aggregation (IF-clause):\n",
|
|||
|
" - temp[low] : 1.0\n",
|
|||
|
" - al[low] : 0.0\n",
|
|||
|
" - ti[low] : 1.0\n",
|
|||
|
" (temp[low] AND al[low]) AND ti[low] = 0.0\n",
|
|||
|
" Activation (THEN-clause):\n",
|
|||
|
" density[low] : 0.0\n",
|
|||
|
"\n",
|
|||
|
"RULE #1:\n",
|
|||
|
" IF (temp[average] AND al[low]) AND ti[low] THEN density[lower]\n",
|
|||
|
"\tAND aggregation function : fmin\n",
|
|||
|
"\tOR aggregation function : fmax\n",
|
|||
|
"\n",
|
|||
|
" Aggregation (IF-clause):\n",
|
|||
|
" - temp[average] : 0.0\n",
|
|||
|
" - al[low] : 0.0\n",
|
|||
|
" - ti[low] : 1.0\n",
|
|||
|
" (temp[average] AND al[low]) AND ti[low] = 0.0\n",
|
|||
|
" Activation (THEN-clause):\n",
|
|||
|
" density[lower] : 0.0\n",
|
|||
|
"\n",
|
|||
|
"RULE #2:\n",
|
|||
|
" IF (temp[high] AND al[low]) AND ti[low] THEN density[lower]\n",
|
|||
|
"\tAND aggregation function : fmin\n",
|
|||
|
"\tOR aggregation function : fmax\n",
|
|||
|
"\n",
|
|||
|
" Aggregation (IF-clause):\n",
|
|||
|
" - temp[high] : 0.0\n",
|
|||
|
" - al[low] : 0.0\n",
|
|||
|
" - ti[low] : 1.0\n",
|
|||
|
" (temp[high] AND al[low]) AND ti[low] = 0.0\n",
|
|||
|
" Activation (THEN-clause):\n",
|
|||
|
" density[lower] : 0.0\n",
|
|||
|
"\n",
|
|||
|
"RULE #3:\n",
|
|||
|
" IF (temp[low] AND al[average]) AND ti[low] THEN density[low]\n",
|
|||
|
"\tAND aggregation function : fmin\n",
|
|||
|
"\tOR aggregation function : fmax\n",
|
|||
|
"\n",
|
|||
|
" Aggregation (IF-clause):\n",
|
|||
|
" - temp[low] : 1.0\n",
|
|||
|
" - al[average] : 0.0\n",
|
|||
|
" - ti[low] : 1.0\n",
|
|||
|
" (temp[low] AND al[average]) AND ti[low] = 0.0\n",
|
|||
|
" Activation (THEN-clause):\n",
|
|||
|
" density[low] : 0.0\n",
|
|||
|
"\n",
|
|||
|
"RULE #4:\n",
|
|||
|
" IF (temp[average] AND al[average]) AND ti[low] THEN density[low]\n",
|
|||
|
"\tAND aggregation function : fmin\n",
|
|||
|
"\tOR aggregation function : fmax\n",
|
|||
|
"\n",
|
|||
|
" Aggregation (IF-clause):\n",
|
|||
|
" - temp[average] : 0.0\n",
|
|||
|
" - al[average] : 0.0\n",
|
|||
|
" - ti[low] : 1.0\n",
|
|||
|
" (temp[average] AND al[average]) AND ti[low] = 0.0\n",
|
|||
|
" Activation (THEN-clause):\n",
|
|||
|
" density[low] : 0.0\n",
|
|||
|
"\n",
|
|||
|
"RULE #5:\n",
|
|||
|
" IF (temp[high] AND al[average]) AND ti[low] THEN density[lower]\n",
|
|||
|
"\tAND aggregation function : fmin\n",
|
|||
|
"\tOR aggregation function : fmax\n",
|
|||
|
"\n",
|
|||
|
" Aggregation (IF-clause):\n",
|
|||
|
" - temp[high] : 0.0\n",
|
|||
|
" - al[average] : 0.0\n",
|
|||
|
" - ti[low] : 1.0\n",
|
|||
|
" (temp[high] AND al[average]) AND ti[low] = 0.0\n",
|
|||
|
" Activation (THEN-clause):\n",
|
|||
|
" density[lower] : 0.0\n",
|
|||
|
"\n",
|
|||
|
"RULE #6:\n",
|
|||
|
" IF (temp[low] AND al[high]) AND ti[low] THEN density[high]\n",
|
|||
|
"\tAND aggregation function : fmin\n",
|
|||
|
"\tOR aggregation function : fmax\n",
|
|||
|
"\n",
|
|||
|
" Aggregation (IF-clause):\n",
|
|||
|
" - temp[low] : 1.0\n",
|
|||
|
" - al[high] : 1.0\n",
|
|||
|
" - ti[low] : 1.0\n",
|
|||
|
" (temp[low] AND al[high]) AND ti[low] = 1.0\n",
|
|||
|
" Activation (THEN-clause):\n",
|
|||
|
" density[high] : 1.0\n",
|
|||
|
"\n",
|
|||
|
"RULE #7:\n",
|
|||
|
" IF (temp[low] AND al[high]) AND ti[low] THEN density[high]\n",
|
|||
|
"\tAND aggregation function : fmin\n",
|
|||
|
"\tOR aggregation function : fmax\n",
|
|||
|
"\n",
|
|||
|
" Aggregation (IF-clause):\n",
|
|||
|
" - temp[low] : 1.0\n",
|
|||
|
" - al[high] : 1.0\n",
|
|||
|
" - ti[low] : 1.0\n",
|
|||
|
" (temp[low] AND al[high]) AND ti[low] = 1.0\n",
|
|||
|
" Activation (THEN-clause):\n",
|
|||
|
" density[high] : 1.0\n",
|
|||
|
"\n",
|
|||
|
"RULE #8:\n",
|
|||
|
" IF (temp[high] AND al[high]) AND ti[low] THEN density[average]\n",
|
|||
|
"\tAND aggregation function : fmin\n",
|
|||
|
"\tOR aggregation function : fmax\n",
|
|||
|
"\n",
|
|||
|
" Aggregation (IF-clause):\n",
|
|||
|
" - temp[high] : 0.0\n",
|
|||
|
" - al[high] : 1.0\n",
|
|||
|
" - ti[low] : 1.0\n",
|
|||
|
" (temp[high] AND al[high]) AND ti[low] = 0.0\n",
|
|||
|
" Activation (THEN-clause):\n",
|
|||
|
" density[average] : 0.0\n",
|
|||
|
"\n",
|
|||
|
"RULE #9:\n",
|
|||
|
" IF (temp[low] AND al[low]) AND ti[average] THEN density[low]\n",
|
|||
|
"\tAND aggregation function : fmin\n",
|
|||
|
"\tOR aggregation function : fmax\n",
|
|||
|
"\n",
|
|||
|
" Aggregation (IF-clause):\n",
|
|||
|
" - temp[low] : 1.0\n",
|
|||
|
" - al[low] : 0.0\n",
|
|||
|
" - ti[average] : 0.0\n",
|
|||
|
" (temp[low] AND al[low]) AND ti[average] = 0.0\n",
|
|||
|
" Activation (THEN-clause):\n",
|
|||
|
" density[low] : 0.0\n",
|
|||
|
"\n",
|
|||
|
"RULE #10:\n",
|
|||
|
" IF (temp[average] AND al[low]) AND ti[average] THEN density[low]\n",
|
|||
|
"\tAND aggregation function : fmin\n",
|
|||
|
"\tOR aggregation function : fmax\n",
|
|||
|
"\n",
|
|||
|
" Aggregation (IF-clause):\n",
|
|||
|
" - temp[average] : 0.0\n",
|
|||
|
" - al[low] : 0.0\n",
|
|||
|
" - ti[average] : 0.0\n",
|
|||
|
" (temp[average] AND al[low]) AND ti[average] = 0.0\n",
|
|||
|
" Activation (THEN-clause):\n",
|
|||
|
" density[low] : 0.0\n",
|
|||
|
"\n",
|
|||
|
"RULE #11:\n",
|
|||
|
" IF (temp[high] AND al[low]) AND ti[average] THEN density[lower]\n",
|
|||
|
"\tAND aggregation function : fmin\n",
|
|||
|
"\tOR aggregation function : fmax\n",
|
|||
|
"\n",
|
|||
|
" Aggregation (IF-clause):\n",
|
|||
|
" - temp[high] : 0.0\n",
|
|||
|
" - al[low] : 0.0\n",
|
|||
|
" - ti[average] : 0.0\n",
|
|||
|
" (temp[high] AND al[low]) AND ti[average] = 0.0\n",
|
|||
|
" Activation (THEN-clause):\n",
|
|||
|
" density[lower] : 0.0\n",
|
|||
|
"\n",
|
|||
|
"RULE #12:\n",
|
|||
|
" IF (temp[low] AND al[low]) AND ti[high] THEN density[higher]\n",
|
|||
|
"\tAND aggregation function : fmin\n",
|
|||
|
"\tOR aggregation function : fmax\n",
|
|||
|
"\n",
|
|||
|
" Aggregation (IF-clause):\n",
|
|||
|
" - temp[low] : 1.0\n",
|
|||
|
" - al[low] : 0.0\n",
|
|||
|
" - ti[high] : 0.0\n",
|
|||
|
" (temp[low] AND al[low]) AND ti[high] = 0.0\n",
|
|||
|
" Activation (THEN-clause):\n",
|
|||
|
" density[higher] : 0.0\n",
|
|||
|
"\n",
|
|||
|
"RULE #13:\n",
|
|||
|
" IF (temp[average] AND al[low]) AND ti[high] THEN density[high]\n",
|
|||
|
"\tAND aggregation function : fmin\n",
|
|||
|
"\tOR aggregation function : fmax\n",
|
|||
|
"\n",
|
|||
|
" Aggregation (IF-clause):\n",
|
|||
|
" - temp[average] : 0.0\n",
|
|||
|
" - al[low] : 0.0\n",
|
|||
|
" - ti[high] : 0.0\n",
|
|||
|
" (temp[average] AND al[low]) AND ti[high] = 0.0\n",
|
|||
|
" Activation (THEN-clause):\n",
|
|||
|
" density[high] : 0.0\n",
|
|||
|
"\n",
|
|||
|
"RULE #14:\n",
|
|||
|
" IF (temp[high] AND al[low]) AND ti[high] THEN density[high]\n",
|
|||
|
"\tAND aggregation function : fmin\n",
|
|||
|
"\tOR aggregation function : fmax\n",
|
|||
|
"\n",
|
|||
|
" Aggregation (IF-clause):\n",
|
|||
|
" - temp[high] : 0.0\n",
|
|||
|
" - al[low] : 0.0\n",
|
|||
|
" - ti[high] : 0.0\n",
|
|||
|
" (temp[high] AND al[low]) AND ti[high] = 0.0\n",
|
|||
|
" Activation (THEN-clause):\n",
|
|||
|
" density[high] : 0.0\n",
|
|||
|
"\n",
|
|||
|
"\n",
|
|||
|
"==============================\n",
|
|||
|
" Intermediaries and Conquests \n",
|
|||
|
"==============================\n",
|
|||
|
"Consequent: density = 1.1724924997377486\n",
|
|||
|
" lower:\n",
|
|||
|
" Accumulate using accumulation_max : 0.0\n",
|
|||
|
" low:\n",
|
|||
|
" Accumulate using accumulation_max : 0.0\n",
|
|||
|
" average:\n",
|
|||
|
" Accumulate using accumulation_max : 0.0\n",
|
|||
|
" high:\n",
|
|||
|
" Accumulate using accumulation_max : 1.0\n",
|
|||
|
" higher:\n",
|
|||
|
" Accumulate using accumulation_max : 0.0\n",
|
|||
|
"\n"
|
|||
|
]
|
|||
|
},
|
|||
|
{
|
|||
|
"data": {
|
|||
|
"text/plain": [
|
|||
|
"np.float64(1.1724924997377486)"
|
|||
|
]
|
|||
|
},
|
|||
|
"metadata": {},
|
|||
|
"output_type": "display_data"
|
|||
|
}
|
|||
|
],
|
|||
|
"source": [
|
|||
|
"sim.input[\"temp\"] = 20\n",
|
|||
|
"sim.input[\"al\"] = 0.3\n",
|
|||
|
"sim.input[\"ti\"] = 0.0\n",
|
|||
|
"sim.compute()\n",
|
|||
|
"sim.print_state()\n",
|
|||
|
"display(sim.output[\"density\"])"
|
|||
|
]
|
|||
|
},
|
|||
|
{
|
|||
|
"cell_type": "markdown",
|
|||
|
"metadata": {},
|
|||
|
"source": [
|
|||
|
"#### Функция для автоматизации вычисления целевой переменной Y на основе вектора признаков X"
|
|||
|
]
|
|||
|
},
|
|||
|
{
|
|||
|
"cell_type": "code",
|
|||
|
"execution_count": 12,
|
|||
|
"metadata": {},
|
|||
|
"outputs": [],
|
|||
|
"source": [
|
|||
|
"def fuzzy_pred(row):\n",
|
|||
|
" sim.input[\"temp\"] = row[\"T\"]\n",
|
|||
|
" sim.input[\"al\"] = row[\"Al2O3\"]\n",
|
|||
|
" sim.input[\"ti\"] = row[\"TiO2\"]\n",
|
|||
|
" sim.compute()\n",
|
|||
|
" return sim.output[\"density\"]"
|
|||
|
]
|
|||
|
},
|
|||
|
{
|
|||
|
"cell_type": "markdown",
|
|||
|
"metadata": {},
|
|||
|
"source": [
|
|||
|
"#### Тестирование нечеткой системы на обучающей выборке"
|
|||
|
]
|
|||
|
},
|
|||
|
{
|
|||
|
"cell_type": "code",
|
|||
|
"execution_count": 14,
|
|||
|
"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>T</th>\n",
|
|||
|
" <th>Al2O3</th>\n",
|
|||
|
" <th>TiO2</th>\n",
|
|||
|
" <th>Density</th>\n",
|
|||
|
" <th>DensityPred</th>\n",
|
|||
|
" </tr>\n",
|
|||
|
" </thead>\n",
|
|||
|
" <tbody>\n",
|
|||
|
" <tr>\n",
|
|||
|
" <th>0</th>\n",
|
|||
|
" <td>20</td>\n",
|
|||
|
" <td>0.00</td>\n",
|
|||
|
" <td>0.0</td>\n",
|
|||
|
" <td>1.06250</td>\n",
|
|||
|
" <td>1.077498</td>\n",
|
|||
|
" </tr>\n",
|
|||
|
" <tr>\n",
|
|||
|
" <th>1</th>\n",
|
|||
|
" <td>25</td>\n",
|
|||
|
" <td>0.00</td>\n",
|
|||
|
" <td>0.0</td>\n",
|
|||
|
" <td>1.05979</td>\n",
|
|||
|
" <td>1.076593</td>\n",
|
|||
|
" </tr>\n",
|
|||
|
" <tr>\n",
|
|||
|
" <th>2</th>\n",
|
|||
|
" <td>35</td>\n",
|
|||
|
" <td>0.00</td>\n",
|
|||
|
" <td>0.0</td>\n",
|
|||
|
" <td>1.05404</td>\n",
|
|||
|
" <td>1.069156</td>\n",
|
|||
|
" </tr>\n",
|
|||
|
" <tr>\n",
|
|||
|
" <th>3</th>\n",
|
|||
|
" <td>40</td>\n",
|
|||
|
" <td>0.00</td>\n",
|
|||
|
" <td>0.0</td>\n",
|
|||
|
" <td>1.05103</td>\n",
|
|||
|
" <td>1.061106</td>\n",
|
|||
|
" </tr>\n",
|
|||
|
" <tr>\n",
|
|||
|
" <th>4</th>\n",
|
|||
|
" <td>45</td>\n",
|
|||
|
" <td>0.00</td>\n",
|
|||
|
" <td>0.0</td>\n",
|
|||
|
" <td>1.04794</td>\n",
|
|||
|
" <td>1.045833</td>\n",
|
|||
|
" </tr>\n",
|
|||
|
" <tr>\n",
|
|||
|
" <th>5</th>\n",
|
|||
|
" <td>50</td>\n",
|
|||
|
" <td>0.00</td>\n",
|
|||
|
" <td>0.0</td>\n",
|
|||
|
" <td>1.04477</td>\n",
|
|||
|
" <td>1.046360</td>\n",
|
|||
|
" </tr>\n",
|
|||
|
" <tr>\n",
|
|||
|
" <th>6</th>\n",
|
|||
|
" <td>60</td>\n",
|
|||
|
" <td>0.00</td>\n",
|
|||
|
" <td>0.0</td>\n",
|
|||
|
" <td>1.03826</td>\n",
|
|||
|
" <td>1.047642</td>\n",
|
|||
|
" </tr>\n",
|
|||
|
" <tr>\n",
|
|||
|
" <th>7</th>\n",
|
|||
|
" <td>65</td>\n",
|
|||
|
" <td>0.00</td>\n",
|
|||
|
" <td>0.0</td>\n",
|
|||
|
" <td>1.03484</td>\n",
|
|||
|
" <td>1.046360</td>\n",
|
|||
|
" </tr>\n",
|
|||
|
" <tr>\n",
|
|||
|
" <th>8</th>\n",
|
|||
|
" <td>70</td>\n",
|
|||
|
" <td>0.00</td>\n",
|
|||
|
" <td>0.0</td>\n",
|
|||
|
" <td>1.03182</td>\n",
|
|||
|
" <td>1.045833</td>\n",
|
|||
|
" </tr>\n",
|
|||
|
" <tr>\n",
|
|||
|
" <th>9</th>\n",
|
|||
|
" <td>20</td>\n",
|
|||
|
" <td>0.05</td>\n",
|
|||
|
" <td>0.0</td>\n",
|
|||
|
" <td>1.08755</td>\n",
|
|||
|
" <td>1.077498</td>\n",
|
|||
|
" </tr>\n",
|
|||
|
" <tr>\n",
|
|||
|
" <th>10</th>\n",
|
|||
|
" <td>45</td>\n",
|
|||
|
" <td>0.05</td>\n",
|
|||
|
" <td>0.0</td>\n",
|
|||
|
" <td>1.07105</td>\n",
|
|||
|
" <td>1.067145</td>\n",
|
|||
|
" </tr>\n",
|
|||
|
" <tr>\n",
|
|||
|
" <th>11</th>\n",
|
|||
|
" <td>50</td>\n",
|
|||
|
" <td>0.05</td>\n",
|
|||
|
" <td>0.0</td>\n",
|
|||
|
" <td>1.06760</td>\n",
|
|||
|
" <td>1.067145</td>\n",
|
|||
|
" </tr>\n",
|
|||
|
" <tr>\n",
|
|||
|
" <th>12</th>\n",
|
|||
|
" <td>55</td>\n",
|
|||
|
" <td>0.05</td>\n",
|
|||
|
" <td>0.0</td>\n",
|
|||
|
" <td>1.06409</td>\n",
|
|||
|
" <td>1.067988</td>\n",
|
|||
|
" </tr>\n",
|
|||
|
" <tr>\n",
|
|||
|
" <th>13</th>\n",
|
|||
|
" <td>65</td>\n",
|
|||
|
" <td>0.05</td>\n",
|
|||
|
" <td>0.0</td>\n",
|
|||
|
" <td>1.05691</td>\n",
|
|||
|
" <td>1.062538</td>\n",
|
|||
|
" </tr>\n",
|
|||
|
" <tr>\n",
|
|||
|
" <th>14</th>\n",
|
|||
|
" <td>70</td>\n",
|
|||
|
" <td>0.05</td>\n",
|
|||
|
" <td>0.0</td>\n",
|
|||
|
" <td>1.05291</td>\n",
|
|||
|
" <td>1.047191</td>\n",
|
|||
|
" </tr>\n",
|
|||
|
" </tbody>\n",
|
|||
|
"</table>\n",
|
|||
|
"</div>"
|
|||
|
],
|
|||
|
"text/plain": [
|
|||
|
" T Al2O3 TiO2 Density DensityPred\n",
|
|||
|
"0 20 0.00 0.0 1.06250 1.077498\n",
|
|||
|
"1 25 0.00 0.0 1.05979 1.076593\n",
|
|||
|
"2 35 0.00 0.0 1.05404 1.069156\n",
|
|||
|
"3 40 0.00 0.0 1.05103 1.061106\n",
|
|||
|
"4 45 0.00 0.0 1.04794 1.045833\n",
|
|||
|
"5 50 0.00 0.0 1.04477 1.046360\n",
|
|||
|
"6 60 0.00 0.0 1.03826 1.047642\n",
|
|||
|
"7 65 0.00 0.0 1.03484 1.046360\n",
|
|||
|
"8 70 0.00 0.0 1.03182 1.045833\n",
|
|||
|
"9 20 0.05 0.0 1.08755 1.077498\n",
|
|||
|
"10 45 0.05 0.0 1.07105 1.067145\n",
|
|||
|
"11 50 0.05 0.0 1.06760 1.067145\n",
|
|||
|
"12 55 0.05 0.0 1.06409 1.067988\n",
|
|||
|
"13 65 0.05 0.0 1.05691 1.062538\n",
|
|||
|
"14 70 0.05 0.0 1.05291 1.047191"
|
|||
|
]
|
|||
|
},
|
|||
|
"execution_count": 14,
|
|||
|
"metadata": {},
|
|||
|
"output_type": "execute_result"
|
|||
|
}
|
|||
|
],
|
|||
|
"source": [
|
|||
|
"result_train = density_train.copy()\n",
|
|||
|
"\n",
|
|||
|
"result_train[\"DensityPred\"] = result_train.apply(fuzzy_pred, axis=1)\n",
|
|||
|
"\n",
|
|||
|
"result_train.head(15)"
|
|||
|
]
|
|||
|
},
|
|||
|
{
|
|||
|
"cell_type": "markdown",
|
|||
|
"metadata": {},
|
|||
|
"source": [
|
|||
|
"#### Тестирование нечеткой системы на тестовой выборке"
|
|||
|
]
|
|||
|
},
|
|||
|
{
|
|||
|
"cell_type": "code",
|
|||
|
"execution_count": 15,
|
|||
|
"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>T</th>\n",
|
|||
|
" <th>Al2O3</th>\n",
|
|||
|
" <th>TiO2</th>\n",
|
|||
|
" <th>Density</th>\n",
|
|||
|
" <th>DensityPred</th>\n",
|
|||
|
" </tr>\n",
|
|||
|
" </thead>\n",
|
|||
|
" <tbody>\n",
|
|||
|
" <tr>\n",
|
|||
|
" <th>0</th>\n",
|
|||
|
" <td>30</td>\n",
|
|||
|
" <td>0.00</td>\n",
|
|||
|
" <td>0.00</td>\n",
|
|||
|
" <td>1.05696</td>\n",
|
|||
|
" <td>1.073918</td>\n",
|
|||
|
" </tr>\n",
|
|||
|
" <tr>\n",
|
|||
|
" <th>1</th>\n",
|
|||
|
" <td>55</td>\n",
|
|||
|
" <td>0.00</td>\n",
|
|||
|
" <td>0.00</td>\n",
|
|||
|
" <td>1.04158</td>\n",
|
|||
|
" <td>1.047642</td>\n",
|
|||
|
" </tr>\n",
|
|||
|
" <tr>\n",
|
|||
|
" <th>2</th>\n",
|
|||
|
" <td>25</td>\n",
|
|||
|
" <td>0.05</td>\n",
|
|||
|
" <td>0.00</td>\n",
|
|||
|
" <td>1.08438</td>\n",
|
|||
|
" <td>1.076518</td>\n",
|
|||
|
" </tr>\n",
|
|||
|
" <tr>\n",
|
|||
|
" <th>3</th>\n",
|
|||
|
" <td>30</td>\n",
|
|||
|
" <td>0.05</td>\n",
|
|||
|
" <td>0.00</td>\n",
|
|||
|
" <td>1.08112</td>\n",
|
|||
|
" <td>1.073918</td>\n",
|
|||
|
" </tr>\n",
|
|||
|
" <tr>\n",
|
|||
|
" <th>4</th>\n",
|
|||
|
" <td>35</td>\n",
|
|||
|
" <td>0.05</td>\n",
|
|||
|
" <td>0.00</td>\n",
|
|||
|
" <td>1.07781</td>\n",
|
|||
|
" <td>1.069156</td>\n",
|
|||
|
" </tr>\n",
|
|||
|
" <tr>\n",
|
|||
|
" <th>5</th>\n",
|
|||
|
" <td>40</td>\n",
|
|||
|
" <td>0.05</td>\n",
|
|||
|
" <td>0.00</td>\n",
|
|||
|
" <td>1.07446</td>\n",
|
|||
|
" <td>1.067145</td>\n",
|
|||
|
" </tr>\n",
|
|||
|
" <tr>\n",
|
|||
|
" <th>6</th>\n",
|
|||
|
" <td>60</td>\n",
|
|||
|
" <td>0.05</td>\n",
|
|||
|
" <td>0.00</td>\n",
|
|||
|
" <td>1.06053</td>\n",
|
|||
|
" <td>1.067988</td>\n",
|
|||
|
" </tr>\n",
|
|||
|
" <tr>\n",
|
|||
|
" <th>7</th>\n",
|
|||
|
" <td>35</td>\n",
|
|||
|
" <td>0.30</td>\n",
|
|||
|
" <td>0.00</td>\n",
|
|||
|
" <td>1.17459</td>\n",
|
|||
|
" <td>1.172492</td>\n",
|
|||
|
" </tr>\n",
|
|||
|
" <tr>\n",
|
|||
|
" <th>8</th>\n",
|
|||
|
" <td>65</td>\n",
|
|||
|
" <td>0.30</td>\n",
|
|||
|
" <td>0.00</td>\n",
|
|||
|
" <td>1.14812</td>\n",
|
|||
|
" <td>1.124995</td>\n",
|
|||
|
" </tr>\n",
|
|||
|
" <tr>\n",
|
|||
|
" <th>9</th>\n",
|
|||
|
" <td>45</td>\n",
|
|||
|
" <td>0.00</td>\n",
|
|||
|
" <td>0.05</td>\n",
|
|||
|
" <td>1.07424</td>\n",
|
|||
|
" <td>1.067145</td>\n",
|
|||
|
" </tr>\n",
|
|||
|
" <tr>\n",
|
|||
|
" <th>10</th>\n",
|
|||
|
" <td>50</td>\n",
|
|||
|
" <td>0.00</td>\n",
|
|||
|
" <td>0.05</td>\n",
|
|||
|
" <td>1.07075</td>\n",
|
|||
|
" <td>1.067145</td>\n",
|
|||
|
" </tr>\n",
|
|||
|
" <tr>\n",
|
|||
|
" <th>11</th>\n",
|
|||
|
" <td>55</td>\n",
|
|||
|
" <td>0.00</td>\n",
|
|||
|
" <td>0.05</td>\n",
|
|||
|
" <td>1.06721</td>\n",
|
|||
|
" <td>1.067988</td>\n",
|
|||
|
" </tr>\n",
|
|||
|
" <tr>\n",
|
|||
|
" <th>12</th>\n",
|
|||
|
" <td>20</td>\n",
|
|||
|
" <td>0.00</td>\n",
|
|||
|
" <td>0.30</td>\n",
|
|||
|
" <td>1.22417</td>\n",
|
|||
|
" <td>1.204157</td>\n",
|
|||
|
" </tr>\n",
|
|||
|
" <tr>\n",
|
|||
|
" <th>13</th>\n",
|
|||
|
" <td>30</td>\n",
|
|||
|
" <td>0.00</td>\n",
|
|||
|
" <td>0.30</td>\n",
|
|||
|
" <td>1.21310</td>\n",
|
|||
|
" <td>1.180834</td>\n",
|
|||
|
" </tr>\n",
|
|||
|
" <tr>\n",
|
|||
|
" <th>14</th>\n",
|
|||
|
" <td>40</td>\n",
|
|||
|
" <td>0.00</td>\n",
|
|||
|
" <td>0.30</td>\n",
|
|||
|
" <td>1.20265</td>\n",
|
|||
|
" <td>1.173397</td>\n",
|
|||
|
" </tr>\n",
|
|||
|
" <tr>\n",
|
|||
|
" <th>15</th>\n",
|
|||
|
" <td>60</td>\n",
|
|||
|
" <td>0.00</td>\n",
|
|||
|
" <td>0.30</td>\n",
|
|||
|
" <td>1.18265</td>\n",
|
|||
|
" <td>1.172492</td>\n",
|
|||
|
" </tr>\n",
|
|||
|
" <tr>\n",
|
|||
|
" <th>16</th>\n",
|
|||
|
" <td>70</td>\n",
|
|||
|
" <td>0.00</td>\n",
|
|||
|
" <td>0.30</td>\n",
|
|||
|
" <td>1.17261</td>\n",
|
|||
|
" <td>1.172492</td>\n",
|
|||
|
" </tr>\n",
|
|||
|
" </tbody>\n",
|
|||
|
"</table>\n",
|
|||
|
"</div>"
|
|||
|
],
|
|||
|
"text/plain": [
|
|||
|
" T Al2O3 TiO2 Density DensityPred\n",
|
|||
|
"0 30 0.00 0.00 1.05696 1.073918\n",
|
|||
|
"1 55 0.00 0.00 1.04158 1.047642\n",
|
|||
|
"2 25 0.05 0.00 1.08438 1.076518\n",
|
|||
|
"3 30 0.05 0.00 1.08112 1.073918\n",
|
|||
|
"4 35 0.05 0.00 1.07781 1.069156\n",
|
|||
|
"5 40 0.05 0.00 1.07446 1.067145\n",
|
|||
|
"6 60 0.05 0.00 1.06053 1.067988\n",
|
|||
|
"7 35 0.30 0.00 1.17459 1.172492\n",
|
|||
|
"8 65 0.30 0.00 1.14812 1.124995\n",
|
|||
|
"9 45 0.00 0.05 1.07424 1.067145\n",
|
|||
|
"10 50 0.00 0.05 1.07075 1.067145\n",
|
|||
|
"11 55 0.00 0.05 1.06721 1.067988\n",
|
|||
|
"12 20 0.00 0.30 1.22417 1.204157\n",
|
|||
|
"13 30 0.00 0.30 1.21310 1.180834\n",
|
|||
|
"14 40 0.00 0.30 1.20265 1.173397\n",
|
|||
|
"15 60 0.00 0.30 1.18265 1.172492\n",
|
|||
|
"16 70 0.00 0.30 1.17261 1.172492"
|
|||
|
]
|
|||
|
},
|
|||
|
"execution_count": 15,
|
|||
|
"metadata": {},
|
|||
|
"output_type": "execute_result"
|
|||
|
}
|
|||
|
],
|
|||
|
"source": [
|
|||
|
"result_test = density_test.copy()\n",
|
|||
|
"\n",
|
|||
|
"result_test[\"DensityPred\"] = result_test.apply(fuzzy_pred, axis=1)\n",
|
|||
|
"\n",
|
|||
|
"result_test"
|
|||
|
]
|
|||
|
},
|
|||
|
{
|
|||
|
"cell_type": "markdown",
|
|||
|
"metadata": {},
|
|||
|
"source": [
|
|||
|
"#### Оценка результатов на основе метрик для задачи регрессии"
|
|||
|
]
|
|||
|
},
|
|||
|
{
|
|||
|
"cell_type": "code",
|
|||
|
"execution_count": 16,
|
|||
|
"metadata": {},
|
|||
|
"outputs": [
|
|||
|
{
|
|||
|
"data": {
|
|||
|
"text/plain": [
|
|||
|
"{'RMSE_train': 0.0156766544822719,\n",
|
|||
|
" 'RMSE_test': 0.014603864614526584,\n",
|
|||
|
" 'RMAE_test': 0.1057231829134674,\n",
|
|||
|
" 'R2_test': 0.9436578668511394}"
|
|||
|
]
|
|||
|
},
|
|||
|
"execution_count": 16,
|
|||
|
"metadata": {},
|
|||
|
"output_type": "execute_result"
|
|||
|
}
|
|||
|
],
|
|||
|
"source": [
|
|||
|
"import math\n",
|
|||
|
"from sklearn import metrics\n",
|
|||
|
"\n",
|
|||
|
"\n",
|
|||
|
"rmetrics = {}\n",
|
|||
|
"rmetrics[\"RMSE_train\"] = math.sqrt(\n",
|
|||
|
" metrics.mean_squared_error(result_train[\"Density\"], result_train[\"DensityPred\"])\n",
|
|||
|
")\n",
|
|||
|
"rmetrics[\"RMSE_test\"] = math.sqrt(\n",
|
|||
|
" metrics.mean_squared_error(result_test[\"Density\"], result_test[\"DensityPred\"])\n",
|
|||
|
")\n",
|
|||
|
"rmetrics[\"RMAE_test\"] = math.sqrt(\n",
|
|||
|
" metrics.mean_absolute_error(result_test[\"Density\"], result_test[\"DensityPred\"])\n",
|
|||
|
")\n",
|
|||
|
"rmetrics[\"R2_test\"] = metrics.r2_score(\n",
|
|||
|
" result_test[\"Density\"], result_test[\"DensityPred\"]\n",
|
|||
|
")\n",
|
|||
|
"\n",
|
|||
|
"rmetrics"
|
|||
|
]
|
|||
|
}
|
|||
|
],
|
|||
|
"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.8"
|
|||
|
}
|
|||
|
},
|
|||
|
"nbformat": 4,
|
|||
|
"nbformat_minor": 2
|
|||
|
}
|