2228 lines
395 KiB
Plaintext
2228 lines
395 KiB
Plaintext
|
{
|
|||
|
"cells": [
|
|||
|
{
|
|||
|
"cell_type": "markdown",
|
|||
|
"metadata": {},
|
|||
|
"source": [
|
|||
|
"#### Создание лингвистических переменных\n",
|
|||
|
"\n",
|
|||
|
"Входные X: task и target\n",
|
|||
|
"Выходные Y: need"
|
|||
|
]
|
|||
|
},
|
|||
|
{
|
|||
|
"cell_type": "code",
|
|||
|
"execution_count": 28,
|
|||
|
"metadata": {},
|
|||
|
"outputs": [],
|
|||
|
"source": [
|
|||
|
"import numpy as np\n",
|
|||
|
"from skfuzzy import control as ctrl\n",
|
|||
|
"\n",
|
|||
|
"task = ctrl.Antecedent(np.arange(0, 100, 1), \"task\")\n",
|
|||
|
"target = ctrl.Antecedent(np.arange(0, 100, 1), \"target\")\n",
|
|||
|
"need = ctrl.Consequent(np.arange(0, 130, 1), \"need\")"
|
|||
|
]
|
|||
|
},
|
|||
|
{
|
|||
|
"cell_type": "markdown",
|
|||
|
"metadata": {},
|
|||
|
"source": [
|
|||
|
"#### Формирование нечетких переменных для лингвистических переменных и их визуализация"
|
|||
|
]
|
|||
|
},
|
|||
|
{
|
|||
|
"cell_type": "code",
|
|||
|
"execution_count": 29,
|
|||
|
"metadata": {},
|
|||
|
"outputs": [
|
|||
|
{
|
|||
|
"name": "stderr",
|
|||
|
"output_type": "stream",
|
|||
|
"text": [
|
|||
|
"c:\\TEMP_UNIVERSITY\\mai\\.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",
|
|||
|
"task[\"less\"] = fuzz.zmf(task.universe, 20, 60)\n",
|
|||
|
"task[\"ok\"] = fuzz.trapmf(task.universe, [10, 30, 60, 80])\n",
|
|||
|
"task[\"more\"] = fuzz.smf(task.universe, 60, 80)\n",
|
|||
|
"task.view()\n",
|
|||
|
"\n",
|
|||
|
"target[\"less\"] = fuzz.zmf(target.universe, 20, 60)\n",
|
|||
|
"target[\"ok\"] = fuzz.trapmf(target.universe, [10, 30, 60, 80])\n",
|
|||
|
"target[\"more\"] = fuzz.smf(target.universe, 60, 80)\n",
|
|||
|
"target.view()\n",
|
|||
|
"\n",
|
|||
|
"need[\"less\"] = fuzz.zmf(need.universe, 0, 80)\n",
|
|||
|
"need[\"ok\"] = fuzz.trapmf(need.universe, [0, 60, 70, 90])\n",
|
|||
|
"need[\"more\"] = fuzz.smf(need.universe, 80, 110)\n",
|
|||
|
"need.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": 30,
|
|||
|
"metadata": {},
|
|||
|
"outputs": [
|
|||
|
{
|
|||
|
"data": {
|
|||
|
"text/plain": [
|
|||
|
"(<Figure size 640x480 with 1 Axes>, <Axes: >)"
|
|||
|
]
|
|||
|
},
|
|||
|
"execution_count": 30,
|
|||
|
"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(task[\"less\"] & target[\"more\"], need[\"more\"])\n",
|
|||
|
"rule2 = ctrl.Rule(task[\"less\"] & target[\"ok\"], need[\"more\"])\n",
|
|||
|
"rule3 = ctrl.Rule(task[\"less\"] & target[\"less\"], need[\"less\"])\n",
|
|||
|
"rule4 = ctrl.Rule(task[\"ok\"] & target[\"more\"], need[\"more\"])\n",
|
|||
|
"rule5 = ctrl.Rule(task[\"ok\"] & target[\"ok\"], need[\"ok\"])\n",
|
|||
|
"rule6 = ctrl.Rule(task[\"ok\"] & target[\"less\"], need[\"less\"])\n",
|
|||
|
"rule7 = ctrl.Rule(task[\"more\"] & target[\"more\"], need[\"more\"])\n",
|
|||
|
"rule8 = ctrl.Rule(task[\"more\"] & target[\"ok\"], need[\"less\"])\n",
|
|||
|
"rule9 = ctrl.Rule(task[\"more\"] & target[\"less\"], need[\"less\"])\n",
|
|||
|
"\n",
|
|||
|
"rule1.view()"
|
|||
|
]
|
|||
|
},
|
|||
|
{
|
|||
|
"cell_type": "markdown",
|
|||
|
"metadata": {},
|
|||
|
"source": [
|
|||
|
"#### Создание нечеткой системы и добавление нечетких правил в базу знаний нечеткой системы"
|
|||
|
]
|
|||
|
},
|
|||
|
{
|
|||
|
"cell_type": "code",
|
|||
|
"execution_count": 31,
|
|||
|
"metadata": {},
|
|||
|
"outputs": [],
|
|||
|
"source": [
|
|||
|
"need_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",
|
|||
|
"needs = ctrl.ControlSystemSimulation(need_ctrl)"
|
|||
|
]
|
|||
|
},
|
|||
|
{
|
|||
|
"cell_type": "markdown",
|
|||
|
"metadata": {},
|
|||
|
"source": [
|
|||
|
"#### Пример расчета выходной переменной influx на основе входных переменных level и flow\n",
|
|||
|
"\n",
|
|||
|
"Система также формирует подробный журнал выполнения процесса нечеткого логического вывода"
|
|||
|
]
|
|||
|
},
|
|||
|
{
|
|||
|
"cell_type": "code",
|
|||
|
"execution_count": 32,
|
|||
|
"metadata": {},
|
|||
|
"outputs": [
|
|||
|
{
|
|||
|
"name": "stdout",
|
|||
|
"output_type": "stream",
|
|||
|
"text": [
|
|||
|
"=============\n",
|
|||
|
" Antecedents \n",
|
|||
|
"=============\n",
|
|||
|
"Antecedent: task = 60\n",
|
|||
|
" - less : 0.0\n",
|
|||
|
" - ok : 1.0\n",
|
|||
|
" - more : 0.0\n",
|
|||
|
"Antecedent: target = 20\n",
|
|||
|
" - less : 1.0\n",
|
|||
|
" - ok : 0.5\n",
|
|||
|
" - more : 0.0\n",
|
|||
|
"\n",
|
|||
|
"=======\n",
|
|||
|
" Rules \n",
|
|||
|
"=======\n",
|
|||
|
"RULE #0:\n",
|
|||
|
" IF task[less] AND target[more] THEN need[more]\n",
|
|||
|
"\tAND aggregation function : fmin\n",
|
|||
|
"\tOR aggregation function : fmax\n",
|
|||
|
"\n",
|
|||
|
" Aggregation (IF-clause):\n",
|
|||
|
" - task[less] : 0.0\n",
|
|||
|
" - target[more] : 0.0\n",
|
|||
|
" task[less] AND target[more] = 0.0\n",
|
|||
|
" Activation (THEN-clause):\n",
|
|||
|
" need[more] : 0.0\n",
|
|||
|
"\n",
|
|||
|
"RULE #1:\n",
|
|||
|
" IF task[less] AND target[ok] THEN need[more]\n",
|
|||
|
"\tAND aggregation function : fmin\n",
|
|||
|
"\tOR aggregation function : fmax\n",
|
|||
|
"\n",
|
|||
|
" Aggregation (IF-clause):\n",
|
|||
|
" - task[less] : 0.0\n",
|
|||
|
" - target[ok] : 0.5\n",
|
|||
|
" task[less] AND target[ok] = 0.0\n",
|
|||
|
" Activation (THEN-clause):\n",
|
|||
|
" need[more] : 0.0\n",
|
|||
|
"\n",
|
|||
|
"RULE #2:\n",
|
|||
|
" IF task[less] AND target[less] THEN need[less]\n",
|
|||
|
"\tAND aggregation function : fmin\n",
|
|||
|
"\tOR aggregation function : fmax\n",
|
|||
|
"\n",
|
|||
|
" Aggregation (IF-clause):\n",
|
|||
|
" - task[less] : 0.0\n",
|
|||
|
" - target[less] : 1.0\n",
|
|||
|
" task[less] AND target[less] = 0.0\n",
|
|||
|
" Activation (THEN-clause):\n",
|
|||
|
" need[less] : 0.0\n",
|
|||
|
"\n",
|
|||
|
"RULE #3:\n",
|
|||
|
" IF task[ok] AND target[more] THEN need[more]\n",
|
|||
|
"\tAND aggregation function : fmin\n",
|
|||
|
"\tOR aggregation function : fmax\n",
|
|||
|
"\n",
|
|||
|
" Aggregation (IF-clause):\n",
|
|||
|
" - task[ok] : 1.0\n",
|
|||
|
" - target[more] : 0.0\n",
|
|||
|
" task[ok] AND target[more] = 0.0\n",
|
|||
|
" Activation (THEN-clause):\n",
|
|||
|
" need[more] : 0.0\n",
|
|||
|
"\n",
|
|||
|
"RULE #4:\n",
|
|||
|
" IF task[ok] AND target[ok] THEN need[ok]\n",
|
|||
|
"\tAND aggregation function : fmin\n",
|
|||
|
"\tOR aggregation function : fmax\n",
|
|||
|
"\n",
|
|||
|
" Aggregation (IF-clause):\n",
|
|||
|
" - task[ok] : 1.0\n",
|
|||
|
" - target[ok] : 0.5\n",
|
|||
|
" task[ok] AND target[ok] = 0.5\n",
|
|||
|
" Activation (THEN-clause):\n",
|
|||
|
" need[ok] : 0.5\n",
|
|||
|
"\n",
|
|||
|
"RULE #5:\n",
|
|||
|
" IF task[ok] AND target[less] THEN need[less]\n",
|
|||
|
"\tAND aggregation function : fmin\n",
|
|||
|
"\tOR aggregation function : fmax\n",
|
|||
|
"\n",
|
|||
|
" Aggregation (IF-clause):\n",
|
|||
|
" - task[ok] : 1.0\n",
|
|||
|
" - target[less] : 1.0\n",
|
|||
|
" task[ok] AND target[less] = 1.0\n",
|
|||
|
" Activation (THEN-clause):\n",
|
|||
|
" need[less] : 1.0\n",
|
|||
|
"\n",
|
|||
|
"RULE #6:\n",
|
|||
|
" IF task[more] AND target[more] THEN need[more]\n",
|
|||
|
"\tAND aggregation function : fmin\n",
|
|||
|
"\tOR aggregation function : fmax\n",
|
|||
|
"\n",
|
|||
|
" Aggregation (IF-clause):\n",
|
|||
|
" - task[more] : 0.0\n",
|
|||
|
" - target[more] : 0.0\n",
|
|||
|
" task[more] AND target[more] = 0.0\n",
|
|||
|
" Activation (THEN-clause):\n",
|
|||
|
" need[more] : 0.0\n",
|
|||
|
"\n",
|
|||
|
"RULE #7:\n",
|
|||
|
" IF task[more] AND target[ok] THEN need[less]\n",
|
|||
|
"\tAND aggregation function : fmin\n",
|
|||
|
"\tOR aggregation function : fmax\n",
|
|||
|
"\n",
|
|||
|
" Aggregation (IF-clause):\n",
|
|||
|
" - task[more] : 0.0\n",
|
|||
|
" - target[ok] : 0.5\n",
|
|||
|
" task[more] AND target[ok] = 0.0\n",
|
|||
|
" Activation (THEN-clause):\n",
|
|||
|
" need[less] : 0.0\n",
|
|||
|
"\n",
|
|||
|
"RULE #8:\n",
|
|||
|
" IF task[more] AND target[less] THEN need[less]\n",
|
|||
|
"\tAND aggregation function : fmin\n",
|
|||
|
"\tOR aggregation function : fmax\n",
|
|||
|
"\n",
|
|||
|
" Aggregation (IF-clause):\n",
|
|||
|
" - task[more] : 0.0\n",
|
|||
|
" - target[less] : 1.0\n",
|
|||
|
" task[more] AND target[less] = 0.0\n",
|
|||
|
" Activation (THEN-clause):\n",
|
|||
|
" need[less] : 0.0\n",
|
|||
|
"\n",
|
|||
|
"\n",
|
|||
|
"==============================\n",
|
|||
|
" Intermediaries and Conquests \n",
|
|||
|
"==============================\n",
|
|||
|
"Consequent: need = 35.97074517705886\n",
|
|||
|
" less:\n",
|
|||
|
" Accumulate using accumulation_max : 1.0\n",
|
|||
|
" ok:\n",
|
|||
|
" Accumulate using accumulation_max : 0.5\n",
|
|||
|
" more:\n",
|
|||
|
" Accumulate using accumulation_max : 0.0\n",
|
|||
|
"\n"
|
|||
|
]
|
|||
|
},
|
|||
|
{
|
|||
|
"data": {
|
|||
|
"text/plain": [
|
|||
|
"np.float64(35.97074517705886)"
|
|||
|
]
|
|||
|
},
|
|||
|
"execution_count": 32,
|
|||
|
"metadata": {},
|
|||
|
"output_type": "execute_result"
|
|||
|
}
|
|||
|
],
|
|||
|
"source": [
|
|||
|
"needs.input[\"task\"] = 60\n",
|
|||
|
"needs.input[\"target\"] = 20\n",
|
|||
|
"needs.compute()\n",
|
|||
|
"needs.print_state()\n",
|
|||
|
"needs.output[\"need\"]"
|
|||
|
]
|
|||
|
},
|
|||
|
{
|
|||
|
"cell_type": "markdown",
|
|||
|
"metadata": {},
|
|||
|
"source": [
|
|||
|
"#### Визуализация функции принадлежности для выходной переменной influx\n",
|
|||
|
"\n",
|
|||
|
"Функция получена в процессе аккумуляции и используется для дефаззификации значения выходной переменной influx"
|
|||
|
]
|
|||
|
},
|
|||
|
{
|
|||
|
"cell_type": "code",
|
|||
|
"execution_count": 33,
|
|||
|
"metadata": {},
|
|||
|
"outputs": [
|
|||
|
{
|
|||
|
"data": {
|
|||
|
"image/png": "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
|
|||
|
"text/plain": [
|
|||
|
"<Figure size 640x480 with 1 Axes>"
|
|||
|
]
|
|||
|
},
|
|||
|
"metadata": {},
|
|||
|
"output_type": "display_data"
|
|||
|
}
|
|||
|
],
|
|||
|
"source": [
|
|||
|
"need.view(sim=needs)"
|
|||
|
]
|
|||
|
},
|
|||
|
{
|
|||
|
"cell_type": "markdown",
|
|||
|
"metadata": {},
|
|||
|
"source": [
|
|||
|
"## Пример решения задачи регрессии на основе нечеткого логического вывода"
|
|||
|
]
|
|||
|
},
|
|||
|
{
|
|||
|
"cell_type": "markdown",
|
|||
|
"metadata": {},
|
|||
|
"source": [
|
|||
|
"#### Загрузка данных"
|
|||
|
]
|
|||
|
},
|
|||
|
{
|
|||
|
"cell_type": "code",
|
|||
|
"execution_count": null,
|
|||
|
"metadata": {},
|
|||
|
"outputs": [
|
|||
|
{
|
|||
|
"data": {
|
|||
|
"text/plain": [
|
|||
|
"'houses_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>bedrooms</th>\n",
|
|||
|
" <th>bathrooms</th>\n",
|
|||
|
" <th>sqft_living</th>\n",
|
|||
|
" <th>sqft_lot</th>\n",
|
|||
|
" <th>floors</th>\n",
|
|||
|
" <th>waterfront</th>\n",
|
|||
|
" <th>view</th>\n",
|
|||
|
" <th>condition</th>\n",
|
|||
|
" <th>grade</th>\n",
|
|||
|
" <th>sqft_above</th>\n",
|
|||
|
" <th>sqft_basement</th>\n",
|
|||
|
" <th>yr_built</th>\n",
|
|||
|
" <th>yr_renovated</th>\n",
|
|||
|
" <th>sqft_living15</th>\n",
|
|||
|
" <th>sqft_lot15</th>\n",
|
|||
|
" </tr>\n",
|
|||
|
" </thead>\n",
|
|||
|
" <tbody>\n",
|
|||
|
" <tr>\n",
|
|||
|
" <th>9848</th>\n",
|
|||
|
" <td>450000.0</td>\n",
|
|||
|
" <td>2</td>\n",
|
|||
|
" <td>2.00</td>\n",
|
|||
|
" <td>1610</td>\n",
|
|||
|
" <td>6160</td>\n",
|
|||
|
" <td>2.0</td>\n",
|
|||
|
" <td>0</td>\n",
|
|||
|
" <td>0</td>\n",
|
|||
|
" <td>4</td>\n",
|
|||
|
" <td>8</td>\n",
|
|||
|
" <td>1610</td>\n",
|
|||
|
" <td>0</td>\n",
|
|||
|
" <td>1977</td>\n",
|
|||
|
" <td>0</td>\n",
|
|||
|
" <td>1750</td>\n",
|
|||
|
" <td>6305</td>\n",
|
|||
|
" </tr>\n",
|
|||
|
" <tr>\n",
|
|||
|
" <th>3710</th>\n",
|
|||
|
" <td>361000.0</td>\n",
|
|||
|
" <td>3</td>\n",
|
|||
|
" <td>1.50</td>\n",
|
|||
|
" <td>1200</td>\n",
|
|||
|
" <td>7236</td>\n",
|
|||
|
" <td>1.0</td>\n",
|
|||
|
" <td>0</td>\n",
|
|||
|
" <td>0</td>\n",
|
|||
|
" <td>3</td>\n",
|
|||
|
" <td>7</td>\n",
|
|||
|
" <td>1200</td>\n",
|
|||
|
" <td>0</td>\n",
|
|||
|
" <td>1975</td>\n",
|
|||
|
" <td>0</td>\n",
|
|||
|
" <td>1680</td>\n",
|
|||
|
" <td>7800</td>\n",
|
|||
|
" </tr>\n",
|
|||
|
" <tr>\n",
|
|||
|
" <th>16998</th>\n",
|
|||
|
" <td>413000.0</td>\n",
|
|||
|
" <td>4</td>\n",
|
|||
|
" <td>1.00</td>\n",
|
|||
|
" <td>1410</td>\n",
|
|||
|
" <td>6000</td>\n",
|
|||
|
" <td>1.0</td>\n",
|
|||
|
" <td>0</td>\n",
|
|||
|
" <td>0</td>\n",
|
|||
|
" <td>3</td>\n",
|
|||
|
" <td>7</td>\n",
|
|||
|
" <td>810</td>\n",
|
|||
|
" <td>600</td>\n",
|
|||
|
" <td>1925</td>\n",
|
|||
|
" <td>0</td>\n",
|
|||
|
" <td>1500</td>\n",
|
|||
|
" <td>4800</td>\n",
|
|||
|
" </tr>\n",
|
|||
|
" <tr>\n",
|
|||
|
" <th>1968</th>\n",
|
|||
|
" <td>490000.0</td>\n",
|
|||
|
" <td>4</td>\n",
|
|||
|
" <td>2.25</td>\n",
|
|||
|
" <td>2020</td>\n",
|
|||
|
" <td>85813</td>\n",
|
|||
|
" <td>2.0</td>\n",
|
|||
|
" <td>0</td>\n",
|
|||
|
" <td>0</td>\n",
|
|||
|
" <td>3</td>\n",
|
|||
|
" <td>7</td>\n",
|
|||
|
" <td>2020</td>\n",
|
|||
|
" <td>0</td>\n",
|
|||
|
" <td>1995</td>\n",
|
|||
|
" <td>0</td>\n",
|
|||
|
" <td>2120</td>\n",
|
|||
|
" <td>85813</td>\n",
|
|||
|
" </tr>\n",
|
|||
|
" <tr>\n",
|
|||
|
" <th>16407</th>\n",
|
|||
|
" <td>333000.0</td>\n",
|
|||
|
" <td>3</td>\n",
|
|||
|
" <td>1.00</td>\n",
|
|||
|
" <td>1050</td>\n",
|
|||
|
" <td>7560</td>\n",
|
|||
|
" <td>1.0</td>\n",
|
|||
|
" <td>0</td>\n",
|
|||
|
" <td>0</td>\n",
|
|||
|
" <td>3</td>\n",
|
|||
|
" <td>7</td>\n",
|
|||
|
" <td>1050</td>\n",
|
|||
|
" <td>0</td>\n",
|
|||
|
" <td>1951</td>\n",
|
|||
|
" <td>0</td>\n",
|
|||
|
" <td>1490</td>\n",
|
|||
|
" <td>7560</td>\n",
|
|||
|
" </tr>\n",
|
|||
|
" <tr>\n",
|
|||
|
" <th>...</th>\n",
|
|||
|
" <td>...</td>\n",
|
|||
|
" <td>...</td>\n",
|
|||
|
" <td>...</td>\n",
|
|||
|
" <td>...</td>\n",
|
|||
|
" <td>...</td>\n",
|
|||
|
" <td>...</td>\n",
|
|||
|
" <td>...</td>\n",
|
|||
|
" <td>...</td>\n",
|
|||
|
" <td>...</td>\n",
|
|||
|
" <td>...</td>\n",
|
|||
|
" <td>...</td>\n",
|
|||
|
" <td>...</td>\n",
|
|||
|
" <td>...</td>\n",
|
|||
|
" <td>...</td>\n",
|
|||
|
" <td>...</td>\n",
|
|||
|
" <td>...</td>\n",
|
|||
|
" </tr>\n",
|
|||
|
" <tr>\n",
|
|||
|
" <th>12454</th>\n",
|
|||
|
" <td>229000.0</td>\n",
|
|||
|
" <td>2</td>\n",
|
|||
|
" <td>1.00</td>\n",
|
|||
|
" <td>810</td>\n",
|
|||
|
" <td>5100</td>\n",
|
|||
|
" <td>1.0</td>\n",
|
|||
|
" <td>0</td>\n",
|
|||
|
" <td>0</td>\n",
|
|||
|
" <td>3</td>\n",
|
|||
|
" <td>6</td>\n",
|
|||
|
" <td>810</td>\n",
|
|||
|
" <td>0</td>\n",
|
|||
|
" <td>1955</td>\n",
|
|||
|
" <td>0</td>\n",
|
|||
|
" <td>1500</td>\n",
|
|||
|
" <td>5100</td>\n",
|
|||
|
" </tr>\n",
|
|||
|
" <tr>\n",
|
|||
|
" <th>10242</th>\n",
|
|||
|
" <td>279000.0</td>\n",
|
|||
|
" <td>3</td>\n",
|
|||
|
" <td>1.00</td>\n",
|
|||
|
" <td>1520</td>\n",
|
|||
|
" <td>8055</td>\n",
|
|||
|
" <td>1.5</td>\n",
|
|||
|
" <td>0</td>\n",
|
|||
|
" <td>0</td>\n",
|
|||
|
" <td>3</td>\n",
|
|||
|
" <td>7</td>\n",
|
|||
|
" <td>1520</td>\n",
|
|||
|
" <td>0</td>\n",
|
|||
|
" <td>1952</td>\n",
|
|||
|
" <td>0</td>\n",
|
|||
|
" <td>1560</td>\n",
|
|||
|
" <td>8160</td>\n",
|
|||
|
" </tr>\n",
|
|||
|
" <tr>\n",
|
|||
|
" <th>17115</th>\n",
|
|||
|
" <td>182500.0</td>\n",
|
|||
|
" <td>3</td>\n",
|
|||
|
" <td>1.00</td>\n",
|
|||
|
" <td>910</td>\n",
|
|||
|
" <td>7194</td>\n",
|
|||
|
" <td>1.0</td>\n",
|
|||
|
" <td>0</td>\n",
|
|||
|
" <td>0</td>\n",
|
|||
|
" <td>4</td>\n",
|
|||
|
" <td>7</td>\n",
|
|||
|
" <td>910</td>\n",
|
|||
|
" <td>0</td>\n",
|
|||
|
" <td>1971</td>\n",
|
|||
|
" <td>0</td>\n",
|
|||
|
" <td>1530</td>\n",
|
|||
|
" <td>7200</td>\n",
|
|||
|
" </tr>\n",
|
|||
|
" <tr>\n",
|
|||
|
" <th>19205</th>\n",
|
|||
|
" <td>695000.0</td>\n",
|
|||
|
" <td>3</td>\n",
|
|||
|
" <td>3.25</td>\n",
|
|||
|
" <td>3080</td>\n",
|
|||
|
" <td>12100</td>\n",
|
|||
|
" <td>2.0</td>\n",
|
|||
|
" <td>0</td>\n",
|
|||
|
" <td>0</td>\n",
|
|||
|
" <td>3</td>\n",
|
|||
|
" <td>8</td>\n",
|
|||
|
" <td>2080</td>\n",
|
|||
|
" <td>1000</td>\n",
|
|||
|
" <td>1984</td>\n",
|
|||
|
" <td>0</td>\n",
|
|||
|
" <td>2100</td>\n",
|
|||
|
" <td>6581</td>\n",
|
|||
|
" </tr>\n",
|
|||
|
" <tr>\n",
|
|||
|
" <th>12428</th>\n",
|
|||
|
" <td>430000.0</td>\n",
|
|||
|
" <td>3</td>\n",
|
|||
|
" <td>1.00</td>\n",
|
|||
|
" <td>1210</td>\n",
|
|||
|
" <td>5200</td>\n",
|
|||
|
" <td>1.0</td>\n",
|
|||
|
" <td>0</td>\n",
|
|||
|
" <td>0</td>\n",
|
|||
|
" <td>3</td>\n",
|
|||
|
" <td>6</td>\n",
|
|||
|
" <td>1210</td>\n",
|
|||
|
" <td>0</td>\n",
|
|||
|
" <td>1941</td>\n",
|
|||
|
" <td>0</td>\n",
|
|||
|
" <td>890</td>\n",
|
|||
|
" <td>5200</td>\n",
|
|||
|
" </tr>\n",
|
|||
|
" </tbody>\n",
|
|||
|
"</table>\n",
|
|||
|
"<p>17290 rows × 16 columns</p>\n",
|
|||
|
"</div>"
|
|||
|
],
|
|||
|
"text/plain": [
|
|||
|
" price bedrooms bathrooms sqft_living sqft_lot floors \\\n",
|
|||
|
"9848 450000.0 2 2.00 1610 6160 2.0 \n",
|
|||
|
"3710 361000.0 3 1.50 1200 7236 1.0 \n",
|
|||
|
"16998 413000.0 4 1.00 1410 6000 1.0 \n",
|
|||
|
"1968 490000.0 4 2.25 2020 85813 2.0 \n",
|
|||
|
"16407 333000.0 3 1.00 1050 7560 1.0 \n",
|
|||
|
"... ... ... ... ... ... ... \n",
|
|||
|
"12454 229000.0 2 1.00 810 5100 1.0 \n",
|
|||
|
"10242 279000.0 3 1.00 1520 8055 1.5 \n",
|
|||
|
"17115 182500.0 3 1.00 910 7194 1.0 \n",
|
|||
|
"19205 695000.0 3 3.25 3080 12100 2.0 \n",
|
|||
|
"12428 430000.0 3 1.00 1210 5200 1.0 \n",
|
|||
|
"\n",
|
|||
|
" waterfront view condition grade sqft_above sqft_basement \\\n",
|
|||
|
"9848 0 0 4 8 1610 0 \n",
|
|||
|
"3710 0 0 3 7 1200 0 \n",
|
|||
|
"16998 0 0 3 7 810 600 \n",
|
|||
|
"1968 0 0 3 7 2020 0 \n",
|
|||
|
"16407 0 0 3 7 1050 0 \n",
|
|||
|
"... ... ... ... ... ... ... \n",
|
|||
|
"12454 0 0 3 6 810 0 \n",
|
|||
|
"10242 0 0 3 7 1520 0 \n",
|
|||
|
"17115 0 0 4 7 910 0 \n",
|
|||
|
"19205 0 0 3 8 2080 1000 \n",
|
|||
|
"12428 0 0 3 6 1210 0 \n",
|
|||
|
"\n",
|
|||
|
" yr_built yr_renovated sqft_living15 sqft_lot15 \n",
|
|||
|
"9848 1977 0 1750 6305 \n",
|
|||
|
"3710 1975 0 1680 7800 \n",
|
|||
|
"16998 1925 0 1500 4800 \n",
|
|||
|
"1968 1995 0 2120 85813 \n",
|
|||
|
"16407 1951 0 1490 7560 \n",
|
|||
|
"... ... ... ... ... \n",
|
|||
|
"12454 1955 0 1500 5100 \n",
|
|||
|
"10242 1952 0 1560 8160 \n",
|
|||
|
"17115 1971 0 1530 7200 \n",
|
|||
|
"19205 1984 0 2100 6581 \n",
|
|||
|
"12428 1941 0 890 5200 \n",
|
|||
|
"\n",
|
|||
|
"[17290 rows x 16 columns]"
|
|||
|
]
|
|||
|
},
|
|||
|
"metadata": {},
|
|||
|
"output_type": "display_data"
|
|||
|
},
|
|||
|
{
|
|||
|
"data": {
|
|||
|
"text/plain": [
|
|||
|
"'houses_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>bedrooms</th>\n",
|
|||
|
" <th>bathrooms</th>\n",
|
|||
|
" <th>sqft_living</th>\n",
|
|||
|
" <th>sqft_lot</th>\n",
|
|||
|
" <th>floors</th>\n",
|
|||
|
" <th>waterfront</th>\n",
|
|||
|
" <th>view</th>\n",
|
|||
|
" <th>condition</th>\n",
|
|||
|
" <th>grade</th>\n",
|
|||
|
" <th>sqft_above</th>\n",
|
|||
|
" <th>sqft_basement</th>\n",
|
|||
|
" <th>yr_built</th>\n",
|
|||
|
" <th>yr_renovated</th>\n",
|
|||
|
" <th>sqft_living15</th>\n",
|
|||
|
" <th>sqft_lot15</th>\n",
|
|||
|
" </tr>\n",
|
|||
|
" </thead>\n",
|
|||
|
" <tbody>\n",
|
|||
|
" <tr>\n",
|
|||
|
" <th>8943</th>\n",
|
|||
|
" <td>852600.0</td>\n",
|
|||
|
" <td>4</td>\n",
|
|||
|
" <td>2.50</td>\n",
|
|||
|
" <td>3320</td>\n",
|
|||
|
" <td>11901</td>\n",
|
|||
|
" <td>2.0</td>\n",
|
|||
|
" <td>0</td>\n",
|
|||
|
" <td>0</td>\n",
|
|||
|
" <td>5</td>\n",
|
|||
|
" <td>9</td>\n",
|
|||
|
" <td>2650</td>\n",
|
|||
|
" <td>670</td>\n",
|
|||
|
" <td>1977</td>\n",
|
|||
|
" <td>0</td>\n",
|
|||
|
" <td>2700</td>\n",
|
|||
|
" <td>11114</td>\n",
|
|||
|
" </tr>\n",
|
|||
|
" <tr>\n",
|
|||
|
" <th>16711</th>\n",
|
|||
|
" <td>795000.0</td>\n",
|
|||
|
" <td>3</td>\n",
|
|||
|
" <td>2.75</td>\n",
|
|||
|
" <td>1820</td>\n",
|
|||
|
" <td>7517</td>\n",
|
|||
|
" <td>1.0</td>\n",
|
|||
|
" <td>0</td>\n",
|
|||
|
" <td>0</td>\n",
|
|||
|
" <td>3</td>\n",
|
|||
|
" <td>9</td>\n",
|
|||
|
" <td>1820</td>\n",
|
|||
|
" <td>0</td>\n",
|
|||
|
" <td>1997</td>\n",
|
|||
|
" <td>0</td>\n",
|
|||
|
" <td>2540</td>\n",
|
|||
|
" <td>8035</td>\n",
|
|||
|
" </tr>\n",
|
|||
|
" <tr>\n",
|
|||
|
" <th>4156</th>\n",
|
|||
|
" <td>222000.0</td>\n",
|
|||
|
" <td>3</td>\n",
|
|||
|
" <td>1.75</td>\n",
|
|||
|
" <td>1240</td>\n",
|
|||
|
" <td>7560</td>\n",
|
|||
|
" <td>1.0</td>\n",
|
|||
|
" <td>0</td>\n",
|
|||
|
" <td>0</td>\n",
|
|||
|
" <td>3</td>\n",
|
|||
|
" <td>8</td>\n",
|
|||
|
" <td>1070</td>\n",
|
|||
|
" <td>170</td>\n",
|
|||
|
" <td>1967</td>\n",
|
|||
|
" <td>0</td>\n",
|
|||
|
" <td>1650</td>\n",
|
|||
|
" <td>7560</td>\n",
|
|||
|
" </tr>\n",
|
|||
|
" <tr>\n",
|
|||
|
" <th>20873</th>\n",
|
|||
|
" <td>375000.0</td>\n",
|
|||
|
" <td>6</td>\n",
|
|||
|
" <td>2.25</td>\n",
|
|||
|
" <td>3206</td>\n",
|
|||
|
" <td>5793</td>\n",
|
|||
|
" <td>2.0</td>\n",
|
|||
|
" <td>0</td>\n",
|
|||
|
" <td>0</td>\n",
|
|||
|
" <td>3</td>\n",
|
|||
|
" <td>7</td>\n",
|
|||
|
" <td>3206</td>\n",
|
|||
|
" <td>0</td>\n",
|
|||
|
" <td>2012</td>\n",
|
|||
|
" <td>0</td>\n",
|
|||
|
" <td>2527</td>\n",
|
|||
|
" <td>5804</td>\n",
|
|||
|
" </tr>\n",
|
|||
|
" <tr>\n",
|
|||
|
" <th>6498</th>\n",
|
|||
|
" <td>274950.0</td>\n",
|
|||
|
" <td>3</td>\n",
|
|||
|
" <td>2.25</td>\n",
|
|||
|
" <td>1570</td>\n",
|
|||
|
" <td>8767</td>\n",
|
|||
|
" <td>1.0</td>\n",
|
|||
|
" <td>0</td>\n",
|
|||
|
" <td>0</td>\n",
|
|||
|
" <td>3</td>\n",
|
|||
|
" <td>7</td>\n",
|
|||
|
" <td>1180</td>\n",
|
|||
|
" <td>390</td>\n",
|
|||
|
" <td>1990</td>\n",
|
|||
|
" <td>0</td>\n",
|
|||
|
" <td>1570</td>\n",
|
|||
|
" <td>7434</td>\n",
|
|||
|
" </tr>\n",
|
|||
|
" <tr>\n",
|
|||
|
" <th>...</th>\n",
|
|||
|
" <td>...</td>\n",
|
|||
|
" <td>...</td>\n",
|
|||
|
" <td>...</td>\n",
|
|||
|
" <td>...</td>\n",
|
|||
|
" <td>...</td>\n",
|
|||
|
" <td>...</td>\n",
|
|||
|
" <td>...</td>\n",
|
|||
|
" <td>...</td>\n",
|
|||
|
" <td>...</td>\n",
|
|||
|
" <td>...</td>\n",
|
|||
|
" <td>...</td>\n",
|
|||
|
" <td>...</td>\n",
|
|||
|
" <td>...</td>\n",
|
|||
|
" <td>...</td>\n",
|
|||
|
" <td>...</td>\n",
|
|||
|
" <td>...</td>\n",
|
|||
|
" </tr>\n",
|
|||
|
" <tr>\n",
|
|||
|
" <th>21109</th>\n",
|
|||
|
" <td>315000.0</td>\n",
|
|||
|
" <td>2</td>\n",
|
|||
|
" <td>2.25</td>\n",
|
|||
|
" <td>1240</td>\n",
|
|||
|
" <td>705</td>\n",
|
|||
|
" <td>2.0</td>\n",
|
|||
|
" <td>0</td>\n",
|
|||
|
" <td>0</td>\n",
|
|||
|
" <td>3</td>\n",
|
|||
|
" <td>7</td>\n",
|
|||
|
" <td>1150</td>\n",
|
|||
|
" <td>90</td>\n",
|
|||
|
" <td>2009</td>\n",
|
|||
|
" <td>0</td>\n",
|
|||
|
" <td>1240</td>\n",
|
|||
|
" <td>750</td>\n",
|
|||
|
" </tr>\n",
|
|||
|
" <tr>\n",
|
|||
|
" <th>13160</th>\n",
|
|||
|
" <td>240000.0</td>\n",
|
|||
|
" <td>2</td>\n",
|
|||
|
" <td>1.00</td>\n",
|
|||
|
" <td>1320</td>\n",
|
|||
|
" <td>24319</td>\n",
|
|||
|
" <td>1.0</td>\n",
|
|||
|
" <td>0</td>\n",
|
|||
|
" <td>0</td>\n",
|
|||
|
" <td>3</td>\n",
|
|||
|
" <td>7</td>\n",
|
|||
|
" <td>1320</td>\n",
|
|||
|
" <td>0</td>\n",
|
|||
|
" <td>1966</td>\n",
|
|||
|
" <td>0</td>\n",
|
|||
|
" <td>1430</td>\n",
|
|||
|
" <td>98445</td>\n",
|
|||
|
" </tr>\n",
|
|||
|
" <tr>\n",
|
|||
|
" <th>3892</th>\n",
|
|||
|
" <td>695500.0</td>\n",
|
|||
|
" <td>5</td>\n",
|
|||
|
" <td>2.75</td>\n",
|
|||
|
" <td>2510</td>\n",
|
|||
|
" <td>9180</td>\n",
|
|||
|
" <td>1.0</td>\n",
|
|||
|
" <td>0</td>\n",
|
|||
|
" <td>1</td>\n",
|
|||
|
" <td>4</td>\n",
|
|||
|
" <td>8</td>\n",
|
|||
|
" <td>1600</td>\n",
|
|||
|
" <td>910</td>\n",
|
|||
|
" <td>1975</td>\n",
|
|||
|
" <td>0</td>\n",
|
|||
|
" <td>2650</td>\n",
|
|||
|
" <td>9780</td>\n",
|
|||
|
" </tr>\n",
|
|||
|
" <tr>\n",
|
|||
|
" <th>15547</th>\n",
|
|||
|
" <td>910000.0</td>\n",
|
|||
|
" <td>3</td>\n",
|
|||
|
" <td>2.00</td>\n",
|
|||
|
" <td>2700</td>\n",
|
|||
|
" <td>6120</td>\n",
|
|||
|
" <td>1.0</td>\n",
|
|||
|
" <td>0</td>\n",
|
|||
|
" <td>0</td>\n",
|
|||
|
" <td>4</td>\n",
|
|||
|
" <td>8</td>\n",
|
|||
|
" <td>1350</td>\n",
|
|||
|
" <td>1350</td>\n",
|
|||
|
" <td>1962</td>\n",
|
|||
|
" <td>0</td>\n",
|
|||
|
" <td>1700</td>\n",
|
|||
|
" <td>4590</td>\n",
|
|||
|
" </tr>\n",
|
|||
|
" <tr>\n",
|
|||
|
" <th>11770</th>\n",
|
|||
|
" <td>1850000.0</td>\n",
|
|||
|
" <td>5</td>\n",
|
|||
|
" <td>3.25</td>\n",
|
|||
|
" <td>3680</td>\n",
|
|||
|
" <td>6060</td>\n",
|
|||
|
" <td>2.0</td>\n",
|
|||
|
" <td>0</td>\n",
|
|||
|
" <td>0</td>\n",
|
|||
|
" <td>5</td>\n",
|
|||
|
" <td>9</td>\n",
|
|||
|
" <td>2630</td>\n",
|
|||
|
" <td>1050</td>\n",
|
|||
|
" <td>1925</td>\n",
|
|||
|
" <td>0</td>\n",
|
|||
|
" <td>3050</td>\n",
|
|||
|
" <td>5850</td>\n",
|
|||
|
" </tr>\n",
|
|||
|
" </tbody>\n",
|
|||
|
"</table>\n",
|
|||
|
"<p>4323 rows × 16 columns</p>\n",
|
|||
|
"</div>"
|
|||
|
],
|
|||
|
"text/plain": [
|
|||
|
" price bedrooms bathrooms sqft_living sqft_lot floors \\\n",
|
|||
|
"8943 852600.0 4 2.50 3320 11901 2.0 \n",
|
|||
|
"16711 795000.0 3 2.75 1820 7517 1.0 \n",
|
|||
|
"4156 222000.0 3 1.75 1240 7560 1.0 \n",
|
|||
|
"20873 375000.0 6 2.25 3206 5793 2.0 \n",
|
|||
|
"6498 274950.0 3 2.25 1570 8767 1.0 \n",
|
|||
|
"... ... ... ... ... ... ... \n",
|
|||
|
"21109 315000.0 2 2.25 1240 705 2.0 \n",
|
|||
|
"13160 240000.0 2 1.00 1320 24319 1.0 \n",
|
|||
|
"3892 695500.0 5 2.75 2510 9180 1.0 \n",
|
|||
|
"15547 910000.0 3 2.00 2700 6120 1.0 \n",
|
|||
|
"11770 1850000.0 5 3.25 3680 6060 2.0 \n",
|
|||
|
"\n",
|
|||
|
" waterfront view condition grade sqft_above sqft_basement \\\n",
|
|||
|
"8943 0 0 5 9 2650 670 \n",
|
|||
|
"16711 0 0 3 9 1820 0 \n",
|
|||
|
"4156 0 0 3 8 1070 170 \n",
|
|||
|
"20873 0 0 3 7 3206 0 \n",
|
|||
|
"6498 0 0 3 7 1180 390 \n",
|
|||
|
"... ... ... ... ... ... ... \n",
|
|||
|
"21109 0 0 3 7 1150 90 \n",
|
|||
|
"13160 0 0 3 7 1320 0 \n",
|
|||
|
"3892 0 1 4 8 1600 910 \n",
|
|||
|
"15547 0 0 4 8 1350 1350 \n",
|
|||
|
"11770 0 0 5 9 2630 1050 \n",
|
|||
|
"\n",
|
|||
|
" yr_built yr_renovated sqft_living15 sqft_lot15 \n",
|
|||
|
"8943 1977 0 2700 11114 \n",
|
|||
|
"16711 1997 0 2540 8035 \n",
|
|||
|
"4156 1967 0 1650 7560 \n",
|
|||
|
"20873 2012 0 2527 5804 \n",
|
|||
|
"6498 1990 0 1570 7434 \n",
|
|||
|
"... ... ... ... ... \n",
|
|||
|
"21109 2009 0 1240 750 \n",
|
|||
|
"13160 1966 0 1430 98445 \n",
|
|||
|
"3892 1975 0 2650 9780 \n",
|
|||
|
"15547 1962 0 1700 4590 \n",
|
|||
|
"11770 1925 0 3050 5850 \n",
|
|||
|
"\n",
|
|||
|
"[4323 rows x 16 columns]"
|
|||
|
]
|
|||
|
},
|
|||
|
"metadata": {},
|
|||
|
"output_type": "display_data"
|
|||
|
}
|
|||
|
],
|
|||
|
"source": [
|
|||
|
"import pandas as pd\n",
|
|||
|
"from utils import split_stratified_into_train_val_test\n",
|
|||
|
"import numpy as np\n",
|
|||
|
"import skfuzzy as fuzz\n",
|
|||
|
"import skfuzzy.control as ctrl\n",
|
|||
|
"\n",
|
|||
|
"# Загрузка и обработка данных\n",
|
|||
|
"df = pd.read_csv(\"data/kc_house_data.csv\")\n",
|
|||
|
"df = df.drop([\"id\", \"date\", \"lat\", \"long\"], axis=1)\n",
|
|||
|
"df = df.dropna()\n",
|
|||
|
"\n",
|
|||
|
"# Разбиение на обучающую, валидационную и тестовую выборки\n",
|
|||
|
"houses_train, X_val, houses_test, y_train, y_val, y_test = split_stratified_into_train_val_test(\n",
|
|||
|
" df,\n",
|
|||
|
" stratify_colname=\"zipcode\", # Стратификация по району\n",
|
|||
|
" target_colname=\"price\",\n",
|
|||
|
" frac_train=0.80,\n",
|
|||
|
" frac_val=0,\n",
|
|||
|
" frac_test=0.20\n",
|
|||
|
")\n",
|
|||
|
"\n",
|
|||
|
"# Удаляем столбец стратификации\n",
|
|||
|
"houses_train = houses_train.drop(\"zipcode\", axis=1)\n",
|
|||
|
"houses_test = houses_test.drop(\"zipcode\", axis=1)\n",
|
|||
|
"\n",
|
|||
|
"display(\"houses_train\", houses_train)\n",
|
|||
|
"display(\"houses_test\", houses_test)"
|
|||
|
]
|
|||
|
},
|
|||
|
{
|
|||
|
"cell_type": "markdown",
|
|||
|
"metadata": {},
|
|||
|
"source": [
|
|||
|
"#### Инициализация лингвистических переменных и автоматическое формирование нечетких переменных"
|
|||
|
]
|
|||
|
},
|
|||
|
{
|
|||
|
"cell_type": "code",
|
|||
|
"execution_count": 35,
|
|||
|
"metadata": {},
|
|||
|
"outputs": [
|
|||
|
{
|
|||
|
"name": "stdout",
|
|||
|
"output_type": "stream",
|
|||
|
"text": [
|
|||
|
"7700000.0\n"
|
|||
|
]
|
|||
|
},
|
|||
|
{
|
|||
|
"name": "stderr",
|
|||
|
"output_type": "stream",
|
|||
|
"text": [
|
|||
|
"c:\\TEMP_UNIVERSITY\\mai\\.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": [
|
|||
|
"# Определение нечетких переменных\n",
|
|||
|
"yr_built = ctrl.Antecedent(np.arange(1900, 2025, 1), \"yr_built\")\n",
|
|||
|
"sqft_living = ctrl.Antecedent(houses_train[\"sqft_living\"].sort_values().unique(), \"sqft_living\")\n",
|
|||
|
"\n",
|
|||
|
"print(houses_train[\"price\"].max())\n",
|
|||
|
"price = ctrl.Consequent(np.arange(houses_train[\"price\"].min() // 1000, \n",
|
|||
|
" houses_train[\"price\"].max() // 1000, 1), \"price\")\n",
|
|||
|
"\n",
|
|||
|
"# Размытие переменных\n",
|
|||
|
"yr_built[\"old\"] = fuzz.zmf(yr_built.universe, 1900, 2000)\n",
|
|||
|
"yr_built[\"new\"] = fuzz.smf(yr_built.universe, 1990, 2025)\n",
|
|||
|
"yr_built.view()\n",
|
|||
|
"\n",
|
|||
|
"sqft_living.automf(3, variable_type=\"quant\")\n",
|
|||
|
"sqft_living.view()\n",
|
|||
|
"\n",
|
|||
|
"price[\"very cheap\"] = fuzz.trimf(price.universe, [0, 200, 400])\n",
|
|||
|
"price[\"cheap\"] = fuzz.trimf(price.universe, [300, 500, 800])\n",
|
|||
|
"price[\"average\"] = fuzz.trapmf(price.universe, [600, 900, 1500, 2500])\n",
|
|||
|
"price[\"expensive\"] = fuzz.trimf(price.universe, [2000, 3500, 5000])\n",
|
|||
|
"price[\"very expensive\"] = fuzz.smf(price.universe, 4000, 10000)\n",
|
|||
|
"price.view()"
|
|||
|
]
|
|||
|
},
|
|||
|
{
|
|||
|
"cell_type": "markdown",
|
|||
|
"metadata": {},
|
|||
|
"source": [
|
|||
|
"#### Нечеткие правила"
|
|||
|
]
|
|||
|
},
|
|||
|
{
|
|||
|
"cell_type": "code",
|
|||
|
"execution_count": 36,
|
|||
|
"metadata": {},
|
|||
|
"outputs": [],
|
|||
|
"source": [
|
|||
|
"# Создание правил\n",
|
|||
|
"rule11 = ctrl.Rule(\n",
|
|||
|
" sqft_living[\"low\"] & yr_built[\"old\"],\n",
|
|||
|
" price[\"very cheap\"],\n",
|
|||
|
")\n",
|
|||
|
"rule12 = ctrl.Rule(\n",
|
|||
|
" sqft_living[\"average\"] & yr_built[\"old\"],\n",
|
|||
|
" price[\"cheap\"],\n",
|
|||
|
")\n",
|
|||
|
"rule13 = ctrl.Rule(\n",
|
|||
|
" sqft_living[\"high\"] & yr_built[\"old\"],\n",
|
|||
|
" price[\"average\"],\n",
|
|||
|
")\n",
|
|||
|
"rule21 = ctrl.Rule(\n",
|
|||
|
" sqft_living[\"low\"] & yr_built[\"new\"],\n",
|
|||
|
" price[\"average\"],\n",
|
|||
|
")\n",
|
|||
|
"rule22 = ctrl.Rule(\n",
|
|||
|
" sqft_living[\"average\"] & yr_built[\"new\"],\n",
|
|||
|
" price[\"expensive\"],\n",
|
|||
|
")\n",
|
|||
|
"rule23 = ctrl.Rule(\n",
|
|||
|
" sqft_living[\"high\"] & yr_built[\"new\"],\n",
|
|||
|
" price[\"very expensive\"],\n",
|
|||
|
")\n"
|
|||
|
]
|
|||
|
},
|
|||
|
{
|
|||
|
"cell_type": "markdown",
|
|||
|
"metadata": {},
|
|||
|
"source": [
|
|||
|
"#### Создание нечеткой системы"
|
|||
|
]
|
|||
|
},
|
|||
|
{
|
|||
|
"cell_type": "code",
|
|||
|
"execution_count": 37,
|
|||
|
"metadata": {},
|
|||
|
"outputs": [
|
|||
|
{
|
|||
|
"data": {
|
|||
|
"text/plain": [
|
|||
|
"[IF sqft_living[low] AND yr_built[old] THEN price[very cheap]\n",
|
|||
|
" \tAND aggregation function : fmin\n",
|
|||
|
" \tOR aggregation function : fmax,\n",
|
|||
|
" IF sqft_living[average] AND yr_built[old] THEN price[cheap]\n",
|
|||
|
" \tAND aggregation function : fmin\n",
|
|||
|
" \tOR aggregation function : fmax,\n",
|
|||
|
" IF sqft_living[high] AND yr_built[old] THEN price[average]\n",
|
|||
|
" \tAND aggregation function : fmin\n",
|
|||
|
" \tOR aggregation function : fmax,\n",
|
|||
|
" IF sqft_living[low] AND yr_built[new] THEN price[average]\n",
|
|||
|
" \tAND aggregation function : fmin\n",
|
|||
|
" \tOR aggregation function : fmax,\n",
|
|||
|
" IF sqft_living[average] AND yr_built[new] THEN price[expensive]\n",
|
|||
|
" \tAND aggregation function : fmin\n",
|
|||
|
" \tOR aggregation function : fmax,\n",
|
|||
|
" IF sqft_living[high] AND yr_built[new] THEN price[very expensive]\n",
|
|||
|
" \tAND aggregation function : fmin\n",
|
|||
|
" \tOR aggregation function : fmax]"
|
|||
|
]
|
|||
|
},
|
|||
|
"execution_count": 37,
|
|||
|
"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": 43,
|
|||
|
"metadata": {},
|
|||
|
"outputs": [
|
|||
|
{
|
|||
|
"name": "stdout",
|
|||
|
"output_type": "stream",
|
|||
|
"text": [
|
|||
|
"=============\n",
|
|||
|
" Antecedents \n",
|
|||
|
"=============\n",
|
|||
|
"Antecedent: sqft_living = 1500\n",
|
|||
|
" - low : 0.8173584905660377\n",
|
|||
|
" - average : 0.18264150943396226\n",
|
|||
|
" - high : 0.0\n",
|
|||
|
"Antecedent: yr_built = 2016\n",
|
|||
|
" - old : 0.0\n",
|
|||
|
" - new : 0.8677551020408163\n",
|
|||
|
"\n",
|
|||
|
"=======\n",
|
|||
|
" Rules \n",
|
|||
|
"=======\n",
|
|||
|
"RULE #0:\n",
|
|||
|
" IF sqft_living[low] AND yr_built[old] THEN price[very cheap]\n",
|
|||
|
"\tAND aggregation function : fmin\n",
|
|||
|
"\tOR aggregation function : fmax\n",
|
|||
|
"\n",
|
|||
|
" Aggregation (IF-clause):\n",
|
|||
|
" - sqft_living[low] : 0.8173584905660377\n",
|
|||
|
" - yr_built[old] : 0.0\n",
|
|||
|
" sqft_living[low] AND yr_built[old] = 0.0\n",
|
|||
|
" Activation (THEN-clause):\n",
|
|||
|
" price[very cheap] : 0.0\n",
|
|||
|
"\n",
|
|||
|
"RULE #1:\n",
|
|||
|
" IF sqft_living[average] AND yr_built[old] THEN price[cheap]\n",
|
|||
|
"\tAND aggregation function : fmin\n",
|
|||
|
"\tOR aggregation function : fmax\n",
|
|||
|
"\n",
|
|||
|
" Aggregation (IF-clause):\n",
|
|||
|
" - sqft_living[average] : 0.18264150943396226\n",
|
|||
|
" - yr_built[old] : 0.0\n",
|
|||
|
" sqft_living[average] AND yr_built[old] = 0.0\n",
|
|||
|
" Activation (THEN-clause):\n",
|
|||
|
" price[cheap] : 0.0\n",
|
|||
|
"\n",
|
|||
|
"RULE #2:\n",
|
|||
|
" IF sqft_living[high] AND yr_built[old] THEN price[average]\n",
|
|||
|
"\tAND aggregation function : fmin\n",
|
|||
|
"\tOR aggregation function : fmax\n",
|
|||
|
"\n",
|
|||
|
" Aggregation (IF-clause):\n",
|
|||
|
" - sqft_living[high] : 0.0\n",
|
|||
|
" - yr_built[old] : 0.0\n",
|
|||
|
" sqft_living[high] AND yr_built[old] = 0.0\n",
|
|||
|
" Activation (THEN-clause):\n",
|
|||
|
" price[average] : 0.0\n",
|
|||
|
"\n",
|
|||
|
"RULE #3:\n",
|
|||
|
" IF sqft_living[low] AND yr_built[new] THEN price[average]\n",
|
|||
|
"\tAND aggregation function : fmin\n",
|
|||
|
"\tOR aggregation function : fmax\n",
|
|||
|
"\n",
|
|||
|
" Aggregation (IF-clause):\n",
|
|||
|
" - sqft_living[low] : 0.8173584905660377\n",
|
|||
|
" - yr_built[new] : 0.8677551020408163\n",
|
|||
|
" sqft_living[low] AND yr_built[new] = 0.8173584905660377\n",
|
|||
|
" Activation (THEN-clause):\n",
|
|||
|
" price[average] : 0.8173584905660377\n",
|
|||
|
"\n",
|
|||
|
"RULE #4:\n",
|
|||
|
" IF sqft_living[average] AND yr_built[new] THEN price[expensive]\n",
|
|||
|
"\tAND aggregation function : fmin\n",
|
|||
|
"\tOR aggregation function : fmax\n",
|
|||
|
"\n",
|
|||
|
" Aggregation (IF-clause):\n",
|
|||
|
" - sqft_living[average] : 0.18264150943396226\n",
|
|||
|
" - yr_built[new] : 0.8677551020408163\n",
|
|||
|
" sqft_living[average] AND yr_built[new] = 0.18264150943396226\n",
|
|||
|
" Activation (THEN-clause):\n",
|
|||
|
" price[expensive] : 0.18264150943396226\n",
|
|||
|
"\n",
|
|||
|
"RULE #5:\n",
|
|||
|
" IF sqft_living[high] AND yr_built[new] THEN price[very expensive]\n",
|
|||
|
"\tAND aggregation function : fmin\n",
|
|||
|
"\tOR aggregation function : fmax\n",
|
|||
|
"\n",
|
|||
|
" Aggregation (IF-clause):\n",
|
|||
|
" - sqft_living[high] : 0.0\n",
|
|||
|
" - yr_built[new] : 0.8677551020408163\n",
|
|||
|
" sqft_living[high] AND yr_built[new] = 0.0\n",
|
|||
|
" Activation (THEN-clause):\n",
|
|||
|
" price[very expensive] : 0.0\n",
|
|||
|
"\n",
|
|||
|
"\n",
|
|||
|
"==============================\n",
|
|||
|
" Intermediaries and Conquests \n",
|
|||
|
"==============================\n",
|
|||
|
"Consequent: price = 2057.986185801524\n",
|
|||
|
" very cheap:\n",
|
|||
|
" Accumulate using accumulation_max : 0.0\n",
|
|||
|
" cheap:\n",
|
|||
|
" Accumulate using accumulation_max : 0.0\n",
|
|||
|
" average:\n",
|
|||
|
" Accumulate using accumulation_max : 0.8173584905660377\n",
|
|||
|
" expensive:\n",
|
|||
|
" Accumulate using accumulation_max : 0.18264150943396226\n",
|
|||
|
" very expensive:\n",
|
|||
|
" Accumulate using accumulation_max : 0.0\n",
|
|||
|
"\n"
|
|||
|
]
|
|||
|
},
|
|||
|
{
|
|||
|
"data": {
|
|||
|
"text/plain": [
|
|||
|
"np.float64(2057.986185801524)"
|
|||
|
]
|
|||
|
},
|
|||
|
"metadata": {},
|
|||
|
"output_type": "display_data"
|
|||
|
}
|
|||
|
],
|
|||
|
"source": [
|
|||
|
"# Пример предсказания\n",
|
|||
|
"sim.input[\"yr_built\"] = 2016\n",
|
|||
|
"sim.input[\"sqft_living\"] = 1500\n",
|
|||
|
"sim.compute()\n",
|
|||
|
"sim.print_state()\n",
|
|||
|
"display(sim.output[\"price\"])"
|
|||
|
]
|
|||
|
},
|
|||
|
{
|
|||
|
"cell_type": "markdown",
|
|||
|
"metadata": {},
|
|||
|
"source": [
|
|||
|
"#### Функция для автоматизации вычисления целевой переменной Y на основе вектора признаков X"
|
|||
|
]
|
|||
|
},
|
|||
|
{
|
|||
|
"cell_type": "code",
|
|||
|
"execution_count": 39,
|
|||
|
"metadata": {},
|
|||
|
"outputs": [],
|
|||
|
"source": [
|
|||
|
"# Функция предсказания\n",
|
|||
|
"def fuzzy_pred(row):\n",
|
|||
|
" sim.input[\"yr_built\"] = row[\"yr_built\"]\n",
|
|||
|
" sim.input[\"sqft_living\"] = row[\"sqft_living\"]\n",
|
|||
|
" sim.compute()\n",
|
|||
|
" return sim.output[\"price\"]"
|
|||
|
]
|
|||
|
},
|
|||
|
{
|
|||
|
"cell_type": "markdown",
|
|||
|
"metadata": {},
|
|||
|
"source": [
|
|||
|
"#### Тестирование нечеткой системы на обучающей выборке"
|
|||
|
]
|
|||
|
},
|
|||
|
{
|
|||
|
"cell_type": "code",
|
|||
|
"execution_count": 40,
|
|||
|
"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>bedrooms</th>\n",
|
|||
|
" <th>bathrooms</th>\n",
|
|||
|
" <th>sqft_living</th>\n",
|
|||
|
" <th>sqft_lot</th>\n",
|
|||
|
" <th>floors</th>\n",
|
|||
|
" <th>waterfront</th>\n",
|
|||
|
" <th>view</th>\n",
|
|||
|
" <th>condition</th>\n",
|
|||
|
" <th>grade</th>\n",
|
|||
|
" <th>sqft_above</th>\n",
|
|||
|
" <th>sqft_basement</th>\n",
|
|||
|
" <th>yr_built</th>\n",
|
|||
|
" <th>yr_renovated</th>\n",
|
|||
|
" <th>sqft_living15</th>\n",
|
|||
|
" <th>sqft_lot15</th>\n",
|
|||
|
" <th>PricePred</th>\n",
|
|||
|
" </tr>\n",
|
|||
|
" </thead>\n",
|
|||
|
" <tbody>\n",
|
|||
|
" <tr>\n",
|
|||
|
" <th>9848</th>\n",
|
|||
|
" <td>450000.0</td>\n",
|
|||
|
" <td>2</td>\n",
|
|||
|
" <td>2.00</td>\n",
|
|||
|
" <td>1610</td>\n",
|
|||
|
" <td>6160</td>\n",
|
|||
|
" <td>2.0</td>\n",
|
|||
|
" <td>0</td>\n",
|
|||
|
" <td>0</td>\n",
|
|||
|
" <td>4</td>\n",
|
|||
|
" <td>8</td>\n",
|
|||
|
" <td>1610</td>\n",
|
|||
|
" <td>0</td>\n",
|
|||
|
" <td>1977</td>\n",
|
|||
|
" <td>0</td>\n",
|
|||
|
" <td>1750</td>\n",
|
|||
|
" <td>6305</td>\n",
|
|||
|
" <td>429.624194</td>\n",
|
|||
|
" </tr>\n",
|
|||
|
" <tr>\n",
|
|||
|
" <th>3710</th>\n",
|
|||
|
" <td>361000.0</td>\n",
|
|||
|
" <td>3</td>\n",
|
|||
|
" <td>1.50</td>\n",
|
|||
|
" <td>1200</td>\n",
|
|||
|
" <td>7236</td>\n",
|
|||
|
" <td>1.0</td>\n",
|
|||
|
" <td>0</td>\n",
|
|||
|
" <td>0</td>\n",
|
|||
|
" <td>3</td>\n",
|
|||
|
" <td>7</td>\n",
|
|||
|
" <td>1200</td>\n",
|
|||
|
" <td>0</td>\n",
|
|||
|
" <td>1975</td>\n",
|
|||
|
" <td>0</td>\n",
|
|||
|
" <td>1680</td>\n",
|
|||
|
" <td>7800</td>\n",
|
|||
|
" <td>428.207965</td>\n",
|
|||
|
" </tr>\n",
|
|||
|
" <tr>\n",
|
|||
|
" <th>16998</th>\n",
|
|||
|
" <td>413000.0</td>\n",
|
|||
|
" <td>4</td>\n",
|
|||
|
" <td>1.00</td>\n",
|
|||
|
" <td>1410</td>\n",
|
|||
|
" <td>6000</td>\n",
|
|||
|
" <td>1.0</td>\n",
|
|||
|
" <td>0</td>\n",
|
|||
|
" <td>0</td>\n",
|
|||
|
" <td>3</td>\n",
|
|||
|
" <td>7</td>\n",
|
|||
|
" <td>810</td>\n",
|
|||
|
" <td>600</td>\n",
|
|||
|
" <td>1925</td>\n",
|
|||
|
" <td>0</td>\n",
|
|||
|
" <td>1500</td>\n",
|
|||
|
" <td>4800</td>\n",
|
|||
|
" <td>310.375162</td>\n",
|
|||
|
" </tr>\n",
|
|||
|
" <tr>\n",
|
|||
|
" <th>1968</th>\n",
|
|||
|
" <td>490000.0</td>\n",
|
|||
|
" <td>4</td>\n",
|
|||
|
" <td>2.25</td>\n",
|
|||
|
" <td>2020</td>\n",
|
|||
|
" <td>85813</td>\n",
|
|||
|
" <td>2.0</td>\n",
|
|||
|
" <td>0</td>\n",
|
|||
|
" <td>0</td>\n",
|
|||
|
" <td>3</td>\n",
|
|||
|
" <td>7</td>\n",
|
|||
|
" <td>2020</td>\n",
|
|||
|
" <td>0</td>\n",
|
|||
|
" <td>1995</td>\n",
|
|||
|
" <td>0</td>\n",
|
|||
|
" <td>2120</td>\n",
|
|||
|
" <td>85813</td>\n",
|
|||
|
" <td>2752.148335</td>\n",
|
|||
|
" </tr>\n",
|
|||
|
" <tr>\n",
|
|||
|
" <th>16407</th>\n",
|
|||
|
" <td>333000.0</td>\n",
|
|||
|
" <td>3</td>\n",
|
|||
|
" <td>1.00</td>\n",
|
|||
|
" <td>1050</td>\n",
|
|||
|
" <td>7560</td>\n",
|
|||
|
" <td>1.0</td>\n",
|
|||
|
" <td>0</td>\n",
|
|||
|
" <td>0</td>\n",
|
|||
|
" <td>3</td>\n",
|
|||
|
" <td>7</td>\n",
|
|||
|
" <td>1050</td>\n",
|
|||
|
" <td>0</td>\n",
|
|||
|
" <td>1951</td>\n",
|
|||
|
" <td>0</td>\n",
|
|||
|
" <td>1490</td>\n",
|
|||
|
" <td>7560</td>\n",
|
|||
|
" <td>310.403184</td>\n",
|
|||
|
" </tr>\n",
|
|||
|
" <tr>\n",
|
|||
|
" <th>17067</th>\n",
|
|||
|
" <td>219950.0</td>\n",
|
|||
|
" <td>3</td>\n",
|
|||
|
" <td>1.50</td>\n",
|
|||
|
" <td>1210</td>\n",
|
|||
|
" <td>5200</td>\n",
|
|||
|
" <td>1.0</td>\n",
|
|||
|
" <td>0</td>\n",
|
|||
|
" <td>0</td>\n",
|
|||
|
" <td>5</td>\n",
|
|||
|
" <td>6</td>\n",
|
|||
|
" <td>1210</td>\n",
|
|||
|
" <td>0</td>\n",
|
|||
|
" <td>1969</td>\n",
|
|||
|
" <td>0</td>\n",
|
|||
|
" <td>1120</td>\n",
|
|||
|
" <td>5200</td>\n",
|
|||
|
" <td>398.865957</td>\n",
|
|||
|
" </tr>\n",
|
|||
|
" <tr>\n",
|
|||
|
" <th>2304</th>\n",
|
|||
|
" <td>290000.0</td>\n",
|
|||
|
" <td>2</td>\n",
|
|||
|
" <td>1.00</td>\n",
|
|||
|
" <td>1340</td>\n",
|
|||
|
" <td>9840</td>\n",
|
|||
|
" <td>1.0</td>\n",
|
|||
|
" <td>0</td>\n",
|
|||
|
" <td>0</td>\n",
|
|||
|
" <td>3</td>\n",
|
|||
|
" <td>7</td>\n",
|
|||
|
" <td>1340</td>\n",
|
|||
|
" <td>0</td>\n",
|
|||
|
" <td>1949</td>\n",
|
|||
|
" <td>0</td>\n",
|
|||
|
" <td>1610</td>\n",
|
|||
|
" <td>8949</td>\n",
|
|||
|
" <td>327.464832</td>\n",
|
|||
|
" </tr>\n",
|
|||
|
" <tr>\n",
|
|||
|
" <th>16319</th>\n",
|
|||
|
" <td>500000.0</td>\n",
|
|||
|
" <td>2</td>\n",
|
|||
|
" <td>1.00</td>\n",
|
|||
|
" <td>1440</td>\n",
|
|||
|
" <td>7130</td>\n",
|
|||
|
" <td>1.0</td>\n",
|
|||
|
" <td>0</td>\n",
|
|||
|
" <td>2</td>\n",
|
|||
|
" <td>3</td>\n",
|
|||
|
" <td>7</td>\n",
|
|||
|
" <td>1210</td>\n",
|
|||
|
" <td>230</td>\n",
|
|||
|
" <td>1948</td>\n",
|
|||
|
" <td>0</td>\n",
|
|||
|
" <td>1970</td>\n",
|
|||
|
" <td>7130</td>\n",
|
|||
|
" <td>331.587824</td>\n",
|
|||
|
" </tr>\n",
|
|||
|
" <tr>\n",
|
|||
|
" <th>13758</th>\n",
|
|||
|
" <td>1712500.0</td>\n",
|
|||
|
" <td>3</td>\n",
|
|||
|
" <td>3.25</td>\n",
|
|||
|
" <td>2940</td>\n",
|
|||
|
" <td>5432</td>\n",
|
|||
|
" <td>3.0</td>\n",
|
|||
|
" <td>0</td>\n",
|
|||
|
" <td>3</td>\n",
|
|||
|
" <td>4</td>\n",
|
|||
|
" <td>10</td>\n",
|
|||
|
" <td>2440</td>\n",
|
|||
|
" <td>500</td>\n",
|
|||
|
" <td>1978</td>\n",
|
|||
|
" <td>0</td>\n",
|
|||
|
" <td>4400</td>\n",
|
|||
|
" <td>5500</td>\n",
|
|||
|
" <td>430.289457</td>\n",
|
|||
|
" </tr>\n",
|
|||
|
" <tr>\n",
|
|||
|
" <th>408</th>\n",
|
|||
|
" <td>364950.0</td>\n",
|
|||
|
" <td>4</td>\n",
|
|||
|
" <td>2.50</td>\n",
|
|||
|
" <td>1930</td>\n",
|
|||
|
" <td>6957</td>\n",
|
|||
|
" <td>2.0</td>\n",
|
|||
|
" <td>0</td>\n",
|
|||
|
" <td>0</td>\n",
|
|||
|
" <td>3</td>\n",
|
|||
|
" <td>8</td>\n",
|
|||
|
" <td>1930</td>\n",
|
|||
|
" <td>0</td>\n",
|
|||
|
" <td>1995</td>\n",
|
|||
|
" <td>0</td>\n",
|
|||
|
" <td>2090</td>\n",
|
|||
|
" <td>6996</td>\n",
|
|||
|
" <td>2752.148335</td>\n",
|
|||
|
" </tr>\n",
|
|||
|
" <tr>\n",
|
|||
|
" <th>19017</th>\n",
|
|||
|
" <td>3800000.0</td>\n",
|
|||
|
" <td>3</td>\n",
|
|||
|
" <td>4.25</td>\n",
|
|||
|
" <td>5510</td>\n",
|
|||
|
" <td>35000</td>\n",
|
|||
|
" <td>2.0</td>\n",
|
|||
|
" <td>0</td>\n",
|
|||
|
" <td>4</td>\n",
|
|||
|
" <td>3</td>\n",
|
|||
|
" <td>13</td>\n",
|
|||
|
" <td>4910</td>\n",
|
|||
|
" <td>600</td>\n",
|
|||
|
" <td>1997</td>\n",
|
|||
|
" <td>0</td>\n",
|
|||
|
" <td>3430</td>\n",
|
|||
|
" <td>45302</td>\n",
|
|||
|
" <td>2769.489768</td>\n",
|
|||
|
" </tr>\n",
|
|||
|
" <tr>\n",
|
|||
|
" <th>5736</th>\n",
|
|||
|
" <td>600000.0</td>\n",
|
|||
|
" <td>3</td>\n",
|
|||
|
" <td>2.50</td>\n",
|
|||
|
" <td>2320</td>\n",
|
|||
|
" <td>52272</td>\n",
|
|||
|
" <td>1.5</td>\n",
|
|||
|
" <td>0</td>\n",
|
|||
|
" <td>0</td>\n",
|
|||
|
" <td>3</td>\n",
|
|||
|
" <td>8</td>\n",
|
|||
|
" <td>2320</td>\n",
|
|||
|
" <td>0</td>\n",
|
|||
|
" <td>1974</td>\n",
|
|||
|
" <td>0</td>\n",
|
|||
|
" <td>2200</td>\n",
|
|||
|
" <td>52272</td>\n",
|
|||
|
" <td>427.457268</td>\n",
|
|||
|
" </tr>\n",
|
|||
|
" <tr>\n",
|
|||
|
" <th>2362</th>\n",
|
|||
|
" <td>278000.0</td>\n",
|
|||
|
" <td>3</td>\n",
|
|||
|
" <td>1.00</td>\n",
|
|||
|
" <td>860</td>\n",
|
|||
|
" <td>7632</td>\n",
|
|||
|
" <td>1.0</td>\n",
|
|||
|
" <td>0</td>\n",
|
|||
|
" <td>0</td>\n",
|
|||
|
" <td>3</td>\n",
|
|||
|
" <td>6</td>\n",
|
|||
|
" <td>860</td>\n",
|
|||
|
" <td>0</td>\n",
|
|||
|
" <td>1920</td>\n",
|
|||
|
" <td>0</td>\n",
|
|||
|
" <td>890</td>\n",
|
|||
|
" <td>7632</td>\n",
|
|||
|
" <td>270.308711</td>\n",
|
|||
|
" </tr>\n",
|
|||
|
" <tr>\n",
|
|||
|
" <th>17316</th>\n",
|
|||
|
" <td>578550.0</td>\n",
|
|||
|
" <td>3</td>\n",
|
|||
|
" <td>2.50</td>\n",
|
|||
|
" <td>2120</td>\n",
|
|||
|
" <td>6602</td>\n",
|
|||
|
" <td>2.0</td>\n",
|
|||
|
" <td>0</td>\n",
|
|||
|
" <td>0</td>\n",
|
|||
|
" <td>4</td>\n",
|
|||
|
" <td>8</td>\n",
|
|||
|
" <td>2120</td>\n",
|
|||
|
" <td>0</td>\n",
|
|||
|
" <td>1989</td>\n",
|
|||
|
" <td>0</td>\n",
|
|||
|
" <td>2330</td>\n",
|
|||
|
" <td>7795</td>\n",
|
|||
|
" <td>435.688044</td>\n",
|
|||
|
" </tr>\n",
|
|||
|
" <tr>\n",
|
|||
|
" <th>1713</th>\n",
|
|||
|
" <td>300000.0</td>\n",
|
|||
|
" <td>3</td>\n",
|
|||
|
" <td>1.75</td>\n",
|
|||
|
" <td>1280</td>\n",
|
|||
|
" <td>12776</td>\n",
|
|||
|
" <td>1.0</td>\n",
|
|||
|
" <td>0</td>\n",
|
|||
|
" <td>0</td>\n",
|
|||
|
" <td>4</td>\n",
|
|||
|
" <td>7</td>\n",
|
|||
|
" <td>1280</td>\n",
|
|||
|
" <td>0</td>\n",
|
|||
|
" <td>1977</td>\n",
|
|||
|
" <td>0</td>\n",
|
|||
|
" <td>1680</td>\n",
|
|||
|
" <td>11704</td>\n",
|
|||
|
" <td>429.624194</td>\n",
|
|||
|
" </tr>\n",
|
|||
|
" </tbody>\n",
|
|||
|
"</table>\n",
|
|||
|
"</div>"
|
|||
|
],
|
|||
|
"text/plain": [
|
|||
|
" price bedrooms bathrooms sqft_living sqft_lot floors \\\n",
|
|||
|
"9848 450000.0 2 2.00 1610 6160 2.0 \n",
|
|||
|
"3710 361000.0 3 1.50 1200 7236 1.0 \n",
|
|||
|
"16998 413000.0 4 1.00 1410 6000 1.0 \n",
|
|||
|
"1968 490000.0 4 2.25 2020 85813 2.0 \n",
|
|||
|
"16407 333000.0 3 1.00 1050 7560 1.0 \n",
|
|||
|
"17067 219950.0 3 1.50 1210 5200 1.0 \n",
|
|||
|
"2304 290000.0 2 1.00 1340 9840 1.0 \n",
|
|||
|
"16319 500000.0 2 1.00 1440 7130 1.0 \n",
|
|||
|
"13758 1712500.0 3 3.25 2940 5432 3.0 \n",
|
|||
|
"408 364950.0 4 2.50 1930 6957 2.0 \n",
|
|||
|
"19017 3800000.0 3 4.25 5510 35000 2.0 \n",
|
|||
|
"5736 600000.0 3 2.50 2320 52272 1.5 \n",
|
|||
|
"2362 278000.0 3 1.00 860 7632 1.0 \n",
|
|||
|
"17316 578550.0 3 2.50 2120 6602 2.0 \n",
|
|||
|
"1713 300000.0 3 1.75 1280 12776 1.0 \n",
|
|||
|
"\n",
|
|||
|
" waterfront view condition grade sqft_above sqft_basement \\\n",
|
|||
|
"9848 0 0 4 8 1610 0 \n",
|
|||
|
"3710 0 0 3 7 1200 0 \n",
|
|||
|
"16998 0 0 3 7 810 600 \n",
|
|||
|
"1968 0 0 3 7 2020 0 \n",
|
|||
|
"16407 0 0 3 7 1050 0 \n",
|
|||
|
"17067 0 0 5 6 1210 0 \n",
|
|||
|
"2304 0 0 3 7 1340 0 \n",
|
|||
|
"16319 0 2 3 7 1210 230 \n",
|
|||
|
"13758 0 3 4 10 2440 500 \n",
|
|||
|
"408 0 0 3 8 1930 0 \n",
|
|||
|
"19017 0 4 3 13 4910 600 \n",
|
|||
|
"5736 0 0 3 8 2320 0 \n",
|
|||
|
"2362 0 0 3 6 860 0 \n",
|
|||
|
"17316 0 0 4 8 2120 0 \n",
|
|||
|
"1713 0 0 4 7 1280 0 \n",
|
|||
|
"\n",
|
|||
|
" yr_built yr_renovated sqft_living15 sqft_lot15 PricePred \n",
|
|||
|
"9848 1977 0 1750 6305 429.624194 \n",
|
|||
|
"3710 1975 0 1680 7800 428.207965 \n",
|
|||
|
"16998 1925 0 1500 4800 310.375162 \n",
|
|||
|
"1968 1995 0 2120 85813 2752.148335 \n",
|
|||
|
"16407 1951 0 1490 7560 310.403184 \n",
|
|||
|
"17067 1969 0 1120 5200 398.865957 \n",
|
|||
|
"2304 1949 0 1610 8949 327.464832 \n",
|
|||
|
"16319 1948 0 1970 7130 331.587824 \n",
|
|||
|
"13758 1978 0 4400 5500 430.289457 \n",
|
|||
|
"408 1995 0 2090 6996 2752.148335 \n",
|
|||
|
"19017 1997 0 3430 45302 2769.489768 \n",
|
|||
|
"5736 1974 0 2200 52272 427.457268 \n",
|
|||
|
"2362 1920 0 890 7632 270.308711 \n",
|
|||
|
"17316 1989 0 2330 7795 435.688044 \n",
|
|||
|
"1713 1977 0 1680 11704 429.624194 "
|
|||
|
]
|
|||
|
},
|
|||
|
"execution_count": 40,
|
|||
|
"metadata": {},
|
|||
|
"output_type": "execute_result"
|
|||
|
}
|
|||
|
],
|
|||
|
"source": [
|
|||
|
"# Применение к обучающим данным\n",
|
|||
|
"result_train = houses_train.copy()\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": 41,
|
|||
|
"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>bedrooms</th>\n",
|
|||
|
" <th>bathrooms</th>\n",
|
|||
|
" <th>sqft_living</th>\n",
|
|||
|
" <th>sqft_lot</th>\n",
|
|||
|
" <th>floors</th>\n",
|
|||
|
" <th>waterfront</th>\n",
|
|||
|
" <th>view</th>\n",
|
|||
|
" <th>condition</th>\n",
|
|||
|
" <th>grade</th>\n",
|
|||
|
" <th>sqft_above</th>\n",
|
|||
|
" <th>sqft_basement</th>\n",
|
|||
|
" <th>yr_built</th>\n",
|
|||
|
" <th>yr_renovated</th>\n",
|
|||
|
" <th>sqft_living15</th>\n",
|
|||
|
" <th>sqft_lot15</th>\n",
|
|||
|
" <th>PricePred</th>\n",
|
|||
|
" </tr>\n",
|
|||
|
" </thead>\n",
|
|||
|
" <tbody>\n",
|
|||
|
" <tr>\n",
|
|||
|
" <th>8943</th>\n",
|
|||
|
" <td>852600.0</td>\n",
|
|||
|
" <td>4</td>\n",
|
|||
|
" <td>2.50</td>\n",
|
|||
|
" <td>3320</td>\n",
|
|||
|
" <td>11901</td>\n",
|
|||
|
" <td>2.0</td>\n",
|
|||
|
" <td>0</td>\n",
|
|||
|
" <td>0</td>\n",
|
|||
|
" <td>5</td>\n",
|
|||
|
" <td>9</td>\n",
|
|||
|
" <td>2650</td>\n",
|
|||
|
" <td>670</td>\n",
|
|||
|
" <td>1977</td>\n",
|
|||
|
" <td>0</td>\n",
|
|||
|
" <td>2700</td>\n",
|
|||
|
" <td>11114</td>\n",
|
|||
|
" <td>429.624194</td>\n",
|
|||
|
" </tr>\n",
|
|||
|
" <tr>\n",
|
|||
|
" <th>16711</th>\n",
|
|||
|
" <td>795000.0</td>\n",
|
|||
|
" <td>3</td>\n",
|
|||
|
" <td>2.75</td>\n",
|
|||
|
" <td>1820</td>\n",
|
|||
|
" <td>7517</td>\n",
|
|||
|
" <td>1.0</td>\n",
|
|||
|
" <td>0</td>\n",
|
|||
|
" <td>0</td>\n",
|
|||
|
" <td>3</td>\n",
|
|||
|
" <td>9</td>\n",
|
|||
|
" <td>1820</td>\n",
|
|||
|
" <td>0</td>\n",
|
|||
|
" <td>1997</td>\n",
|
|||
|
" <td>0</td>\n",
|
|||
|
" <td>2540</td>\n",
|
|||
|
" <td>8035</td>\n",
|
|||
|
" <td>2769.489768</td>\n",
|
|||
|
" </tr>\n",
|
|||
|
" <tr>\n",
|
|||
|
" <th>4156</th>\n",
|
|||
|
" <td>222000.0</td>\n",
|
|||
|
" <td>3</td>\n",
|
|||
|
" <td>1.75</td>\n",
|
|||
|
" <td>1240</td>\n",
|
|||
|
" <td>7560</td>\n",
|
|||
|
" <td>1.0</td>\n",
|
|||
|
" <td>0</td>\n",
|
|||
|
" <td>0</td>\n",
|
|||
|
" <td>3</td>\n",
|
|||
|
" <td>8</td>\n",
|
|||
|
" <td>1070</td>\n",
|
|||
|
" <td>170</td>\n",
|
|||
|
" <td>1967</td>\n",
|
|||
|
" <td>0</td>\n",
|
|||
|
" <td>1650</td>\n",
|
|||
|
" <td>7560</td>\n",
|
|||
|
" <td>390.429374</td>\n",
|
|||
|
" </tr>\n",
|
|||
|
" <tr>\n",
|
|||
|
" <th>20873</th>\n",
|
|||
|
" <td>375000.0</td>\n",
|
|||
|
" <td>6</td>\n",
|
|||
|
" <td>2.25</td>\n",
|
|||
|
" <td>3206</td>\n",
|
|||
|
" <td>5793</td>\n",
|
|||
|
" <td>2.0</td>\n",
|
|||
|
" <td>0</td>\n",
|
|||
|
" <td>0</td>\n",
|
|||
|
" <td>3</td>\n",
|
|||
|
" <td>7</td>\n",
|
|||
|
" <td>3206</td>\n",
|
|||
|
" <td>0</td>\n",
|
|||
|
" <td>2012</td>\n",
|
|||
|
" <td>0</td>\n",
|
|||
|
" <td>2527</td>\n",
|
|||
|
" <td>5804</td>\n",
|
|||
|
" <td>2579.862557</td>\n",
|
|||
|
" </tr>\n",
|
|||
|
" <tr>\n",
|
|||
|
" <th>6498</th>\n",
|
|||
|
" <td>274950.0</td>\n",
|
|||
|
" <td>3</td>\n",
|
|||
|
" <td>2.25</td>\n",
|
|||
|
" <td>1570</td>\n",
|
|||
|
" <td>8767</td>\n",
|
|||
|
" <td>1.0</td>\n",
|
|||
|
" <td>0</td>\n",
|
|||
|
" <td>0</td>\n",
|
|||
|
" <td>3</td>\n",
|
|||
|
" <td>7</td>\n",
|
|||
|
" <td>1180</td>\n",
|
|||
|
" <td>390</td>\n",
|
|||
|
" <td>1990</td>\n",
|
|||
|
" <td>0</td>\n",
|
|||
|
" <td>1570</td>\n",
|
|||
|
" <td>7434</td>\n",
|
|||
|
" <td>436.002078</td>\n",
|
|||
|
" </tr>\n",
|
|||
|
" <tr>\n",
|
|||
|
" <th>...</th>\n",
|
|||
|
" <td>...</td>\n",
|
|||
|
" <td>...</td>\n",
|
|||
|
" <td>...</td>\n",
|
|||
|
" <td>...</td>\n",
|
|||
|
" <td>...</td>\n",
|
|||
|
" <td>...</td>\n",
|
|||
|
" <td>...</td>\n",
|
|||
|
" <td>...</td>\n",
|
|||
|
" <td>...</td>\n",
|
|||
|
" <td>...</td>\n",
|
|||
|
" <td>...</td>\n",
|
|||
|
" <td>...</td>\n",
|
|||
|
" <td>...</td>\n",
|
|||
|
" <td>...</td>\n",
|
|||
|
" <td>...</td>\n",
|
|||
|
" <td>...</td>\n",
|
|||
|
" <td>...</td>\n",
|
|||
|
" </tr>\n",
|
|||
|
" <tr>\n",
|
|||
|
" <th>21109</th>\n",
|
|||
|
" <td>315000.0</td>\n",
|
|||
|
" <td>2</td>\n",
|
|||
|
" <td>2.25</td>\n",
|
|||
|
" <td>1240</td>\n",
|
|||
|
" <td>705</td>\n",
|
|||
|
" <td>2.0</td>\n",
|
|||
|
" <td>0</td>\n",
|
|||
|
" <td>0</td>\n",
|
|||
|
" <td>3</td>\n",
|
|||
|
" <td>7</td>\n",
|
|||
|
" <td>1150</td>\n",
|
|||
|
" <td>90</td>\n",
|
|||
|
" <td>2009</td>\n",
|
|||
|
" <td>0</td>\n",
|
|||
|
" <td>1240</td>\n",
|
|||
|
" <td>750</td>\n",
|
|||
|
" <td>2085.193978</td>\n",
|
|||
|
" </tr>\n",
|
|||
|
" <tr>\n",
|
|||
|
" <th>13160</th>\n",
|
|||
|
" <td>240000.0</td>\n",
|
|||
|
" <td>2</td>\n",
|
|||
|
" <td>1.00</td>\n",
|
|||
|
" <td>1320</td>\n",
|
|||
|
" <td>24319</td>\n",
|
|||
|
" <td>1.0</td>\n",
|
|||
|
" <td>0</td>\n",
|
|||
|
" <td>0</td>\n",
|
|||
|
" <td>3</td>\n",
|
|||
|
" <td>7</td>\n",
|
|||
|
" <td>1320</td>\n",
|
|||
|
" <td>0</td>\n",
|
|||
|
" <td>1966</td>\n",
|
|||
|
" <td>0</td>\n",
|
|||
|
" <td>1430</td>\n",
|
|||
|
" <td>98445</td>\n",
|
|||
|
" <td>391.519006</td>\n",
|
|||
|
" </tr>\n",
|
|||
|
" <tr>\n",
|
|||
|
" <th>3892</th>\n",
|
|||
|
" <td>695500.0</td>\n",
|
|||
|
" <td>5</td>\n",
|
|||
|
" <td>2.75</td>\n",
|
|||
|
" <td>2510</td>\n",
|
|||
|
" <td>9180</td>\n",
|
|||
|
" <td>1.0</td>\n",
|
|||
|
" <td>0</td>\n",
|
|||
|
" <td>1</td>\n",
|
|||
|
" <td>4</td>\n",
|
|||
|
" <td>8</td>\n",
|
|||
|
" <td>1600</td>\n",
|
|||
|
" <td>910</td>\n",
|
|||
|
" <td>1975</td>\n",
|
|||
|
" <td>0</td>\n",
|
|||
|
" <td>2650</td>\n",
|
|||
|
" <td>9780</td>\n",
|
|||
|
" <td>428.207965</td>\n",
|
|||
|
" </tr>\n",
|
|||
|
" <tr>\n",
|
|||
|
" <th>15547</th>\n",
|
|||
|
" <td>910000.0</td>\n",
|
|||
|
" <td>3</td>\n",
|
|||
|
" <td>2.00</td>\n",
|
|||
|
" <td>2700</td>\n",
|
|||
|
" <td>6120</td>\n",
|
|||
|
" <td>1.0</td>\n",
|
|||
|
" <td>0</td>\n",
|
|||
|
" <td>0</td>\n",
|
|||
|
" <td>4</td>\n",
|
|||
|
" <td>8</td>\n",
|
|||
|
" <td>1350</td>\n",
|
|||
|
" <td>1350</td>\n",
|
|||
|
" <td>1962</td>\n",
|
|||
|
" <td>0</td>\n",
|
|||
|
" <td>1700</td>\n",
|
|||
|
" <td>4590</td>\n",
|
|||
|
" <td>416.400374</td>\n",
|
|||
|
" </tr>\n",
|
|||
|
" <tr>\n",
|
|||
|
" <th>11770</th>\n",
|
|||
|
" <td>1850000.0</td>\n",
|
|||
|
" <td>5</td>\n",
|
|||
|
" <td>3.25</td>\n",
|
|||
|
" <td>3680</td>\n",
|
|||
|
" <td>6060</td>\n",
|
|||
|
" <td>2.0</td>\n",
|
|||
|
" <td>0</td>\n",
|
|||
|
" <td>0</td>\n",
|
|||
|
" <td>5</td>\n",
|
|||
|
" <td>9</td>\n",
|
|||
|
" <td>2630</td>\n",
|
|||
|
" <td>1050</td>\n",
|
|||
|
" <td>1925</td>\n",
|
|||
|
" <td>0</td>\n",
|
|||
|
" <td>3050</td>\n",
|
|||
|
" <td>5850</td>\n",
|
|||
|
" <td>407.777504</td>\n",
|
|||
|
" </tr>\n",
|
|||
|
" </tbody>\n",
|
|||
|
"</table>\n",
|
|||
|
"<p>4323 rows × 17 columns</p>\n",
|
|||
|
"</div>"
|
|||
|
],
|
|||
|
"text/plain": [
|
|||
|
" price bedrooms bathrooms sqft_living sqft_lot floors \\\n",
|
|||
|
"8943 852600.0 4 2.50 3320 11901 2.0 \n",
|
|||
|
"16711 795000.0 3 2.75 1820 7517 1.0 \n",
|
|||
|
"4156 222000.0 3 1.75 1240 7560 1.0 \n",
|
|||
|
"20873 375000.0 6 2.25 3206 5793 2.0 \n",
|
|||
|
"6498 274950.0 3 2.25 1570 8767 1.0 \n",
|
|||
|
"... ... ... ... ... ... ... \n",
|
|||
|
"21109 315000.0 2 2.25 1240 705 2.0 \n",
|
|||
|
"13160 240000.0 2 1.00 1320 24319 1.0 \n",
|
|||
|
"3892 695500.0 5 2.75 2510 9180 1.0 \n",
|
|||
|
"15547 910000.0 3 2.00 2700 6120 1.0 \n",
|
|||
|
"11770 1850000.0 5 3.25 3680 6060 2.0 \n",
|
|||
|
"\n",
|
|||
|
" waterfront view condition grade sqft_above sqft_basement \\\n",
|
|||
|
"8943 0 0 5 9 2650 670 \n",
|
|||
|
"16711 0 0 3 9 1820 0 \n",
|
|||
|
"4156 0 0 3 8 1070 170 \n",
|
|||
|
"20873 0 0 3 7 3206 0 \n",
|
|||
|
"6498 0 0 3 7 1180 390 \n",
|
|||
|
"... ... ... ... ... ... ... \n",
|
|||
|
"21109 0 0 3 7 1150 90 \n",
|
|||
|
"13160 0 0 3 7 1320 0 \n",
|
|||
|
"3892 0 1 4 8 1600 910 \n",
|
|||
|
"15547 0 0 4 8 1350 1350 \n",
|
|||
|
"11770 0 0 5 9 2630 1050 \n",
|
|||
|
"\n",
|
|||
|
" yr_built yr_renovated sqft_living15 sqft_lot15 PricePred \n",
|
|||
|
"8943 1977 0 2700 11114 429.624194 \n",
|
|||
|
"16711 1997 0 2540 8035 2769.489768 \n",
|
|||
|
"4156 1967 0 1650 7560 390.429374 \n",
|
|||
|
"20873 2012 0 2527 5804 2579.862557 \n",
|
|||
|
"6498 1990 0 1570 7434 436.002078 \n",
|
|||
|
"... ... ... ... ... ... \n",
|
|||
|
"21109 2009 0 1240 750 2085.193978 \n",
|
|||
|
"13160 1966 0 1430 98445 391.519006 \n",
|
|||
|
"3892 1975 0 2650 9780 428.207965 \n",
|
|||
|
"15547 1962 0 1700 4590 416.400374 \n",
|
|||
|
"11770 1925 0 3050 5850 407.777504 \n",
|
|||
|
"\n",
|
|||
|
"[4323 rows x 17 columns]"
|
|||
|
]
|
|||
|
},
|
|||
|
"metadata": {},
|
|||
|
"output_type": "display_data"
|
|||
|
}
|
|||
|
],
|
|||
|
"source": [
|
|||
|
"result_test = houses_test.copy()\n",
|
|||
|
"result_test[\"PricePred\"] = result_test.apply(fuzzy_pred, axis=1)\n",
|
|||
|
"result_test[\"PricePred\"] = result_test[\"PricePred\"].apply(lambda x: x)\n",
|
|||
|
"\n",
|
|||
|
"display(result_test)"
|
|||
|
]
|
|||
|
},
|
|||
|
{
|
|||
|
"cell_type": "markdown",
|
|||
|
"metadata": {},
|
|||
|
"source": [
|
|||
|
"#### Оценка результатов на основе метрик для задачи регрессии"
|
|||
|
]
|
|||
|
},
|
|||
|
{
|
|||
|
"cell_type": "code",
|
|||
|
"execution_count": 42,
|
|||
|
"metadata": {},
|
|||
|
"outputs": [
|
|||
|
{
|
|||
|
"data": {
|
|||
|
"text/plain": [
|
|||
|
"{'RMSE_train': 649737.8258173236,\n",
|
|||
|
" 'RMSE_test': 649737.8258173236,\n",
|
|||
|
" 'RMAE_test': 736.5342738871541,\n",
|
|||
|
" 'R2_test': -2.298493549806802}"
|
|||
|
]
|
|||
|
},
|
|||
|
"execution_count": 42,
|
|||
|
"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.12.5"
|
|||
|
}
|
|||
|
},
|
|||
|
"nbformat": 4,
|
|||
|
"nbformat_minor": 2
|
|||
|
}
|