simonov_nikita_lab5

This commit is contained in:
Никита Симонов 2023-11-29 19:56:50 +04:00
parent a8c58683dd
commit 15ce74ebe4
4 changed files with 11084 additions and 0 deletions

View File

@ -0,0 +1,63 @@
import pandas as pd
from sklearn.linear_model import LinearRegression
from sklearn.model_selection import train_test_split
from sklearn.metrics import r2_score, mean_squared_error
import matplotlib.pyplot as plt
import numpy as np
import math
from sklearn.impute import SimpleImputer
# Загрузка данных
df = pd.read_csv('train_bikes.csv').dropna()
# Определение признаков (X) и целевой переменной (y)
X = df[['humidity', 'windspeed']]
y = df['count']
# Обработка пропущенных значений с использованием SimpleImputer
imputer = SimpleImputer(strategy='mean')
X = imputer.fit_transform(X)
# Разделение данных на обучающий, валидационный и тестовый наборы
X_train, X_temp, y_train, y_temp = train_test_split(X, y, test_size=0.4, random_state=0)
X_val, X_test, y_val, y_test = train_test_split(X_temp, y_temp, test_size=0.5, random_state=0)
# Создание и обучение модели линейной регрессии
linear_model = LinearRegression()
linear_model.fit(X_train, y_train)
# Вывод коэффициентов и пересечения
print(f'Коэффициенты линейной регрессии: {linear_model.coef_}')
print(f'Пересечение линейной регрессии: {linear_model.intercept_}')
# Предсказание значений на тестовом наборе
y_pred = linear_model.predict(X_test)
# Оценка модели
train_score = linear_model.score(X_train, y_train)
val_score = linear_model.score(X_val, y_val)
test_score = linear_model.score(X_test, y_test)
print(f'R^2 на обучающем наборе: {train_score}')
print(f'R^2 на валидационном наборе: {val_score}')
print(f'R^2 на тестовом наборе: {test_score}')
# Оценка качества предсказаний
MSE = mean_squared_error(y_test, y_pred)
RMSE = math.sqrt(MSE)
print(f'Среднеквадратичная ошибка: {MSE}')
print(f'Корень из среднеквадратичной ошибки: {RMSE}')
# Применение стиля графика
plt.style.use(['dark_background'])
# Визуализация предсказаний
plt.figure(figsize=(8, 6), dpi=80)
plt.scatter(y_test, y_pred, alpha=0.2, color='red')
m, b = np.polyfit(y_test, y_pred, 1)
plt.plot(y_test, m * y_test + b, color='yellow')
plt.xlabel('Фактическое значение (тестовый набор)', fontsize=14)
plt.ylabel('Предсказанное значение (тестовый набор)', fontsize=14)
plt.title('Линейная регрессия: предсказанные и фактические значения (тестовый набор)', fontsize=16)
plt.grid(linewidth=0.5)
plt.show()

View File

@ -0,0 +1,134 @@
# Лабораторная работа №5 Вариант 25.
## Задание
Общее задание: Использовать линейную регрессию, самостоятельно сформулировав задачу.
Задача регрессии: Как влажность (Humidity) и скорость ветра (windspeed) влияют на количество арендованных велосипедов?
Ссылка на набор даных: [kaggle-bike-sharing-system](https://www.kaggle.com/datasets/itssuru/bike-sharing-system-washington-dc/?select=train_bikes.csv)
## Содержание
- [Лабораторная работа №5 Вариант 25.](#лабораторная-работа-5-вариант-25)
- [Задание](#задание)
- [Содержание](#содержание)
- [Введение](#введение)
- [Зависимости](#зависимости)
- [Запуск приложения](#запуск-приложения)
- [Описание кода](#описание-кода)
- [Заключение](#заключение)
- [Оценка работы моделей](#оценка-работы-моделей)
- [На основе анализа можно сделать следующие выводы:](#на-основе-анализа-можно-сделать-следующие-выводы)
- [Общий вывод](#общий-вывод)
## Введение
Данный код демонстрирует, использование линейной регрессии для анализа влияния влажности (humidity) и скорости ветра (windspeed) на количество арендованных велосипедов.
## Зависимости
Для работы этого приложения необходимы следующие библиотеки Python:
- pandas
- scikit-learn
- NumPy
- Matplotlib
Вы можете установить их с помощью pip:
```bash
pip install numpy scikit-learn pandas matplotlib
```
## Запуск приложения
Чтобы запустить эту программу, выполните следующую команду:
```bash
python lab5.py
```
Откроется визуализация данных и в консоль выведется резудьтат.
## Описание кода
- Используется библиотека `pandas` для чтения данных из файла `train_bikes.csv`, пропущенные значения удаляются из набора данных.
- Выделяются признаки `humidity` и `windspeed` и целевая переменная `count`.
- Используется `SimpleImputer` для замены пропущенных значений средними значениями.
- Данные разделяются на обучающий, валидационный и тестовый наборы с использованием `train_test_split`.
```python
X_train, X_temp, y_train, y_temp = train_test_split(X, y, test_size=0.4, random_state=0)
X_val, X_test, y_val, y_test = train_test_split(X_temp, y_temp, test_size=0.5, random_state=0)
```
- Инициализируется и обучается модель линейной регрессии на обучающем наборе.
```python
linear_model = LinearRegression()
linear_model.fit(X_train, y_train)
```
- Выводятся коэффициенты и пересечение линейной регрессии.
```python
print(f'Коэффициенты линейной регрессии: {linear_model.coef_}')
print(f'Пересечение линейной регрессии: {linear_model.intercept_}')
```
- Модель применяется для предсказания значений на тестовом наборе.
```python
y_pred = linear_model.predict(X_test)
```
- Вычисляются R^2 на обучающем, валидационном и тестовом наборах. Вычисляется среднеквадратичная ошибка (MSE) и корень из среднеквадратичной ошибки (RMSE).
```python
train_score = linear_model.score(X_train, y_train)
val_score = linear_model.score(X_val, y_val)
test_score = linear_model.score(X_test, y_test)
MSE = mean_squared_error(y_test, y_pred)
RMSE = math.sqrt(MSE)
```
- Визуализация предсказаний
## Заключение
### Оценка работы моделей
```bash
Коэффициенты линейной регрессии: [-2.89204789 0.09562289]
Пересечение линейной регрессии: 368.16350038517544
R^2 на обучающем наборе: 0.09485704260674943
R^2 на валидационном наборе: 0.11424344387927587
R^2 на тестовом наборе: 0.10376993874162632
Среднеквадратичная ошибка: 28561.64598031308
Корень из среднеквадратичной ошибки: 169.00191117355175
```
![](result.png)
### На основе анализа можно сделать следующие выводы:
1. Коэффициенты линейной регрессии:
- Влажность (humidity): Отрицательный коэффициент говорит о том, что уменьшение количества арендованных велосипедов связано с увеличением влажности.
- Скорость ветра (windspeed): Положительный коэффициент указывает на то, что увеличение количества арендованных велосипедов связано с увеличение скорости ветра. Однако, этот эффект малозначителен.
1. Оценка модели:
- R^2 (Коэффициент детерминации): Низкие значения R^2 (около 0.1) свидетельствуют о том, что выбранные признаки слабо объясняют изменение целевой переменной.
- Среднеквадратичная ошибка (MSE): Высокое значение MSE (28561.65) указывает на значительное расхождение между фактическими и предсказанными значениями.
3. Визуализация:
- График предсказанных и фактических значений показывает, что модель не идеально подходит под данные. Разброс предсказаний велик.
### Общий вывод
Модель линейной регрессии, основанная на влажности и скорости ветра, демонстрирует невысокую объясняющую способность (низкие значения R^2) и высокую среднеквадратичную ошибку. Это может свидетельствовать о том, что выбранные признаки недостаточно хорошо описывают зависимость от целевой переменной (количества арендованных велосипедов). Возможно, для более точного предсказания следует рассмотреть другие признаки или использовать более сложные модели.

Binary file not shown.

After

Width:  |  Height:  |  Size: 104 KiB

File diff suppressed because it is too large Load Diff