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:
commit
794389f861
38
simonov_nikita_lab_3/lab3.py
Normal file
38
simonov_nikita_lab_3/lab3.py
Normal 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)
|
101
simonov_nikita_lab_3/readme.md
Normal file
101
simonov_nikita_lab_3/readme.md
Normal 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%), что свидетельствует о ее общей эффективности в предсказании категорий спроса на велосипеды.
|
10887
simonov_nikita_lab_3/train_bikes.csv
Normal file
10887
simonov_nikita_lab_3/train_bikes.csv
Normal file
File diff suppressed because it is too large
Load Diff
Loading…
Reference in New Issue
Block a user