339 lines
145 KiB
Plaintext
Raw Normal View History

2025-02-21 19:28:33 +04:00
{
"cells": [
2025-02-21 20:40:37 +04:00
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Датасет \"Предсказание стоимости автомобиля\" Index(['ID', 'Price', 'Levy', 'Manufacturer', 'Model', 'Prod. year',\n",
" 'Category', 'Leather interior', 'Fuel type', 'Engine volume', 'Mileage',\n",
" 'Cylinders', 'Gear box type', 'Drive wheels', 'Doors', 'Wheel', 'Color',\n",
" 'Airbags'],\n",
" dtype='object')"
]
},
2025-02-21 19:28:33 +04:00
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Шаг 1: Выбор входных и выходных переменных\n",
2025-02-21 20:40:37 +04:00
"Анализ датасета:\n",
"\n",
"Датасет содержит следующие колонки: ID, Price, Levy, Manufacturer, Model, Prod. year, Category, Leather interior, Fuel type, Engine volume, Mileage, Cylinders, Gear box type, Drive wheels, Doors, Wheel, Color, Airbags.\n",
2025-02-21 19:28:33 +04:00
"\n",
2025-02-21 20:40:37 +04:00
"Для простоты выберем числовые переменные, которые могут влиять на налог (Levy).\n",
2025-02-21 19:28:33 +04:00
"\n",
2025-02-21 20:40:37 +04:00
"Выбор переменных:\n",
2025-02-21 19:28:33 +04:00
"\n",
2025-02-21 20:40:37 +04:00
"Входные переменные:\n",
2025-02-21 19:28:33 +04:00
"\n",
2025-02-21 20:40:37 +04:00
"Price (Цена автомобиля) — влияет на налог.\n",
2025-02-21 19:28:33 +04:00
"\n",
2025-02-21 20:40:37 +04:00
"Mileage (Пробег автомобиля) — также может влиять на налог.\n",
2025-02-21 19:28:33 +04:00
"\n",
"Выходная переменная:\n",
"\n",
2025-02-21 20:40:37 +04:00
"Levy (Налог на автомобиль) — целевая переменная, которую будем прогнозировать.\n",
2025-02-21 19:28:33 +04:00
"\n",
"Шаг 2: Настройка параметров лингвистических переменных\n",
2025-02-21 20:40:37 +04:00
"Определение диапазонов значений:\n",
"\n",
"Для каждой переменной (Price, Mileage, Levy) зададим диапазон значений на основе данных из датасета.\n",
"\n",
"Определение термов и функций принадлежности:\n",
"\n",
"Для каждой переменной создадим несколько термов (например, \"Низкий\", \"Средний\", \"Высокий\").\n",
"\n",
"Используем треугольные функции принадлежности (trimf) для простоты.\n",
"\n",
"Пример для переменной Price:\n",
"\n",
"Термы: \"Низкая\", \"Средняя\", \"Высокая\".\n",
2025-02-21 19:28:33 +04:00
"\n",
2025-02-21 20:40:37 +04:00
"Параметры функций принадлежности:\n",
2025-02-21 19:28:33 +04:00
"\n",
2025-02-21 20:40:37 +04:00
"Низкая: (0, 5000, 10000)\n",
2025-02-21 19:28:33 +04:00
"\n",
2025-02-21 20:40:37 +04:00
"Средняя: (8000, 15000, 20000)\n",
2025-02-21 19:28:33 +04:00
"\n",
2025-02-21 20:40:37 +04:00
"Высокая: (18000, 25000, 30000)\n",
2025-02-21 19:28:33 +04:00
"\n",
2025-02-21 20:40:37 +04:00
"Пример для переменной Mileage:\n",
2025-02-21 19:28:33 +04:00
"\n",
2025-02-21 20:40:37 +04:00
"Термы: \"Низкий\", \"Средний\", \"Высокий\".\n",
2025-02-21 19:28:33 +04:00
"\n",
2025-02-21 20:40:37 +04:00
"Параметры функций принадлежности:\n",
2025-02-21 19:28:33 +04:00
"\n",
2025-02-21 20:40:37 +04:00
"Низкий: (0, 50000, 100000)\n",
2025-02-21 19:28:33 +04:00
"\n",
2025-02-21 20:40:37 +04:00
"Средний: (80000, 150000, 200000)\n",
2025-02-21 19:28:33 +04:00
"\n",
2025-02-21 20:40:37 +04:00
"Высокий: (180000, 250000, 300000)\n",
"\n",
"Пример для переменной Levy:\n",
"\n",
"Термы: \"Низкий\", \"Средний\", \"Высокий\".\n",
"\n",
"Параметры функций принадлежности:\n",
"\n",
"Низкий: (0, 500, 1000)\n",
"\n",
"Средний: (800, 1500, 2000)\n",
"\n",
"Высокий: (1800, 2500, 3000)\n",
"\n",
"Визуализация функций принадлежности:\n",
"\n",
"Используем matplotlib для построения графиков функций принадлежности."
2025-02-21 19:28:33 +04:00
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {},
2025-02-21 20:40:37 +04:00
"outputs": [
{
"data": {
"image/png": "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
"text/plain": [
"<Figure size 800x900 with 3 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
2025-02-21 19:28:33 +04:00
"source": [
"import numpy as np\n",
"import skfuzzy as fuzz\n",
2025-02-21 20:40:37 +04:00
"import matplotlib.pyplot as plt\n",
"\n",
"# Определение диапазонов значений\n",
"x_price = np.linspace(0, 30000, 100)\n",
"x_mileage = np.linspace(0, 300000, 100)\n",
"x_levy = np.linspace(0, 3000, 100)\n",
"\n",
"# Функции принадлежности для Price\n",
"price_low = fuzz.trimf(x_price, [0, 5000, 10000])\n",
"price_medium = fuzz.trimf(x_price, [8000, 15000, 20000])\n",
"price_high = fuzz.trimf(x_price, [18000, 25000, 30000])\n",
"\n",
"# Функции принадлежности для Mileage\n",
"mileage_low = fuzz.trimf(x_mileage, [0, 50000, 100000])\n",
"mileage_medium = fuzz.trimf(x_mileage, [80000, 150000, 200000])\n",
"mileage_high = fuzz.trimf(x_mileage, [180000, 250000, 300000])\n",
"\n",
"# Функции принадлежности для Levy\n",
"levy_low = fuzz.trimf(x_levy, [0, 500, 1000])\n",
"levy_medium = fuzz.trimf(x_levy, [800, 1500, 2000])\n",
"levy_high = fuzz.trimf(x_levy, [1800, 2500, 3000])\n",
"\n",
"# Визуализация функций принадлежности\n",
"fig, (ax0, ax1, ax2) = plt.subplots(nrows=3, figsize=(8, 9))\n",
"\n",
"ax0.plot(x_price, price_low, 'b', linewidth=1.5, label='Низкая')\n",
"ax0.plot(x_price, price_medium, 'g', linewidth=1.5, label='Средняя')\n",
"ax0.plot(x_price, price_high, 'r', linewidth=1.5, label='Высокая')\n",
"ax0.set_title('Функции принадлежности для Price')\n",
"ax0.legend()\n",
"\n",
"ax1.plot(x_mileage, mileage_low, 'b', linewidth=1.5, label='Низкий')\n",
"ax1.plot(x_mileage, mileage_medium, 'g', linewidth=1.5, label='Средний')\n",
"ax1.plot(x_mileage, mileage_high, 'r', linewidth=1.5, label='Высокий')\n",
"ax1.set_title('Функции принадлежности для Mileage')\n",
"ax1.legend()\n",
"\n",
"ax2.plot(x_levy, levy_low, 'b', linewidth=1.5, label='Низкий')\n",
"ax2.plot(x_levy, levy_medium, 'g', linewidth=1.5, label='Средний')\n",
"ax2.plot(x_levy, levy_high, 'r', linewidth=1.5, label='Высокий')\n",
"ax2.set_title('Функции принадлежности для Levy')\n",
"ax2.legend()\n",
"\n",
"plt.tight_layout()\n",
"plt.show()"
2025-02-21 19:28:33 +04:00
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Шаг 3: Формирование базы нечетких правил\n",
2025-02-21 20:40:37 +04:00
"Создание правил:\n",
2025-02-21 19:28:33 +04:00
"\n",
2025-02-21 20:40:37 +04:00
"Правила связывают входные переменные (Price, Mileage) с выходной переменной (Levy).\n",
2025-02-21 19:28:33 +04:00
"\n",
2025-02-21 20:40:37 +04:00
"Пример правил:\n",
"\n",
"Если Price Низкая и Mileage Низкий, тогда Levy Низкий.\n",
"\n",
"Если Price Средняя и Mileage Средний, тогда Levy Средний.\n",
"\n",
"Если Price Высокая и Mileage Высокий, тогда Levy Высокий.\n",
"\n",
"Если Price Низкая и Mileage Высокий, тогда Levy Средний.\n",
"\n",
"Если Price Высокая и Mileage Низкий, тогда Levy Средний.\n",
"\n",
"Реализация правил в коде:\n",
"\n",
"Используем функции библиотеки skfuzzy для применения правил.\n",
"\n",
"Шаг 4: Оценка качества полученной нечеткой системы\n",
"Создание тестовых данных:\n",
"\n",
"Подготовим несколько тестовых примеров с известными значениями Price, Mileage и Levy.\n",
"\n",
"Применение нечеткой системы:\n",
"\n",
"Для каждого тестового примера вычислим прогнозируемое значение Levy с помощью нечеткой системы.\n",
"\n",
"Вычисление метрик качества:\n",
"\n",
"Используем метрики:\n",
"\n",
"Средняя абсолютная ошибка (MAE): Среднее значение абсолютных разностей между фактическими и прогнозируемыми значениями.\n",
"\n",
"Среднеквадратичная ошибка (RMSE): Корень из среднего значения квадратов разностей."
2025-02-21 19:28:33 +04:00
]
},
{
"cell_type": "code",
"execution_count": 7,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
2025-02-21 20:40:37 +04:00
"\n",
"Результаты оценки:\n",
"Price | Mileage | Actual Levy | Inferred Levy\n",
" 7000 | 60000 | 800 | 500.00\n",
"12000 | 140000 | 1500 | 1424.50\n",
"22000 | 240000 | 2500 | 2424.50\n",
" 9000 | 220000 | 1200 | 1408.78\n",
"\n",
"Средняя абсолютная ошибка (MAE): 164.94\n",
"Среднеквадратичная ошибка (RMSE): 190.39\n"
2025-02-21 19:28:33 +04:00
]
}
],
"source": [
2025-02-21 20:40:37 +04:00
"# Функция для нечеткого вывода\n",
"def fuzzy_inference(price, mileage):\n",
" # Определение степени принадлежности\n",
" price_low_val = fuzz.interp_membership(x_price, price_low, price)\n",
" price_medium_val = fuzz.interp_membership(x_price, price_medium, price)\n",
" price_high_val = fuzz.interp_membership(x_price, price_high, price)\n",
"\n",
" mileage_low_val = fuzz.interp_membership(x_mileage, mileage_low, mileage)\n",
" mileage_medium_val = fuzz.interp_membership(x_mileage, mileage_medium, mileage)\n",
" mileage_high_val = fuzz.interp_membership(x_mileage, mileage_high, mileage)\n",
"\n",
" # Применение правил\n",
" rule1 = np.fmin(price_low_val, mileage_low_val)\n",
" rule2 = np.fmin(price_medium_val, mileage_medium_val)\n",
" rule3 = np.fmin(price_high_val, mileage_high_val)\n",
" rule4 = np.fmin(price_low_val, mileage_high_val)\n",
" rule5 = np.fmin(price_high_val, mileage_low_val)\n",
"\n",
" # Агрегация правил\n",
" levy_low_agg = np.fmin(rule1, levy_low)\n",
" levy_medium_agg = np.fmax(np.fmin(rule2, levy_medium), np.fmin(rule4, levy_medium), np.fmin(rule5, levy_medium))\n",
" levy_high_agg = np.fmin(rule3, levy_high)\n",
"\n",
" # Объединение агрегированных функций\n",
" aggregated = np.fmax(levy_low_agg, np.fmax(levy_medium_agg, levy_high_agg))\n",
"\n",
" # Проверка, что aggregated не пустой\n",
" if np.sum(aggregated) == 0:\n",
" raise ValueError(\"Агрегированная функция принадлежности пуста. Проверьте входные данные и правила.\")\n",
"\n",
" # Дефуззификация\n",
" levy_defuzz = fuzz.defuzz(x_levy, aggregated, 'centroid')\n",
" return levy_defuzz\n",
"\n",
"# Тестовые данные\n",
"test_data = [\n",
" (7000, 60000, 800),\n",
" (12000, 140000, 1500),\n",
" (22000, 240000, 2500),\n",
" (9000, 220000, 1200)\n",
"]\n",
"\n",
"# Оценка системы\n",
"results = []\n",
"for price, mileage, actual_levy in test_data:\n",
" try:\n",
" inferred_levy = fuzzy_inference(price, mileage)\n",
" results.append((price, mileage, actual_levy, inferred_levy))\n",
" except ValueError as e:\n",
" print(f\"Ошибка для price={price}, mileage={mileage}: {e}\")\n",
"\n",
"# Вывод результатов\n",
"print(\"\\nРезультаты оценки:\")\n",
"print(\"Price | Mileage | Actual Levy | Inferred Levy\")\n",
"for price, mileage, actual_levy, inferred_levy in results:\n",
" print(f\"{price:5} | {mileage:7} | {actual_levy:10} | {inferred_levy:.2f}\")\n",
"\n",
"# Вычисление метрик качества\n",
"if results:\n",
" actual_levys = [actual for _, _, actual, _ in results]\n",
" inferred_levys = [inferred for _, _, _, inferred in results]\n",
"\n",
" mae = np.mean(np.abs(np.array(actual_levys) - np.array(inferred_levys)))\n",
" rmse = np.sqrt(np.mean((np.array(actual_levys) - np.array(inferred_levys)) ** 2))\n",
"\n",
" print(f\"\\nСредняя абсолютная ошибка (MAE): {mae:.2f}\")\n",
" print(f\"Среднеквадратичная ошибка (RMSE): {rmse:.2f}\")\n",
"else:\n",
" print(\"Нет результатов для оценки.\")"
2025-02-21 19:28:33 +04:00
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
2025-02-21 20:40:37 +04:00
"Оценка качества системы\n",
"Точность прогноза:\n",
2025-02-21 19:28:33 +04:00
"\n",
2025-02-21 20:40:37 +04:00
"Для большинства тестовых данных прогнозируемые значения близки к фактическим.\n",
2025-02-21 19:28:33 +04:00
"\n",
2025-02-21 20:40:37 +04:00
"Например, для price=12000, mileage=140000 прогноз 1424.50 близок к фактическому значению 1500.\n",
2025-02-21 19:28:33 +04:00
"\n",
2025-02-21 20:40:37 +04:00
"Ошибки:\n",
2025-02-21 19:28:33 +04:00
"\n",
2025-02-21 20:40:37 +04:00
"Для price=7000, mileage=60000 прогноз 500.00 значительно ниже фактического значения 800.\n",
2025-02-21 19:28:33 +04:00
"\n",
2025-02-21 20:40:37 +04:00
"Для price=9000, mileage=220000 прогноз 1408.78 немного выше фактического значения 1200.\n",
2025-02-21 19:28:33 +04:00
"\n",
2025-02-21 20:40:37 +04:00
"Метрики качества:\n",
2025-02-21 19:28:33 +04:00
"\n",
2025-02-21 20:40:37 +04:00
"MAE (164.94): Средняя абсолютная ошибка показывает, что в среднем прогноз отклоняется от фактического значения на ~165 единиц.\n",
2025-02-21 19:28:33 +04:00
"\n",
2025-02-21 20:40:37 +04:00
"RMSE (190.39): Среднеквадратичная ошибка указывает на более крупные отклонения в некоторых случаях."
2025-02-21 19:28:33 +04:00
]
}
],
"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
}