Merge pull request 'simonov_nikita_lab6' (#215) from simonov_nikita_lab_6 into main
Reviewed-on: http://student.git.athene.tech/Alexey/IIS_2023_1/pulls/215
This commit is contained in:
commit
08718c0690
57
simonov_nikita_lab_6/lab6.py
Normal file
57
simonov_nikita_lab_6/lab6.py
Normal file
@ -0,0 +1,57 @@
|
||||
import pandas as pd
|
||||
import matplotlib.pyplot as plt
|
||||
from sklearn.model_selection import train_test_split
|
||||
from sklearn.neural_network import MLPClassifier
|
||||
from sklearn.preprocessing import StandardScaler
|
||||
from sklearn.metrics import accuracy_score
|
||||
import seaborn as sns
|
||||
|
||||
# Загрузка датасета
|
||||
data = pd.read_csv('train_bikes.csv', sep=',').dropna()
|
||||
|
||||
data['is_holiday'] = data['holiday'].apply(lambda x: 1 if x == 1 else 0)
|
||||
data['is_workingday'] = data['workingday'].apply(lambda x: 1 if x == 1 else 0)
|
||||
|
||||
# Выбор признаков
|
||||
features = ['weather', 'temp', 'humidity', 'is_holiday', 'is_workingday']
|
||||
target = 'count'
|
||||
|
||||
X = data[features]
|
||||
y = data[target]
|
||||
|
||||
# Разбиваем на тестовую и тренировочную выборки
|
||||
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
|
||||
|
||||
# Стандартизация признаков
|
||||
scaler = StandardScaler()
|
||||
X_train = scaler.fit_transform(X_train)
|
||||
X_test = scaler.transform(X_test)
|
||||
|
||||
# Создание и обучение нейронной сети MLPClassifier
|
||||
model = MLPClassifier(
|
||||
hidden_layer_sizes=(500,),
|
||||
activation='relu',
|
||||
solver='adam',
|
||||
alpha=0.01,
|
||||
max_iter=100,
|
||||
random_state=42,
|
||||
verbose=True,
|
||||
)
|
||||
model.fit(X_train, y_train)
|
||||
|
||||
# Предсказание значений
|
||||
y_pred = model.predict(X_test)
|
||||
|
||||
# Оценка модели
|
||||
accuracy = accuracy_score(y_test, y_pred)
|
||||
print(f'Оценка точности: {accuracy*100:.2f}%')
|
||||
|
||||
# Визуализация результатов (гистограмма)
|
||||
plt.figure(figsize=(10, 6))
|
||||
sns.scatterplot(x=y_test, y=y_pred, hue=X_test[:, 0], palette='viridis', alpha=0.7, s=80)
|
||||
plt.plot([min(y_test), max(y_test)], [min(y_test), max(y_test)], linestyle='--', color='gray', linewidth=2)
|
||||
plt.xlabel('Фактическое количество арендованных велосипедов')
|
||||
plt.ylabel('Предсказанное количество арендованных велосипедов')
|
||||
plt.title('Фактическое vs Предсказанное количество арендованных велосипедов')
|
||||
plt.legend(title='Погодные условия', loc='upper left')
|
||||
plt.show()
|
112
simonov_nikita_lab_6/readme.md
Normal file
112
simonov_nikita_lab_6/readme.md
Normal file
@ -0,0 +1,112 @@
|
||||
# Лабораторная работа №6 Вариант 25.
|
||||
|
||||
## Задание
|
||||
|
||||
Общее задание: Использовать нейронную сеть MLPClassifier, самостоятельно сформулировав задачу.
|
||||
|
||||
Задача регрессии: Прогнозирования спроса на аренду велосипедов на основе данных о погоде и днях недели.
|
||||
|
||||
Ссылка на набор даных: [kaggle-bike-sharing-system](https://www.kaggle.com/datasets/itssuru/bike-sharing-system-washington-dc/?select=train_bikes.csv)
|
||||
|
||||
## Содержание
|
||||
- [Лабораторная работа №6 Вариант 25.](#лабораторная-работа-6-вариант-25)
|
||||
- [Задание](#задание)
|
||||
- [Содержание](#содержание)
|
||||
- [Введение](#введение)
|
||||
- [Зависимости](#зависимости)
|
||||
- [Запуск приложения](#запуск-приложения)
|
||||
- [Описание кода](#описание-кода)
|
||||
- [Заключение](#заключение)
|
||||
- [Оценка работы моделей](#оценка-работы-моделей)
|
||||
- [На основе анализа можно сделать следующие выводы:](#на-основе-анализа-можно-сделать-следующие-выводы)
|
||||
- [Общий вывод](#общий-вывод)
|
||||
|
||||
## Введение
|
||||
|
||||
Данный код демонстрирует, использует классификатор MLP (Многослойный Персептрон) из библиотеки scikit-learn для прогнозирования количества арендованных велосипедов на основе различных признаков.
|
||||
|
||||
## Зависимости
|
||||
|
||||
Для работы этого приложения необходимы следующие библиотеки Python:
|
||||
|
||||
- pandas
|
||||
- scikit-learn
|
||||
- NumPy
|
||||
- Matplotlib
|
||||
- seaborn
|
||||
|
||||
Вы можете установить их с помощью pip:
|
||||
|
||||
```bash
|
||||
pip install numpy scikit-learn pandas matplotlib seaborn
|
||||
```
|
||||
|
||||
## Запуск приложения
|
||||
|
||||
Чтобы запустить эту программу, выполните следующую команду:
|
||||
|
||||
```bash
|
||||
python lab6.py
|
||||
```
|
||||
Откроется визуализация данных и в консоль выведется резудьтат.
|
||||
|
||||
## Описание кода
|
||||
|
||||
- Загрузка данных из файла train_bikes.csv с использованием библиотеки pandas. Пропущенные значения удаляются из набора данных.
|
||||
|
||||
- Формирование бинарных признаков 'is_holiday' и 'is_workingday' на основе столбцов 'holiday' и 'workingday'.
|
||||
|
||||
- Выбор признаков: 'weather', 'temp', 'humidity', 'is_holiday', 'is_workingday'. Целевая переменная: 'count'.
|
||||
|
||||
- Разделение данных на обучающий, валидационный и тестовый наборы.
|
||||
|
||||
```python
|
||||
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
|
||||
```
|
||||
|
||||
- Создание и обучение модели MLPClassifier с использованием обучающего набора.
|
||||
|
||||
```python
|
||||
model = MLPClassifier(
|
||||
hidden_layer_sizes=(500,),
|
||||
activation='relu',
|
||||
solver='adam',
|
||||
alpha=0.01,
|
||||
max_iter=100,
|
||||
random_state=42,
|
||||
verbose=True,
|
||||
)
|
||||
model.fit(X_train, y_train)
|
||||
```
|
||||
|
||||
- Предсказание значений на тестовом наборе и оценка точности модели.
|
||||
|
||||
```python
|
||||
y_pred = model.predict(X_test)
|
||||
accuracy = accuracy_score(y_test, y_pred)
|
||||
print(f'Оценка точности: {accuracy*100:.2f}%')
|
||||
```
|
||||
|
||||
- Визуализация результатов с использованием библиотеки seaborn.
|
||||
|
||||
## Заключение
|
||||
|
||||
### Оценка работы моделей
|
||||
|
||||
```bash
|
||||
Оценка точности: 1.56%
|
||||
```
|
||||
|
||||
![](result.png)
|
||||
|
||||
### На основе анализа можно сделать следующие выводы:
|
||||
|
||||
1. Коэффициенты линейной регрессии:
|
||||
|
||||
- Точность модели на тестовом наборе данных низкая (1.56%). Это может свидетельствовать о том, что выбранные признаки и параметры модели не достаточно хорошо описывают зависимость от целевой переменной.
|
||||
|
||||
2. Визуализация результатов позволяет визуально сравнить фактическое и предсказанное количество арендованных велосипедов.
|
||||
|
||||
### Общий вывод
|
||||
|
||||
Модель MLPClassifier, основанная на погодных условиях и днях недели, демонстрирует низкую точность.
|
BIN
simonov_nikita_lab_6/result.png
Normal file
BIN
simonov_nikita_lab_6/result.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 236 KiB |
10887
simonov_nikita_lab_6/train_bikes.csv
Normal file
10887
simonov_nikita_lab_6/train_bikes.csv
Normal file
File diff suppressed because it is too large
Load Diff
Loading…
Reference in New Issue
Block a user