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