Merge pull request 'lab3' (#212) from simonov_nikita_lab_3 into main

Reviewed-on: http://student.git.athene.tech/Alexey/IIS_2023_1/pulls/212
This commit is contained in:
Alexey 2023-12-05 23:13:40 +04:00
commit 794389f861
3 changed files with 11026 additions and 0 deletions

View File

@ -0,0 +1,38 @@
import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.tree import DecisionTreeClassifier
from sklearn.metrics import accuracy_score, classification_report
# Загрузка данных
data = pd.read_csv("train_bikes.csv", sep=',').dropna()
# Подготовка данных
# Здесь определяются пороги для категорий спроса
low_demand_threshold = 100 # Порог для "Низкого спроса"
medium_demand_threshold = 300 # Порог для "Среднего спроса"
# Создание новой категориальной переменной на основе порогов
data['demand_category'] = pd.cut(data['count'], bins=[0, low_demand_threshold, medium_demand_threshold, float('inf')],
labels=["Low Demand", "Medium Demand", "High Demand"])
# Выделение признаков и целевой переменной
X = data.drop(['count', 'demand_category', 'datetime'], axis=1) # Удаление ненужных столбцов
y = data['demand_category']
# Разделение данных на обучающий и тестовый наборы
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
# Создание и обучение модели дерева решений
clf = DecisionTreeClassifier(random_state=42)
clf.fit(X_train, y_train)
# Предсказание категорий спроса на тестовом наборе
y_pred = clf.predict(X_test)
# Оценка качества модели
accuracy = accuracy_score(y_test, y_pred)
print(f"Accuracy: {accuracy:.2f}")
# Вывод отчета о классификации
report = classification_report(y_test, y_pred)
print(report)

View File

@ -0,0 +1,101 @@
# Лабораторная работа №3.
## Задание
Общее задание: Решите с помощью библиотечной реализации дерева решений задачу из лабораторной работы «Веб-сервис «Дерево решений» по предмету «Методы искусственного интеллекта» на 99% ваших данных. Проверьте работу модели на оставшемся проценте, сделайте вывод.
По данным курсовой работы с помощью дерева решений решить выбранную задачу классификации: Прогнозирование использования велосипедов в зависимости от времени и погодных условий.
## Содержание
- [Лабораторная работа №3.](#лабораторная-работа-3)
- [Задание](#задание)
- [Содержание](#содержание)
- [Введение](#введение)
- [Зависимости](#зависимости)
- [Запуск приложения](#запуск-приложения)
- [Описание кода](#описание-кода)
- [Заключение](#заключение)
- [Оценка работы моделей](#оценка-работы-моделей)
- [Общий вывод](#общий-вывод)
## Введение
Данный код демонстрирует, прогнозирование спроса на основе классификатора дерева решений. Модель обучается на наборе данных `train_bikes.csv`, содержащем информацию о прокате велосипедов, а целевая переменная - категория спроса, классифицированная как "Низкий спрос", "Средний спрос" или "Высокий спрос".
## Зависимости
Для работы этого приложения необходимы следующие библиотеки Python:
- pandas
- scikit-learn
- NumPy
Вы можете установить их с помощью pip:
```bash
pip install numpy scikit-learn pandas
```
## Запуск приложения
Чтобы запустить эту программу, выполните следующую команду:
```bash
python lab3.py
```
В консоль выведется резудьтат.
## Описание кода
- Считывает данные о прокате велосипедов из CSV-файла `train_bikes.csv` и обрабатывает отсутствующие значения, удаляя соответствующие строки.
- Подготовка данных: Задает пороги для категорий спроса (`low_demand_threshold` и `medium_demand_threshold`) и создает новую категориальную переменную `demand_category` на основе этих порогов.
```python
data['demand_category'] = pd.cut(data['count'], bins=[0, low_demand_threshold, medium_demand_threshold, float('inf')],
labels=["Low Demand", "Medium Demand", "High Demand"])
```
- Извлекает признаки и целевую переменную. Признаки включают различные атрибуты, связанные с прокатом велосипедов, а целевая переменная - категория спроса.
```python
X = data.drop(['count', 'demand_category', 'datetime'], axis=1) # Удаление ненужных столбцов
y = data['demand_category']
```
- Разбивает набор данных на обучающий и тестовый наборы с использованием функции `train_test_split` из библиотеки `scikit-learn`.
- Создает классификатор дерева решений `DecisionTreeClassifier` и обучает его на обучающих данных.
- Прогнозирование: Использует обученную модель для прогнозирования категорий спроса на тестовом наборе.
- Оценка модели: Рассчитывает точность модели с использованием функции `accuracy_score` и предоставляет подробный отчет о классификации, включая точность, полноту и F1-меру для каждой категории спроса.
## Заключение
### Оценка работы моделей
Обученный классификатор дерева решений достиг точности 0.99 на тестовом наборе данных. Отчет о классификации предоставляет детальное описание производительности модели для каждой категории спроса:
```bash
precision recall f1-score support
High Demand 0.99 0.98 0.99 483
Low Demand 0.99 1.00 1.00 852
Medium Demand 0.99 0.99 0.99 843
accuracy 0.99 2178
macro avg 0.99 0.99 0.99 2178
weighted avg 0.99 0.99 0.99 2178
```
### Общий вывод
- Модель показывает высокую точность, recall и F1-score для всех категорий спроса, что свидетельствует о хорошем качестве предсказаний.
- Precision, recall и F1-score близки к 1 для каждой категории, что указывает на эффективность модели в каждом классе.
- Общая точность (accuracy) модели также высока (99%), что свидетельствует о ее общей эффективности в предсказании категорий спроса на велосипеды.

File diff suppressed because it is too large Load Diff