1438 lines
322 KiB
Plaintext
1438 lines
322 KiB
Plaintext
|
{
|
|||
|
"cells": [
|
|||
|
{
|
|||
|
"cell_type": "markdown",
|
|||
|
"metadata": {},
|
|||
|
"source": [
|
|||
|
"## Управление потоком жидкости"
|
|||
|
]
|
|||
|
},
|
|||
|
{
|
|||
|
"cell_type": "markdown",
|
|||
|
"metadata": {},
|
|||
|
"source": [
|
|||
|
"#### Создание лингвистических переменных\n",
|
|||
|
"\n",
|
|||
|
"Входные X: speed (текущая скорость) и target (желаемая скорость) /\n",
|
|||
|
"Выходные Y: cadence (необходимый каденс)"
|
|||
|
]
|
|||
|
},
|
|||
|
{
|
|||
|
"cell_type": "code",
|
|||
|
"execution_count": 24,
|
|||
|
"metadata": {},
|
|||
|
"outputs": [],
|
|||
|
"source": [
|
|||
|
"import numpy as np\n",
|
|||
|
"from skfuzzy import control as ctrl\n",
|
|||
|
"\n",
|
|||
|
"speed = ctrl.Antecedent(np.arange(0, 100, 1), \"speed\")\n",
|
|||
|
"target = ctrl.Antecedent(np.arange(0, 100, 1), \"target\")\n",
|
|||
|
"cadence = ctrl.Consequent(np.arange(0, 130, 1), \"cadence\")"
|
|||
|
]
|
|||
|
},
|
|||
|
{
|
|||
|
"cell_type": "markdown",
|
|||
|
"metadata": {},
|
|||
|
"source": [
|
|||
|
"#### Формирование нечетких переменных для лингвистических переменных и их визуализация"
|
|||
|
]
|
|||
|
},
|
|||
|
{
|
|||
|
"cell_type": "code",
|
|||
|
"execution_count": 25,
|
|||
|
"metadata": {},
|
|||
|
"outputs": [
|
|||
|
{
|
|||
|
"name": "stderr",
|
|||
|
"output_type": "stream",
|
|||
|
"text": [
|
|||
|
"d:\\Методы искусственного интеллекта\\MII_Salin_Oleg_PIbd-33\\.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"
|
|||
|
},
|
|||
|
{
|
|||
|
"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",
|
|||
|
"speed[\"slow\"] = fuzz.zmf(speed.universe, 20, 60)\n",
|
|||
|
"speed[\"average\"] = fuzz.trapmf(speed.universe, [10, 30, 60, 80])\n",
|
|||
|
"speed[\"fast\"] = fuzz.smf(speed.universe, 60, 80)\n",
|
|||
|
"speed.view()\n",
|
|||
|
"\n",
|
|||
|
"target[\"slow\"] = fuzz.zmf(target.universe, 20, 60)\n",
|
|||
|
"target[\"average\"] = fuzz.trapmf(target.universe, [10, 30, 60, 80])\n",
|
|||
|
"target[\"fast\"] = fuzz.smf(target.universe, 60, 80)\n",
|
|||
|
"target.view()\n",
|
|||
|
"\n",
|
|||
|
"cadence[\"low\"] = fuzz.zmf(cadence.universe, 0, 80)\n",
|
|||
|
"cadence[\"average\"] = fuzz.trapmf(cadence.universe, [0, 60, 70, 90])\n",
|
|||
|
"cadence[\"high\"] = fuzz.smf(cadence.universe, 80, 110)\n",
|
|||
|
"cadence.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": 26,
|
|||
|
"metadata": {},
|
|||
|
"outputs": [
|
|||
|
{
|
|||
|
"data": {
|
|||
|
"text/plain": [
|
|||
|
"(<Figure size 640x480 with 1 Axes>, <Axes: >)"
|
|||
|
]
|
|||
|
},
|
|||
|
"execution_count": 26,
|
|||
|
"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(speed[\"slow\"] & target[\"fast\"], cadence[\"high\"])\n",
|
|||
|
"rule2 = ctrl.Rule(speed[\"slow\"] & target[\"average\"], cadence[\"high\"])\n",
|
|||
|
"rule3 = ctrl.Rule(speed[\"slow\"] & target[\"slow\"], cadence[\"low\"])\n",
|
|||
|
"rule4 = ctrl.Rule(speed[\"average\"] & target[\"fast\"], cadence[\"high\"])\n",
|
|||
|
"rule5 = ctrl.Rule(speed[\"average\"] & target[\"average\"], cadence[\"average\"])\n",
|
|||
|
"rule6 = ctrl.Rule(speed[\"average\"] & target[\"slow\"], cadence[\"low\"])\n",
|
|||
|
"rule7 = ctrl.Rule(speed[\"fast\"] & target[\"fast\"], cadence[\"high\"])\n",
|
|||
|
"rule8 = ctrl.Rule(speed[\"fast\"] & target[\"average\"], cadence[\"low\"])\n",
|
|||
|
"rule9 = ctrl.Rule(speed[\"fast\"] & target[\"slow\"], cadence[\"low\"])\n",
|
|||
|
"\n",
|
|||
|
"rule1.view()"
|
|||
|
]
|
|||
|
},
|
|||
|
{
|
|||
|
"cell_type": "markdown",
|
|||
|
"metadata": {},
|
|||
|
"source": [
|
|||
|
"#### Создание нечеткой системы и добавление нечетких правил в базу знаний нечеткой системы"
|
|||
|
]
|
|||
|
},
|
|||
|
{
|
|||
|
"cell_type": "code",
|
|||
|
"execution_count": 27,
|
|||
|
"metadata": {},
|
|||
|
"outputs": [],
|
|||
|
"source": [
|
|||
|
"cadence_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",
|
|||
|
"cadences = ctrl.ControlSystemSimulation(cadence_ctrl)"
|
|||
|
]
|
|||
|
},
|
|||
|
{
|
|||
|
"cell_type": "markdown",
|
|||
|
"metadata": {},
|
|||
|
"source": [
|
|||
|
"#### Пример расчета выходной переменной influx на основе входных переменных level и flow\n",
|
|||
|
"\n",
|
|||
|
"Система также формирует подробный журнал выполнения процесса нечеткого логического вывода"
|
|||
|
]
|
|||
|
},
|
|||
|
{
|
|||
|
"cell_type": "code",
|
|||
|
"execution_count": 28,
|
|||
|
"metadata": {},
|
|||
|
"outputs": [
|
|||
|
{
|
|||
|
"name": "stdout",
|
|||
|
"output_type": "stream",
|
|||
|
"text": [
|
|||
|
"=============\n",
|
|||
|
" Antecedents \n",
|
|||
|
"=============\n",
|
|||
|
"Antecedent: speed = 60\n",
|
|||
|
" - slow : 0.0\n",
|
|||
|
" - average : 1.0\n",
|
|||
|
" - fast : 0.0\n",
|
|||
|
"Antecedent: target = 20\n",
|
|||
|
" - slow : 1.0\n",
|
|||
|
" - average : 0.5\n",
|
|||
|
" - fast : 0.0\n",
|
|||
|
"\n",
|
|||
|
"=======\n",
|
|||
|
" Rules \n",
|
|||
|
"=======\n",
|
|||
|
"RULE #0:\n",
|
|||
|
" IF speed[slow] AND target[fast] THEN cadence[high]\n",
|
|||
|
"\tAND aggregation function : fmin\n",
|
|||
|
"\tOR aggregation function : fmax\n",
|
|||
|
"\n",
|
|||
|
" Aggregation (IF-clause):\n",
|
|||
|
" - speed[slow] : 0.0\n",
|
|||
|
" - target[fast] : 0.0\n",
|
|||
|
" speed[slow] AND target[fast] = 0.0\n",
|
|||
|
" Activation (THEN-clause):\n",
|
|||
|
" cadence[high] : 0.0\n",
|
|||
|
"\n",
|
|||
|
"RULE #1:\n",
|
|||
|
" IF speed[slow] AND target[average] THEN cadence[high]\n",
|
|||
|
"\tAND aggregation function : fmin\n",
|
|||
|
"\tOR aggregation function : fmax\n",
|
|||
|
"\n",
|
|||
|
" Aggregation (IF-clause):\n",
|
|||
|
" - speed[slow] : 0.0\n",
|
|||
|
" - target[average] : 0.5\n",
|
|||
|
" speed[slow] AND target[average] = 0.0\n",
|
|||
|
" Activation (THEN-clause):\n",
|
|||
|
" cadence[high] : 0.0\n",
|
|||
|
"\n",
|
|||
|
"RULE #2:\n",
|
|||
|
" IF speed[slow] AND target[slow] THEN cadence[low]\n",
|
|||
|
"\tAND aggregation function : fmin\n",
|
|||
|
"\tOR aggregation function : fmax\n",
|
|||
|
"\n",
|
|||
|
" Aggregation (IF-clause):\n",
|
|||
|
" - speed[slow] : 0.0\n",
|
|||
|
" - target[slow] : 1.0\n",
|
|||
|
" speed[slow] AND target[slow] = 0.0\n",
|
|||
|
" Activation (THEN-clause):\n",
|
|||
|
" cadence[low] : 0.0\n",
|
|||
|
"\n",
|
|||
|
"RULE #3:\n",
|
|||
|
" IF speed[average] AND target[fast] THEN cadence[high]\n",
|
|||
|
"\tAND aggregation function : fmin\n",
|
|||
|
"\tOR aggregation function : fmax\n",
|
|||
|
"\n",
|
|||
|
" Aggregation (IF-clause):\n",
|
|||
|
" - speed[average] : 1.0\n",
|
|||
|
" - target[fast] : 0.0\n",
|
|||
|
" speed[average] AND target[fast] = 0.0\n",
|
|||
|
" Activation (THEN-clause):\n",
|
|||
|
" cadence[high] : 0.0\n",
|
|||
|
"\n",
|
|||
|
"RULE #4:\n",
|
|||
|
" IF speed[average] AND target[average] THEN cadence[average]\n",
|
|||
|
"\tAND aggregation function : fmin\n",
|
|||
|
"\tOR aggregation function : fmax\n",
|
|||
|
"\n",
|
|||
|
" Aggregation (IF-clause):\n",
|
|||
|
" - speed[average] : 1.0\n",
|
|||
|
" - target[average] : 0.5\n",
|
|||
|
" speed[average] AND target[average] = 0.5\n",
|
|||
|
" Activation (THEN-clause):\n",
|
|||
|
" cadence[average] : 0.5\n",
|
|||
|
"\n",
|
|||
|
"RULE #5:\n",
|
|||
|
" IF speed[average] AND target[slow] THEN cadence[low]\n",
|
|||
|
"\tAND aggregation function : fmin\n",
|
|||
|
"\tOR aggregation function : fmax\n",
|
|||
|
"\n",
|
|||
|
" Aggregation (IF-clause):\n",
|
|||
|
" - speed[average] : 1.0\n",
|
|||
|
" - target[slow] : 1.0\n",
|
|||
|
" speed[average] AND target[slow] = 1.0\n",
|
|||
|
" Activation (THEN-clause):\n",
|
|||
|
" cadence[low] : 1.0\n",
|
|||
|
"\n",
|
|||
|
"RULE #6:\n",
|
|||
|
" IF speed[fast] AND target[fast] THEN cadence[high]\n",
|
|||
|
"\tAND aggregation function : fmin\n",
|
|||
|
"\tOR aggregation function : fmax\n",
|
|||
|
"\n",
|
|||
|
" Aggregation (IF-clause):\n",
|
|||
|
" - speed[fast] : 0.0\n",
|
|||
|
" - target[fast] : 0.0\n",
|
|||
|
" speed[fast] AND target[fast] = 0.0\n",
|
|||
|
" Activation (THEN-clause):\n",
|
|||
|
" cadence[high] : 0.0\n",
|
|||
|
"\n",
|
|||
|
"RULE #7:\n",
|
|||
|
" IF speed[fast] AND target[average] THEN cadence[low]\n",
|
|||
|
"\tAND aggregation function : fmin\n",
|
|||
|
"\tOR aggregation function : fmax\n",
|
|||
|
"\n",
|
|||
|
" Aggregation (IF-clause):\n",
|
|||
|
" - speed[fast] : 0.0\n",
|
|||
|
" - target[average] : 0.5\n",
|
|||
|
" speed[fast] AND target[average] = 0.0\n",
|
|||
|
" Activation (THEN-clause):\n",
|
|||
|
" cadence[low] : 0.0\n",
|
|||
|
"\n",
|
|||
|
"RULE #8:\n",
|
|||
|
" IF speed[fast] AND target[slow] THEN cadence[low]\n",
|
|||
|
"\tAND aggregation function : fmin\n",
|
|||
|
"\tOR aggregation function : fmax\n",
|
|||
|
"\n",
|
|||
|
" Aggregation (IF-clause):\n",
|
|||
|
" - speed[fast] : 0.0\n",
|
|||
|
" - target[slow] : 1.0\n",
|
|||
|
" speed[fast] AND target[slow] = 0.0\n",
|
|||
|
" Activation (THEN-clause):\n",
|
|||
|
" cadence[low] : 0.0\n",
|
|||
|
"\n",
|
|||
|
"\n",
|
|||
|
"==============================\n",
|
|||
|
" Intermediaries and Conquests \n",
|
|||
|
"==============================\n",
|
|||
|
"Consequent: cadence = 35.97074517705886\n",
|
|||
|
" low:\n",
|
|||
|
" Accumulate using accumulation_max : 1.0\n",
|
|||
|
" average:\n",
|
|||
|
" Accumulate using accumulation_max : 0.5\n",
|
|||
|
" high:\n",
|
|||
|
" Accumulate using accumulation_max : 0.0\n",
|
|||
|
"\n"
|
|||
|
]
|
|||
|
},
|
|||
|
{
|
|||
|
"data": {
|
|||
|
"text/plain": [
|
|||
|
"np.float64(35.97074517705886)"
|
|||
|
]
|
|||
|
},
|
|||
|
"execution_count": 28,
|
|||
|
"metadata": {},
|
|||
|
"output_type": "execute_result"
|
|||
|
}
|
|||
|
],
|
|||
|
"source": [
|
|||
|
"cadences.input[\"speed\"] = 60\n",
|
|||
|
"cadences.input[\"target\"] = 20\n",
|
|||
|
"cadences.compute()\n",
|
|||
|
"cadences.print_state()\n",
|
|||
|
"cadences.output[\"cadence\"]"
|
|||
|
]
|
|||
|
},
|
|||
|
{
|
|||
|
"cell_type": "markdown",
|
|||
|
"metadata": {},
|
|||
|
"source": [
|
|||
|
"#### Визуализация функции принадлежности для выходной переменной influx\n",
|
|||
|
"\n",
|
|||
|
"Функция получена в процессе аккумуляции и используется для дефаззификации значения выходной переменной influx"
|
|||
|
]
|
|||
|
},
|
|||
|
{
|
|||
|
"cell_type": "code",
|
|||
|
"execution_count": 29,
|
|||
|
"metadata": {},
|
|||
|
"outputs": [
|
|||
|
{
|
|||
|
"data": {
|
|||
|
"image/png": "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
|
|||
|
"text/plain": [
|
|||
|
"<Figure size 640x480 with 1 Axes>"
|
|||
|
]
|
|||
|
},
|
|||
|
"metadata": {},
|
|||
|
"output_type": "display_data"
|
|||
|
}
|
|||
|
],
|
|||
|
"source": [
|
|||
|
"cadence.view(sim=cadences)"
|
|||
|
]
|
|||
|
},
|
|||
|
{
|
|||
|
"cell_type": "markdown",
|
|||
|
"metadata": {},
|
|||
|
"source": [
|
|||
|
"## Пример решения задачи регрессии на основе нечеткого логического вывода"
|
|||
|
]
|
|||
|
},
|
|||
|
{
|
|||
|
"cell_type": "markdown",
|
|||
|
"metadata": {},
|
|||
|
"source": [
|
|||
|
"#### Загрузка данных"
|
|||
|
]
|
|||
|
},
|
|||
|
{
|
|||
|
"cell_type": "code",
|
|||
|
"execution_count": 43,
|
|||
|
"metadata": {},
|
|||
|
"outputs": [
|
|||
|
{
|
|||
|
"data": {
|
|||
|
"text/plain": [
|
|||
|
"'cars_train'"
|
|||
|
]
|
|||
|
},
|
|||
|
"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>Price</th>\n",
|
|||
|
" <th>Prodyear</th>\n",
|
|||
|
" <th>Engine volume</th>\n",
|
|||
|
" </tr>\n",
|
|||
|
" </thead>\n",
|
|||
|
" <tbody>\n",
|
|||
|
" <tr>\n",
|
|||
|
" <th>17944</th>\n",
|
|||
|
" <td>14426</td>\n",
|
|||
|
" <td>2010</td>\n",
|
|||
|
" <td>1.8</td>\n",
|
|||
|
" </tr>\n",
|
|||
|
" <tr>\n",
|
|||
|
" <th>10224</th>\n",
|
|||
|
" <td>1568</td>\n",
|
|||
|
" <td>2011</td>\n",
|
|||
|
" <td>2.4</td>\n",
|
|||
|
" </tr>\n",
|
|||
|
" <tr>\n",
|
|||
|
" <th>15926</th>\n",
|
|||
|
" <td>3136</td>\n",
|
|||
|
" <td>2012</td>\n",
|
|||
|
" <td>3.5</td>\n",
|
|||
|
" </tr>\n",
|
|||
|
" <tr>\n",
|
|||
|
" <th>559</th>\n",
|
|||
|
" <td>10976</td>\n",
|
|||
|
" <td>1995</td>\n",
|
|||
|
" <td>2.5</td>\n",
|
|||
|
" </tr>\n",
|
|||
|
" <tr>\n",
|
|||
|
" <th>15725</th>\n",
|
|||
|
" <td>21169</td>\n",
|
|||
|
" <td>2012</td>\n",
|
|||
|
" <td>1.6</td>\n",
|
|||
|
" </tr>\n",
|
|||
|
" <tr>\n",
|
|||
|
" <th>...</th>\n",
|
|||
|
" <td>...</td>\n",
|
|||
|
" <td>...</td>\n",
|
|||
|
" <td>...</td>\n",
|
|||
|
" </tr>\n",
|
|||
|
" <tr>\n",
|
|||
|
" <th>574</th>\n",
|
|||
|
" <td>10663</td>\n",
|
|||
|
" <td>2011</td>\n",
|
|||
|
" <td>1.3</td>\n",
|
|||
|
" </tr>\n",
|
|||
|
" <tr>\n",
|
|||
|
" <th>8337</th>\n",
|
|||
|
" <td>45</td>\n",
|
|||
|
" <td>2007</td>\n",
|
|||
|
" <td>1.3</td>\n",
|
|||
|
" </tr>\n",
|
|||
|
" <tr>\n",
|
|||
|
" <th>14664</th>\n",
|
|||
|
" <td>34497</td>\n",
|
|||
|
" <td>2011</td>\n",
|
|||
|
" <td>3.0</td>\n",
|
|||
|
" </tr>\n",
|
|||
|
" <tr>\n",
|
|||
|
" <th>12408</th>\n",
|
|||
|
" <td>43905</td>\n",
|
|||
|
" <td>2010</td>\n",
|
|||
|
" <td>3.5</td>\n",
|
|||
|
" </tr>\n",
|
|||
|
" <tr>\n",
|
|||
|
" <th>10796</th>\n",
|
|||
|
" <td>12858</td>\n",
|
|||
|
" <td>2013</td>\n",
|
|||
|
" <td>1.6</td>\n",
|
|||
|
" </tr>\n",
|
|||
|
" </tbody>\n",
|
|||
|
"</table>\n",
|
|||
|
"<p>15389 rows × 3 columns</p>\n",
|
|||
|
"</div>"
|
|||
|
],
|
|||
|
"text/plain": [
|
|||
|
" Price Prodyear Engine volume\n",
|
|||
|
"17944 14426 2010 1.8\n",
|
|||
|
"10224 1568 2011 2.4\n",
|
|||
|
"15926 3136 2012 3.5\n",
|
|||
|
"559 10976 1995 2.5\n",
|
|||
|
"15725 21169 2012 1.6\n",
|
|||
|
"... ... ... ...\n",
|
|||
|
"574 10663 2011 1.3\n",
|
|||
|
"8337 45 2007 1.3\n",
|
|||
|
"14664 34497 2011 3.0\n",
|
|||
|
"12408 43905 2010 3.5\n",
|
|||
|
"10796 12858 2013 1.6\n",
|
|||
|
"\n",
|
|||
|
"[15389 rows x 3 columns]"
|
|||
|
]
|
|||
|
},
|
|||
|
"metadata": {},
|
|||
|
"output_type": "display_data"
|
|||
|
},
|
|||
|
{
|
|||
|
"data": {
|
|||
|
"text/plain": [
|
|||
|
"'cars_test'"
|
|||
|
]
|
|||
|
},
|
|||
|
"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>Price</th>\n",
|
|||
|
" <th>Prodyear</th>\n",
|
|||
|
" <th>Engine volume</th>\n",
|
|||
|
" </tr>\n",
|
|||
|
" </thead>\n",
|
|||
|
" <tbody>\n",
|
|||
|
" <tr>\n",
|
|||
|
" <th>9398</th>\n",
|
|||
|
" <td>3293</td>\n",
|
|||
|
" <td>2010</td>\n",
|
|||
|
" <td>1.8</td>\n",
|
|||
|
" </tr>\n",
|
|||
|
" <tr>\n",
|
|||
|
" <th>7548</th>\n",
|
|||
|
" <td>8154</td>\n",
|
|||
|
" <td>2008</td>\n",
|
|||
|
" <td>3.3</td>\n",
|
|||
|
" </tr>\n",
|
|||
|
" <tr>\n",
|
|||
|
" <th>3040</th>\n",
|
|||
|
" <td>25089</td>\n",
|
|||
|
" <td>2013</td>\n",
|
|||
|
" <td>1.8</td>\n",
|
|||
|
" </tr>\n",
|
|||
|
" <tr>\n",
|
|||
|
" <th>3395</th>\n",
|
|||
|
" <td>17346</td>\n",
|
|||
|
" <td>2012</td>\n",
|
|||
|
" <td>1.6</td>\n",
|
|||
|
" </tr>\n",
|
|||
|
" <tr>\n",
|
|||
|
" <th>6379</th>\n",
|
|||
|
" <td>65052</td>\n",
|
|||
|
" <td>2018</td>\n",
|
|||
|
" <td>2.0</td>\n",
|
|||
|
" </tr>\n",
|
|||
|
" <tr>\n",
|
|||
|
" <th>...</th>\n",
|
|||
|
" <td>...</td>\n",
|
|||
|
" <td>...</td>\n",
|
|||
|
" <td>...</td>\n",
|
|||
|
" </tr>\n",
|
|||
|
" <tr>\n",
|
|||
|
" <th>5180</th>\n",
|
|||
|
" <td>7056</td>\n",
|
|||
|
" <td>2010</td>\n",
|
|||
|
" <td>2.0</td>\n",
|
|||
|
" </tr>\n",
|
|||
|
" <tr>\n",
|
|||
|
" <th>9497</th>\n",
|
|||
|
" <td>28225</td>\n",
|
|||
|
" <td>2011</td>\n",
|
|||
|
" <td>2.0</td>\n",
|
|||
|
" </tr>\n",
|
|||
|
" <tr>\n",
|
|||
|
" <th>13141</th>\n",
|
|||
|
" <td>11917</td>\n",
|
|||
|
" <td>2003</td>\n",
|
|||
|
" <td>2.4</td>\n",
|
|||
|
" </tr>\n",
|
|||
|
" <tr>\n",
|
|||
|
" <th>17474</th>\n",
|
|||
|
" <td>28225</td>\n",
|
|||
|
" <td>2013</td>\n",
|
|||
|
" <td>1.8</td>\n",
|
|||
|
" </tr>\n",
|
|||
|
" <tr>\n",
|
|||
|
" <th>2493</th>\n",
|
|||
|
" <td>3136</td>\n",
|
|||
|
" <td>1998</td>\n",
|
|||
|
" <td>2.8</td>\n",
|
|||
|
" </tr>\n",
|
|||
|
" </tbody>\n",
|
|||
|
"</table>\n",
|
|||
|
"<p>3848 rows × 3 columns</p>\n",
|
|||
|
"</div>"
|
|||
|
],
|
|||
|
"text/plain": [
|
|||
|
" Price Prodyear Engine volume\n",
|
|||
|
"9398 3293 2010 1.8\n",
|
|||
|
"7548 8154 2008 3.3\n",
|
|||
|
"3040 25089 2013 1.8\n",
|
|||
|
"3395 17346 2012 1.6\n",
|
|||
|
"6379 65052 2018 2.0\n",
|
|||
|
"... ... ... ...\n",
|
|||
|
"5180 7056 2010 2.0\n",
|
|||
|
"9497 28225 2011 2.0\n",
|
|||
|
"13141 11917 2003 2.4\n",
|
|||
|
"17474 28225 2013 1.8\n",
|
|||
|
"2493 3136 1998 2.8\n",
|
|||
|
"\n",
|
|||
|
"[3848 rows x 3 columns]"
|
|||
|
]
|
|||
|
},
|
|||
|
"metadata": {},
|
|||
|
"output_type": "display_data"
|
|||
|
}
|
|||
|
],
|
|||
|
"source": [
|
|||
|
"import pandas as pd\n",
|
|||
|
"from utils import split_stratified_into_train_val_test\n",
|
|||
|
"\n",
|
|||
|
"df = pd.read_csv(\"data/car_price_prediction.csv\")\n",
|
|||
|
"df = df.drop([\"ID\", \"Manufacturer\", \"Model\", \"Leatherinterior\", \"Fueltype\", \"Cylinders\",\n",
|
|||
|
" \"Doors\", \"Wheel\", \"Color\", \"Levy\", \"Drive wheels\", \"Airbags\", \"Gear box type\", \"Mileage\"], axis=1)\n",
|
|||
|
"df = df.dropna()\n",
|
|||
|
"df[\"Engine volume\"] = df[\"Engine volume\"].apply(\n",
|
|||
|
" lambda x: float(x.split()[0])\n",
|
|||
|
")\n",
|
|||
|
"\n",
|
|||
|
"\n",
|
|||
|
"cars_train, X_val, cars_test, y_train, y_val, y_test = split_stratified_into_train_val_test(\n",
|
|||
|
" df,\n",
|
|||
|
" stratify_colname=\"Category\",\n",
|
|||
|
" target_colname=\"Price\",\n",
|
|||
|
" frac_train=0.80,\n",
|
|||
|
" frac_val=0,\n",
|
|||
|
" frac_test=0.20\n",
|
|||
|
")\n",
|
|||
|
"\n",
|
|||
|
"cars_train = cars_train.drop(\"Category\", axis=1)\n",
|
|||
|
"cars_test = cars_test.drop(\"Category\", axis=1)\n",
|
|||
|
"display(\"cars_train\", cars_train)\n",
|
|||
|
"display(\"cars_test\", cars_test)"
|
|||
|
]
|
|||
|
},
|
|||
|
{
|
|||
|
"cell_type": "markdown",
|
|||
|
"metadata": {},
|
|||
|
"source": [
|
|||
|
"#### Инициализация лингвистических переменных и автоматическое формирование нечетких переменных"
|
|||
|
]
|
|||
|
},
|
|||
|
{
|
|||
|
"cell_type": "code",
|
|||
|
"execution_count": 31,
|
|||
|
"metadata": {},
|
|||
|
"outputs": [
|
|||
|
{
|
|||
|
"name": "stdout",
|
|||
|
"output_type": "stream",
|
|||
|
"text": [
|
|||
|
"26307500\n"
|
|||
|
]
|
|||
|
},
|
|||
|
{
|
|||
|
"name": "stderr",
|
|||
|
"output_type": "stream",
|
|||
|
"text": [
|
|||
|
"d:\\Методы искусственного интеллекта\\MII_Salin_Oleg_PIbd-33\\.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": "iVBORw0KGgoAAAANSUhEUgAAAjoAAAGyCAYAAADtQ27oAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjAsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvlHJYcgAAAAlwSFlzAAAPYQAAD2EBqD+naQAAVcBJREFUeJzt3QdYleX7B/Ave8qSIQqIG3GgMhT3Ss20tExTU9xl5s7USi3LzF9aWpqauRuOHJXbzC3uvRUX4UA0QGQdDud/PY/BHxQM9MD7nnO+n+s61+G8Z9284uHmfu7necx0Op0OREREREbIXOkAiIiIiIoKEx0iIiIyWkx0iIiIyGgx0SEiIiKjxUSHiIiIjBYTHSIiIjJaTHSIiIjIaDHRISIiIqPFRIeIiIiMlsklOmIh6MTERHlNRERExk3RRGfXrl1o3749SpcuDTMzM6xdu/Y/n7Njxw7UqVMHNjY2qFixIhYtWlSo93zw4AGcnZ3lNRERERk3RROdhw8fIigoCLNmzSrQ469evYqXXnoJzZo1w/HjxzFs2DD069cPmzdvLvJYiYiIyPCYqWVTT1HRWbNmDTp06JDvY0aPHo3169fj9OnT2cfeeOMNxMfHY9OmTQV6HzFsJSo6CQkJcHJy0kvsREREpE6WMCCRkZFo2bJlrmOtW7eWlZ38pKWlyUvOREdoMW0H7BxKwMrCDFYW5v9ezGBtaQ4nWys42z26uNg/unaSX1ujlJMtvF1s5WOIiIiokLZ/Dhyaj2fyfpRxJzq3b9+Gl5dXrmPitkheUlJSYGdn98RzJk+ejE8++eSJ46/W9oGFrT002kxotDqkazORoc1EqiYTiakaXIpNQmKKBgn/XjIycxe+HG0sUcrZFt7OtijtbCeTn3LuDqjg4YjyHg6wtzaoU0tERFQ8Lv8JuJYFqrQtlrcz+t/GY8eOxYgRI7Jvi6TI19cXg5pXLPDQlRjde5iuxT8P03EnMRU3E1JxOyEFN+NTcSshBedvJ2Lb+VjEJf1/5aiMix0qeDqigsej5KeqtxMCvZ1gZ21RJN8nERGRQYiPBkL7Ao3fK5a3M6hEp1SpUrhz506uY+K2SFjyquYIYnaWuDxv/5Co4IiLr5t9vo8TlaCo2CRE3X2IqLtJuBybhJ0X72JJ5HVoM3WwMDdDJU9H1PRxRg0fF9Qs44wA7xKwsWTyQ0REJkCTAjyMBZx9i+0tDSrRCQ8Px4YNG3Id27p1qzyuBqJvp7afq7zklJ6RiYt3HuDk3wk4FRMvr1cfjZHDYaIvKLC0M+qVc0O98iUR4u+KEuz/ISIiY5Tw96NrFxNJdJKSknD58uVc08fFtHE3Nzf4+fnJYaeYmBgsWbJE3v/2229j5syZeP/999GnTx/89ddfWLFihZyJpWaiwbl6GWd5AfzksVSNFudvi+QnHoev/YO1x2Mwd9cVmJsB1UTiU94NdcuVRFh5NzY+ExGRcYi/8eja5dHvQqOfXi4W/xNr4jwuIiJCLgTYq1cvXLt2TT4u53OGDx+Os2fPwsfHB+PGjZOPKyi1Ti8X/wzX7yVj/5V7OHD1Pg5cuSd7gcRwV0hZVzQL8ETzAE859CWG0oiIiAzOkUXAuuHAR7GAhZVpraNTXNSa6DxO/LNE30/Brkt3sf18LPZGxckZYaLJWSQ84hJeoSRsrdjfQ0REBmLbp8CJX4ARZ4vtLZnoGAgx1BV55Z5Mev46H4u//0mBnZUFWlT1RLuapdG0igeTHiIiUrfVA4B/rgN9i29HAyY6Bkj8k4lZXZvP3MG6k7dw7lYiHKwt8EKgF16qWRqNK7tzJhcREanPgjaPZly9Nq/Y3tKgZl3RI6JHp6JnCXkZ1KyiTHrWn7wlL2uPH0YJG0u0qlYKnYJ9ULecG8xFhzMREZEa1tApW79Y35IVHSNz6c4DWeX57XgMrt1Lhp+bPV4P9sFrwT4o7ZL3WkNERERFTqsBPvMEXvoKCOmN4sJEx0iJf9bD1//BikPRWH/qFlI0WjSq5CGTHjHExX4eIiIqVqI3Z0ZN4M1VQMXc+1YWJSY6JiApLQMbTt7C8sPROHL9H7lRaecQX/SoV/apKz0TERHpzdXdwOJ2wKBDgEdlFBf26JgAsXVF51BfeRHbUiw/dAPLDt7AD7uvoEVVL/Su7y+nqnN9HiIiKjIJ0cW+KrLAio6JSk7PwNpjN7Fo31VcvJOEyl6OiKjvj461y3DndSIi0r8dU4BD84BR/78jQnFgomPixD+/WJ9n0d5r+PPcHVn9ebNeWfRpWA7ujs+3GSoREVG23wYBd84CA7ajOPFPdxMnhqvqV3CXl+j7yVgSeQ2L913D/D1X0SXUF/0blWcfDxER6Wefq2IethJY0aEnxCenY0nkdSzcexWJqRl4Jag03m5aAZW9SigdGhERGaoZtYCq7YBWnxXr27KiQ09wsbfGkBaV0K9ROSw7GI15u69g9bEYOS19SPNKqOEjdmEnIiIqoMxMIDEGcC6+XcuzmBf7O5LBEE3Joldn56hm+F+nmoiKTUL7mXvw9tIjuHD7gdLhERGRoUi6A2jTFRm6YqJD/8na0lyuu7NleGNMfT0Ip28moM2MXRi67BiuxT1UOjwiIjKUqeXOTHRIxSwtzOX+WX+NbIpPX6mO/VfuocVXOzFm1UnExKcoHR4REam5EVlQoKLDHh16pgqPmIIukp4f91/H7B1RWH00Rh4b0qKi7PEhIiLKlejYOj+6FDNWdOiZif2y+jUqj13vN5MJjlhxucmXO7Bgz1WkZ2QqHR4REalp6EqBRmSBiQ49NwcbS7zbvBJ2jGqGtjW88dn6s2g9fRe2nLktFyQkIiITFx+tyLCVwESH9MajhA0mv1oDG4Y2go+rHQYsPYKu8/bjdEyC0qEREZHSQ1cKNCILTHRI7wJKOWFJnzAs7B2KuKR0OSX9/V9P4F5SmtKhERFRcROVfTF05cKhKzKyrSWaVfHEpqGNMPHlath85g6aT9uJnw/cQGYmh7OIiExG8n1Ak8yhKzLeKek9wv3x18gmaBXohQ/WnELH2fs4nEVEZCoS/p1azqErMmYlHW3w5etBWPl2ONI0Wrw8cw8m/HYaCSkapUMjIqKi9PDeo2tHTyiBiQ4Vq1B/N/wxuCE+aFsVvx75Gy2m7cTaYzGcnUVEZKw0yY+urewVeXsmOlTsrCzM5fo720Y2Rd3ybhi2/Dh6LzqEm1xdmYjI+GiY6JCJKuVsi1nd6mB+RAjO33qAVl/vkists1mZiMjIEh0zc8DSRpG3Z6JDimtR1QtbRjRG+yBvfLT2tFx7h5uFEhEZifTkR9UcMzNF3p6JDqmCk60VJr9aEz/3q4ubCSlyd/R5u65Ay+oOEZFh06QAVnaKvT0THVKV+hXdsXlYY3QN88PnG8/htdn7cOVuktJhERHR8wxdKdSfIzDRIdWxt7bEhPbV8Ovb4XL6edtvdmPp/uucmUVEZIg0THSI8hRc1g3rhzREp2AfjFt7Ws7Min2QqnRYRERU2ETHmokOUb7Vnc861MDCXqE4HZOI1l/vwqbTt5UOi4iICtuMrBAmOmQQmgV4YvOwRnLBwbd/PIJRK0/gQSpXVSYiUj0Nm5GJCryNxNwewfhfp5rYcOqW7N05duMfpcMiIqKnYY8OUeF2Re8c4ouNQxujpIMNXp8Tie93RXGRQSIitdIw0SEqNL+S9nKD0L4Ny+HzDefRb8lh3H+YrnRYRET0ODYjEz37nllj21aVjcpiCKvtjN04ePW+0mEREdETzcjs0SF6rkblDUMbwc/NHm98H4mZf13iispERKpqRrZX7O2Z6JBR8Ha2w8/962JQs4qYtvUiIhYcRFxSmtJhERGRhj06RHphaWGOka2qYGmfujh/OxHtvtnDWVlEREpjokOkXw0ruWPd4EbwdrFFl7n78fOBG9w+gohICdoMQJvOZmQifSvlbItlA+qhc6gPPlhzCqNXnUSqRqt0WEREplfNEdiMTKR/NpYWcvuILzvVxNrjN9F5biRi4lOUDouIyLQakQUOXREVnddDfLHq7fq4l5SO9t/uwd7LcUqHRERkYhUde8VCYKJ
|
|||
|
"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": [
|
|||
|
"prodyear = ctrl.Antecedent(np.arange(1885, 2025, 1), \"prodyear\")\n",
|
|||
|
"engine_volume = ctrl.Antecedent(cars_train[\"Engine volume\"].sort_values().unique(), \"engine_volume\")\n",
|
|||
|
"print(cars_train[\"Price\"].max())\n",
|
|||
|
"price = ctrl.Consequent(np.arange(cars_train[\"Price\"].min() // 100, \n",
|
|||
|
" cars_train[\"Price\"].max() // 100, 1), \"price\")\n",
|
|||
|
"\n",
|
|||
|
"prodyear[\"old\"] = fuzz.zmf(prodyear.universe, 1885, 2020)\n",
|
|||
|
"prodyear[\"new\"] = fuzz.smf(prodyear.universe, 2015, 2020)\n",
|
|||
|
"prodyear.view()\n",
|
|||
|
"engine_volume.automf(3, variable_type=\"quant\")\n",
|
|||
|
"engine_volume.view()\n",
|
|||
|
"price[\"very cheap\"] = fuzz.trimf(price.universe, [0, 50, 100])\n",
|
|||
|
"price[\"cheap\"] = fuzz.trimf(price.universe, [80, 120, 200])\n",
|
|||
|
"price[\"average\"] = fuzz.trapmf(price.universe, [150, 250, 500, 1000])\n",
|
|||
|
"price[\"expensive\"] = fuzz.trimf(price.universe, [800, 1500, 2000])\n",
|
|||
|
"price[\"very expensive\"] = fuzz.smf(price.universe, 1800, 2500)\n",
|
|||
|
"price.view()"
|
|||
|
]
|
|||
|
},
|
|||
|
{
|
|||
|
"cell_type": "markdown",
|
|||
|
"metadata": {},
|
|||
|
"source": [
|
|||
|
"#### Нечеткие правила"
|
|||
|
]
|
|||
|
},
|
|||
|
{
|
|||
|
"cell_type": "code",
|
|||
|
"execution_count": 32,
|
|||
|
"metadata": {},
|
|||
|
"outputs": [],
|
|||
|
"source": [
|
|||
|
"rule11 = ctrl.Rule(\n",
|
|||
|
" engine_volume[\"low\"] & prodyear[\"old\"],\n",
|
|||
|
" price[\"very cheap\"],\n",
|
|||
|
")\n",
|
|||
|
"rule12 = ctrl.Rule(\n",
|
|||
|
" engine_volume[\"average\"] & prodyear[\"old\"],\n",
|
|||
|
" price[\"cheap\"],\n",
|
|||
|
")\n",
|
|||
|
"rule13 = ctrl.Rule(\n",
|
|||
|
" engine_volume[\"high\"] & prodyear[\"old\"],\n",
|
|||
|
" price[\"average\"],\n",
|
|||
|
")\n",
|
|||
|
"rule21 = ctrl.Rule(\n",
|
|||
|
" engine_volume[\"low\"] & prodyear[\"new\"],\n",
|
|||
|
" price[\"average\"],\n",
|
|||
|
")\n",
|
|||
|
"rule22 = ctrl.Rule(\n",
|
|||
|
" engine_volume[\"average\"] & prodyear[\"new\"],\n",
|
|||
|
" price[\"expensive\"],\n",
|
|||
|
")\n",
|
|||
|
"rule23 = ctrl.Rule(\n",
|
|||
|
" engine_volume[\"high\"] & prodyear[\"new\"],\n",
|
|||
|
" price[\"very expensive\"],\n",
|
|||
|
")"
|
|||
|
]
|
|||
|
},
|
|||
|
{
|
|||
|
"cell_type": "markdown",
|
|||
|
"metadata": {},
|
|||
|
"source": [
|
|||
|
"#### Создание нечеткой системы"
|
|||
|
]
|
|||
|
},
|
|||
|
{
|
|||
|
"cell_type": "code",
|
|||
|
"execution_count": 33,
|
|||
|
"metadata": {},
|
|||
|
"outputs": [
|
|||
|
{
|
|||
|
"data": {
|
|||
|
"text/plain": [
|
|||
|
"[IF engine_volume[low] AND prodyear[old] THEN price[very cheap]\n",
|
|||
|
" \tAND aggregation function : fmin\n",
|
|||
|
" \tOR aggregation function : fmax,\n",
|
|||
|
" IF engine_volume[average] AND prodyear[old] THEN price[cheap]\n",
|
|||
|
" \tAND aggregation function : fmin\n",
|
|||
|
" \tOR aggregation function : fmax,\n",
|
|||
|
" IF engine_volume[high] AND prodyear[old] THEN price[average]\n",
|
|||
|
" \tAND aggregation function : fmin\n",
|
|||
|
" \tOR aggregation function : fmax,\n",
|
|||
|
" IF engine_volume[low] AND prodyear[new] THEN price[average]\n",
|
|||
|
" \tAND aggregation function : fmin\n",
|
|||
|
" \tOR aggregation function : fmax,\n",
|
|||
|
" IF engine_volume[average] AND prodyear[new] THEN price[expensive]\n",
|
|||
|
" \tAND aggregation function : fmin\n",
|
|||
|
" \tOR aggregation function : fmax,\n",
|
|||
|
" IF engine_volume[high] AND prodyear[new] THEN price[very expensive]\n",
|
|||
|
" \tAND aggregation function : fmin\n",
|
|||
|
" \tOR aggregation function : fmax]"
|
|||
|
]
|
|||
|
},
|
|||
|
"execution_count": 33,
|
|||
|
"metadata": {},
|
|||
|
"output_type": "execute_result"
|
|||
|
}
|
|||
|
],
|
|||
|
"source": [
|
|||
|
"fuzzy_rules = [\n",
|
|||
|
" rule11,\n",
|
|||
|
" rule12,\n",
|
|||
|
" rule13,\n",
|
|||
|
" rule21,\n",
|
|||
|
" rule22, \n",
|
|||
|
" rule23,\n",
|
|||
|
"]\n",
|
|||
|
"\n",
|
|||
|
"price_cntrl = ctrl.ControlSystem(fuzzy_rules)\n",
|
|||
|
"\n",
|
|||
|
"sim = ctrl.ControlSystemSimulation(price_cntrl)\n",
|
|||
|
"\n",
|
|||
|
"fuzzy_rules"
|
|||
|
]
|
|||
|
},
|
|||
|
{
|
|||
|
"cell_type": "markdown",
|
|||
|
"metadata": {},
|
|||
|
"source": [
|
|||
|
"#### Пример использования полученной нечеткой системы"
|
|||
|
]
|
|||
|
},
|
|||
|
{
|
|||
|
"cell_type": "code",
|
|||
|
"execution_count": 34,
|
|||
|
"metadata": {},
|
|||
|
"outputs": [
|
|||
|
{
|
|||
|
"name": "stdout",
|
|||
|
"output_type": "stream",
|
|||
|
"text": [
|
|||
|
"=============\n",
|
|||
|
" Antecedents \n",
|
|||
|
"=============\n",
|
|||
|
"Antecedent: engine_volume = 1.5\n",
|
|||
|
" - low : 0.85\n",
|
|||
|
" - average : 0.15\n",
|
|||
|
" - high : 0.0\n",
|
|||
|
"Antecedent: prodyear = 2016\n",
|
|||
|
" - old : 0.0017558299039780523\n",
|
|||
|
" - new : 0.08000000000000002\n",
|
|||
|
"\n",
|
|||
|
"=======\n",
|
|||
|
" Rules \n",
|
|||
|
"=======\n",
|
|||
|
"RULE #0:\n",
|
|||
|
" IF engine_volume[low] AND prodyear[old] THEN price[very cheap]\n",
|
|||
|
"\tAND aggregation function : fmin\n",
|
|||
|
"\tOR aggregation function : fmax\n",
|
|||
|
"\n",
|
|||
|
" Aggregation (IF-clause):\n",
|
|||
|
" - engine_volume[low] : 0.85\n",
|
|||
|
" - prodyear[old] : 0.0017558299039780523\n",
|
|||
|
" engine_volume[low] AND prodyear[old] = 0.0017558299039780523\n",
|
|||
|
" Activation (THEN-clause):\n",
|
|||
|
" price[very cheap] : 0.0017558299039780523\n",
|
|||
|
"\n",
|
|||
|
"RULE #1:\n",
|
|||
|
" IF engine_volume[average] AND prodyear[old] THEN price[cheap]\n",
|
|||
|
"\tAND aggregation function : fmin\n",
|
|||
|
"\tOR aggregation function : fmax\n",
|
|||
|
"\n",
|
|||
|
" Aggregation (IF-clause):\n",
|
|||
|
" - engine_volume[average] : 0.15\n",
|
|||
|
" - prodyear[old] : 0.0017558299039780523\n",
|
|||
|
" engine_volume[average] AND prodyear[old] = 0.0017558299039780523\n",
|
|||
|
" Activation (THEN-clause):\n",
|
|||
|
" price[cheap] : 0.0017558299039780523\n",
|
|||
|
"\n",
|
|||
|
"RULE #2:\n",
|
|||
|
" IF engine_volume[high] AND prodyear[old] THEN price[average]\n",
|
|||
|
"\tAND aggregation function : fmin\n",
|
|||
|
"\tOR aggregation function : fmax\n",
|
|||
|
"\n",
|
|||
|
" Aggregation (IF-clause):\n",
|
|||
|
" - engine_volume[high] : 0.0\n",
|
|||
|
" - prodyear[old] : 0.0017558299039780523\n",
|
|||
|
" engine_volume[high] AND prodyear[old] = 0.0\n",
|
|||
|
" Activation (THEN-clause):\n",
|
|||
|
" price[average] : 0.0\n",
|
|||
|
"\n",
|
|||
|
"RULE #3:\n",
|
|||
|
" IF engine_volume[low] AND prodyear[new] THEN price[average]\n",
|
|||
|
"\tAND aggregation function : fmin\n",
|
|||
|
"\tOR aggregation function : fmax\n",
|
|||
|
"\n",
|
|||
|
" Aggregation (IF-clause):\n",
|
|||
|
" - engine_volume[low] : 0.85\n",
|
|||
|
" - prodyear[new] : 0.08000000000000002\n",
|
|||
|
" engine_volume[low] AND prodyear[new] = 0.08000000000000002\n",
|
|||
|
" Activation (THEN-clause):\n",
|
|||
|
" price[average] : 0.08000000000000002\n",
|
|||
|
"\n",
|
|||
|
"RULE #4:\n",
|
|||
|
" IF engine_volume[average] AND prodyear[new] THEN price[expensive]\n",
|
|||
|
"\tAND aggregation function : fmin\n",
|
|||
|
"\tOR aggregation function : fmax\n",
|
|||
|
"\n",
|
|||
|
" Aggregation (IF-clause):\n",
|
|||
|
" - engine_volume[average] : 0.15\n",
|
|||
|
" - prodyear[new] : 0.08000000000000002\n",
|
|||
|
" engine_volume[average] AND prodyear[new] = 0.08000000000000002\n",
|
|||
|
" Activation (THEN-clause):\n",
|
|||
|
" price[expensive] : 0.08000000000000002\n",
|
|||
|
"\n",
|
|||
|
"RULE #5:\n",
|
|||
|
" IF engine_volume[high] AND prodyear[new] THEN price[very expensive]\n",
|
|||
|
"\tAND aggregation function : fmin\n",
|
|||
|
"\tOR aggregation function : fmax\n",
|
|||
|
"\n",
|
|||
|
" Aggregation (IF-clause):\n",
|
|||
|
" - engine_volume[high] : 0.0\n",
|
|||
|
" - prodyear[new] : 0.08000000000000002\n",
|
|||
|
" engine_volume[high] AND prodyear[new] = 0.0\n",
|
|||
|
" Activation (THEN-clause):\n",
|
|||
|
" price[very expensive] : 0.0\n",
|
|||
|
"\n",
|
|||
|
"\n",
|
|||
|
"==============================\n",
|
|||
|
" Intermediaries and Conquests \n",
|
|||
|
"==============================\n",
|
|||
|
"Consequent: price = 1065.2447541258305\n",
|
|||
|
" very cheap:\n",
|
|||
|
" Accumulate using accumulation_max : 0.0017558299039780523\n",
|
|||
|
" cheap:\n",
|
|||
|
" Accumulate using accumulation_max : 0.0017558299039780523\n",
|
|||
|
" average:\n",
|
|||
|
" Accumulate using accumulation_max : 0.08000000000000002\n",
|
|||
|
" expensive:\n",
|
|||
|
" Accumulate using accumulation_max : 0.08000000000000002\n",
|
|||
|
" very expensive:\n",
|
|||
|
" Accumulate using accumulation_max : 0.0\n",
|
|||
|
"\n"
|
|||
|
]
|
|||
|
},
|
|||
|
{
|
|||
|
"data": {
|
|||
|
"text/plain": [
|
|||
|
"np.float64(1065.2447541258305)"
|
|||
|
]
|
|||
|
},
|
|||
|
"metadata": {},
|
|||
|
"output_type": "display_data"
|
|||
|
}
|
|||
|
],
|
|||
|
"source": [
|
|||
|
"sim.input[\"prodyear\"] = 2016\n",
|
|||
|
"sim.input[\"engine_volume\"] = 1.5\n",
|
|||
|
"sim.compute()\n",
|
|||
|
"sim.print_state()\n",
|
|||
|
"display(sim.output[\"price\"])"
|
|||
|
]
|
|||
|
},
|
|||
|
{
|
|||
|
"cell_type": "markdown",
|
|||
|
"metadata": {},
|
|||
|
"source": [
|
|||
|
"#### Функция для автоматизации вычисления целевой переменной Y на основе вектора признаков X"
|
|||
|
]
|
|||
|
},
|
|||
|
{
|
|||
|
"cell_type": "code",
|
|||
|
"execution_count": 35,
|
|||
|
"metadata": {},
|
|||
|
"outputs": [],
|
|||
|
"source": [
|
|||
|
"def fuzzy_pred(row):\n",
|
|||
|
" sim.input[\"prodyear\"] = row[\"Prodyear\"]\n",
|
|||
|
" sim.input[\"engine_volume\"] = row[\"Engine volume\"]\n",
|
|||
|
" sim.compute()\n",
|
|||
|
" return sim.output[\"price\"]"
|
|||
|
]
|
|||
|
},
|
|||
|
{
|
|||
|
"cell_type": "markdown",
|
|||
|
"metadata": {},
|
|||
|
"source": [
|
|||
|
"#### Тестирование нечеткой системы на обучающей выборке"
|
|||
|
]
|
|||
|
},
|
|||
|
{
|
|||
|
"cell_type": "code",
|
|||
|
"execution_count": 36,
|
|||
|
"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>Price</th>\n",
|
|||
|
" <th>Prodyear</th>\n",
|
|||
|
" <th>Engine volume</th>\n",
|
|||
|
" <th>PricePred</th>\n",
|
|||
|
" </tr>\n",
|
|||
|
" </thead>\n",
|
|||
|
" <tbody>\n",
|
|||
|
" <tr>\n",
|
|||
|
" <th>14122</th>\n",
|
|||
|
" <td>35124</td>\n",
|
|||
|
" <td>2019</td>\n",
|
|||
|
" <td>5.7</td>\n",
|
|||
|
" <td>1083.035198</td>\n",
|
|||
|
" </tr>\n",
|
|||
|
" <tr>\n",
|
|||
|
" <th>5666</th>\n",
|
|||
|
" <td>26657</td>\n",
|
|||
|
" <td>2011</td>\n",
|
|||
|
" <td>1.8</td>\n",
|
|||
|
" <td>99.933398</td>\n",
|
|||
|
" </tr>\n",
|
|||
|
" <tr>\n",
|
|||
|
" <th>13023</th>\n",
|
|||
|
" <td>4200</td>\n",
|
|||
|
" <td>2001</td>\n",
|
|||
|
" <td>1.6</td>\n",
|
|||
|
" <td>99.704172</td>\n",
|
|||
|
" </tr>\n",
|
|||
|
" <tr>\n",
|
|||
|
" <th>1838</th>\n",
|
|||
|
" <td>15530</td>\n",
|
|||
|
" <td>2016</td>\n",
|
|||
|
" <td>2.0</td>\n",
|
|||
|
" <td>1065.244754</td>\n",
|
|||
|
" </tr>\n",
|
|||
|
" <tr>\n",
|
|||
|
" <th>3112</th>\n",
|
|||
|
" <td>32302</td>\n",
|
|||
|
" <td>2013</td>\n",
|
|||
|
" <td>2.5</td>\n",
|
|||
|
" <td>99.959694</td>\n",
|
|||
|
" </tr>\n",
|
|||
|
" <tr>\n",
|
|||
|
" <th>9204</th>\n",
|
|||
|
" <td>5959</td>\n",
|
|||
|
" <td>2015</td>\n",
|
|||
|
" <td>2.5</td>\n",
|
|||
|
" <td>99.979430</td>\n",
|
|||
|
" </tr>\n",
|
|||
|
" <tr>\n",
|
|||
|
" <th>3100</th>\n",
|
|||
|
" <td>22580</td>\n",
|
|||
|
" <td>2017</td>\n",
|
|||
|
" <td>2.0</td>\n",
|
|||
|
" <td>954.577176</td>\n",
|
|||
|
" </tr>\n",
|
|||
|
" <tr>\n",
|
|||
|
" <th>12754</th>\n",
|
|||
|
" <td>9408</td>\n",
|
|||
|
" <td>2012</td>\n",
|
|||
|
" <td>3.0</td>\n",
|
|||
|
" <td>99.947365</td>\n",
|
|||
|
" </tr>\n",
|
|||
|
" <tr>\n",
|
|||
|
" <th>14803</th>\n",
|
|||
|
" <td>6586</td>\n",
|
|||
|
" <td>2018</td>\n",
|
|||
|
" <td>2.5</td>\n",
|
|||
|
" <td>848.532066</td>\n",
|
|||
|
" </tr>\n",
|
|||
|
" <tr>\n",
|
|||
|
" <th>4756</th>\n",
|
|||
|
" <td>6586</td>\n",
|
|||
|
" <td>1999</td>\n",
|
|||
|
" <td>2.0</td>\n",
|
|||
|
" <td>99.638970</td>\n",
|
|||
|
" </tr>\n",
|
|||
|
" <tr>\n",
|
|||
|
" <th>9505</th>\n",
|
|||
|
" <td>20385</td>\n",
|
|||
|
" <td>2012</td>\n",
|
|||
|
" <td>2.5</td>\n",
|
|||
|
" <td>99.947365</td>\n",
|
|||
|
" </tr>\n",
|
|||
|
" <tr>\n",
|
|||
|
" <th>17586</th>\n",
|
|||
|
" <td>40769</td>\n",
|
|||
|
" <td>2008</td>\n",
|
|||
|
" <td>3.0</td>\n",
|
|||
|
" <td>99.881685</td>\n",
|
|||
|
" </tr>\n",
|
|||
|
" <tr>\n",
|
|||
|
" <th>13728</th>\n",
|
|||
|
" <td>8154</td>\n",
|
|||
|
" <td>2003</td>\n",
|
|||
|
" <td>1.5</td>\n",
|
|||
|
" <td>99.762966</td>\n",
|
|||
|
" </tr>\n",
|
|||
|
" <tr>\n",
|
|||
|
" <th>944</th>\n",
|
|||
|
" <td>10036</td>\n",
|
|||
|
" <td>2002</td>\n",
|
|||
|
" <td>2.0</td>\n",
|
|||
|
" <td>99.734373</td>\n",
|
|||
|
" </tr>\n",
|
|||
|
" <tr>\n",
|
|||
|
" <th>18262</th>\n",
|
|||
|
" <td>251</td>\n",
|
|||
|
" <td>2019</td>\n",
|
|||
|
" <td>2.5</td>\n",
|
|||
|
" <td>831.412760</td>\n",
|
|||
|
" </tr>\n",
|
|||
|
" </tbody>\n",
|
|||
|
"</table>\n",
|
|||
|
"</div>"
|
|||
|
],
|
|||
|
"text/plain": [
|
|||
|
" Price Prodyear Engine volume PricePred\n",
|
|||
|
"14122 35124 2019 5.7 1083.035198\n",
|
|||
|
"5666 26657 2011 1.8 99.933398\n",
|
|||
|
"13023 4200 2001 1.6 99.704172\n",
|
|||
|
"1838 15530 2016 2.0 1065.244754\n",
|
|||
|
"3112 32302 2013 2.5 99.959694\n",
|
|||
|
"9204 5959 2015 2.5 99.979430\n",
|
|||
|
"3100 22580 2017 2.0 954.577176\n",
|
|||
|
"12754 9408 2012 3.0 99.947365\n",
|
|||
|
"14803 6586 2018 2.5 848.532066\n",
|
|||
|
"4756 6586 1999 2.0 99.638970\n",
|
|||
|
"9505 20385 2012 2.5 99.947365\n",
|
|||
|
"17586 40769 2008 3.0 99.881685\n",
|
|||
|
"13728 8154 2003 1.5 99.762966\n",
|
|||
|
"944 10036 2002 2.0 99.734373\n",
|
|||
|
"18262 251 2019 2.5 831.412760"
|
|||
|
]
|
|||
|
},
|
|||
|
"execution_count": 36,
|
|||
|
"metadata": {},
|
|||
|
"output_type": "execute_result"
|
|||
|
}
|
|||
|
],
|
|||
|
"source": [
|
|||
|
"result_train = cars_train.copy()\n",
|
|||
|
"\n",
|
|||
|
"result_train[\"PricePred\"] = result_train.apply(fuzzy_pred, axis=1)\n",
|
|||
|
"\n",
|
|||
|
"result_train.head(15)"
|
|||
|
]
|
|||
|
},
|
|||
|
{
|
|||
|
"cell_type": "markdown",
|
|||
|
"metadata": {},
|
|||
|
"source": [
|
|||
|
"#### Тестирование нечеткой системы на тестовой выборке"
|
|||
|
]
|
|||
|
},
|
|||
|
{
|
|||
|
"cell_type": "code",
|
|||
|
"execution_count": 48,
|
|||
|
"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>Price</th>\n",
|
|||
|
" <th>Prodyear</th>\n",
|
|||
|
" <th>Engine volume</th>\n",
|
|||
|
" <th>PricePred</th>\n",
|
|||
|
" </tr>\n",
|
|||
|
" </thead>\n",
|
|||
|
" <tbody>\n",
|
|||
|
" <tr>\n",
|
|||
|
" <th>9398</th>\n",
|
|||
|
" <td>3293</td>\n",
|
|||
|
" <td>2010</td>\n",
|
|||
|
" <td>1.8</td>\n",
|
|||
|
" <td>9991.779367</td>\n",
|
|||
|
" </tr>\n",
|
|||
|
" <tr>\n",
|
|||
|
" <th>7548</th>\n",
|
|||
|
" <td>8154</td>\n",
|
|||
|
" <td>2008</td>\n",
|
|||
|
" <td>3.3</td>\n",
|
|||
|
" <td>9988.168542</td>\n",
|
|||
|
" </tr>\n",
|
|||
|
" <tr>\n",
|
|||
|
" <th>3040</th>\n",
|
|||
|
" <td>25089</td>\n",
|
|||
|
" <td>2013</td>\n",
|
|||
|
" <td>1.8</td>\n",
|
|||
|
" <td>9995.969432</td>\n",
|
|||
|
" </tr>\n",
|
|||
|
" <tr>\n",
|
|||
|
" <th>3395</th>\n",
|
|||
|
" <td>17346</td>\n",
|
|||
|
" <td>2012</td>\n",
|
|||
|
" <td>1.6</td>\n",
|
|||
|
" <td>9994.736527</td>\n",
|
|||
|
" </tr>\n",
|
|||
|
" <tr>\n",
|
|||
|
" <th>6379</th>\n",
|
|||
|
" <td>65052</td>\n",
|
|||
|
" <td>2018</td>\n",
|
|||
|
" <td>2.0</td>\n",
|
|||
|
" <td>80674.546145</td>\n",
|
|||
|
" </tr>\n",
|
|||
|
" <tr>\n",
|
|||
|
" <th>...</th>\n",
|
|||
|
" <td>...</td>\n",
|
|||
|
" <td>...</td>\n",
|
|||
|
" <td>...</td>\n",
|
|||
|
" <td>...</td>\n",
|
|||
|
" </tr>\n",
|
|||
|
" <tr>\n",
|
|||
|
" <th>5180</th>\n",
|
|||
|
" <td>7056</td>\n",
|
|||
|
" <td>2010</td>\n",
|
|||
|
" <td>2.0</td>\n",
|
|||
|
" <td>9991.779367</td>\n",
|
|||
|
" </tr>\n",
|
|||
|
" <tr>\n",
|
|||
|
" <th>9497</th>\n",
|
|||
|
" <td>28225</td>\n",
|
|||
|
" <td>2011</td>\n",
|
|||
|
" <td>2.0</td>\n",
|
|||
|
" <td>9993.339772</td>\n",
|
|||
|
" </tr>\n",
|
|||
|
" <tr>\n",
|
|||
|
" <th>13141</th>\n",
|
|||
|
" <td>11917</td>\n",
|
|||
|
" <td>2003</td>\n",
|
|||
|
" <td>2.4</td>\n",
|
|||
|
" <td>9976.296566</td>\n",
|
|||
|
" </tr>\n",
|
|||
|
" <tr>\n",
|
|||
|
" <th>17474</th>\n",
|
|||
|
" <td>28225</td>\n",
|
|||
|
" <td>2013</td>\n",
|
|||
|
" <td>1.8</td>\n",
|
|||
|
" <td>9995.969432</td>\n",
|
|||
|
" </tr>\n",
|
|||
|
" <tr>\n",
|
|||
|
" <th>2493</th>\n",
|
|||
|
" <td>3136</td>\n",
|
|||
|
" <td>1998</td>\n",
|
|||
|
" <td>2.8</td>\n",
|
|||
|
" <td>9960.397848</td>\n",
|
|||
|
" </tr>\n",
|
|||
|
" </tbody>\n",
|
|||
|
"</table>\n",
|
|||
|
"<p>3848 rows × 4 columns</p>\n",
|
|||
|
"</div>"
|
|||
|
],
|
|||
|
"text/plain": [
|
|||
|
" Price Prodyear Engine volume PricePred\n",
|
|||
|
"9398 3293 2010 1.8 9991.779367\n",
|
|||
|
"7548 8154 2008 3.3 9988.168542\n",
|
|||
|
"3040 25089 2013 1.8 9995.969432\n",
|
|||
|
"3395 17346 2012 1.6 9994.736527\n",
|
|||
|
"6379 65052 2018 2.0 80674.546145\n",
|
|||
|
"... ... ... ... ...\n",
|
|||
|
"5180 7056 2010 2.0 9991.779367\n",
|
|||
|
"9497 28225 2011 2.0 9993.339772\n",
|
|||
|
"13141 11917 2003 2.4 9976.296566\n",
|
|||
|
"17474 28225 2013 1.8 9995.969432\n",
|
|||
|
"2493 3136 1998 2.8 9960.397848\n",
|
|||
|
"\n",
|
|||
|
"[3848 rows x 4 columns]"
|
|||
|
]
|
|||
|
},
|
|||
|
"metadata": {},
|
|||
|
"output_type": "display_data"
|
|||
|
}
|
|||
|
],
|
|||
|
"source": [
|
|||
|
"result_test = cars_test.copy()\n",
|
|||
|
"\n",
|
|||
|
"result_test[\"PricePred\"] = result_test.apply(fuzzy_pred, axis=1)\n",
|
|||
|
"result_test[\"PricePred\"] = result_test[\"PricePred\"].apply(lambda x: x * 100)\n",
|
|||
|
"\n",
|
|||
|
"display(result_test)\n"
|
|||
|
]
|
|||
|
},
|
|||
|
{
|
|||
|
"cell_type": "markdown",
|
|||
|
"metadata": {},
|
|||
|
"source": [
|
|||
|
"#### Оценка результатов на основе метрик для задачи регрессии"
|
|||
|
]
|
|||
|
},
|
|||
|
{
|
|||
|
"cell_type": "code",
|
|||
|
"execution_count": 49,
|
|||
|
"metadata": {},
|
|||
|
"outputs": [
|
|||
|
{
|
|||
|
"data": {
|
|||
|
"text/plain": [
|
|||
|
"{'RMSE_train': 36049.32401271262,\n",
|
|||
|
" 'RMSE_test': 36049.32401271262,\n",
|
|||
|
" 'RMAE_test': 142.4884853198348,\n",
|
|||
|
" 'R2_test': -1.5218160662039941}"
|
|||
|
]
|
|||
|
},
|
|||
|
"execution_count": 49,
|
|||
|
"metadata": {},
|
|||
|
"output_type": "execute_result"
|
|||
|
}
|
|||
|
],
|
|||
|
"source": [
|
|||
|
"import math\n",
|
|||
|
"from sklearn import metrics\n",
|
|||
|
"\n",
|
|||
|
"\n",
|
|||
|
"rmetrics = {}\n",
|
|||
|
"\n",
|
|||
|
"rmetrics[\"RMSE_train\"] = math.sqrt(\n",
|
|||
|
" metrics.mean_squared_error(result_test[\"Price\"], result_test[\"PricePred\"])\n",
|
|||
|
")\n",
|
|||
|
"rmetrics[\"RMSE_test\"] = math.sqrt(\n",
|
|||
|
" metrics.mean_squared_error(result_test[\"Price\"], result_test[\"PricePred\"])\n",
|
|||
|
")\n",
|
|||
|
"rmetrics[\"RMAE_test\"] = math.sqrt(\n",
|
|||
|
" metrics.mean_absolute_error(result_test[\"Price\"], result_test[\"PricePred\"])\n",
|
|||
|
")\n",
|
|||
|
"rmetrics[\"R2_test\"] = metrics.r2_score(\n",
|
|||
|
" result_test[\"Price\"], result_test[\"PricePred\"]\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.13.2"
|
|||
|
}
|
|||
|
},
|
|||
|
"nbformat": 4,
|
|||
|
"nbformat_minor": 2
|
|||
|
}
|