podkorytova_yulia_lab_5

This commit is contained in:
yulia 2023-11-06 01:53:55 +04:00
parent b26c54a7e4
commit 1d2c86f568
5 changed files with 88784 additions and 0 deletions

View File

@ -0,0 +1,39 @@
# Лабораторная работа 5. Регрессия
### Задание на лабораторную:
Использовать регрессию по варианту для данных из курсовой работы, самостоятельно сформулировав задачу. Оценить, насколько хорошо она подходит для решения сформулированной вами задачи.
**Вариант 0 (20).**
Тип регрессии: линейная регрессия.
**Набор данных:** "Moscow tutors". Ссылка: https://www.kaggle.com/datasets/vadimantipov/moscow-tutors
**Задача:** предсказать стоимость занятий репетиторов на основе имеющихся данных.
***
### Как запустить лабораторную работу:
Для запуска лабораторной работы необходимо открыть файл `lr5.py`, нажать на ПКМ и в выпадающем списке выбрать опцию "Run".
***
### Технологии:
**Pandas** - это библиотека на языке Python, которая предоставляет удобные и эффективные инструменты для обработки и анализа данных. Она предоставляет высокоуровневые структуры данных, такие как DataFrame, которые позволяют легко и гибко работать с табличными данными.
**Matplotlib** - это библиотека визуализации данных на языке программирования Python, которая предоставляет широкий спектр инструментов для создания различных типов графиков, диаграмм и визуализаций данных.
**Scikit-learn (Sklearn)** - это библиотека для языка программирования Python, которая предоставляет инструменты для разработки и применения различных алгоритмов машинного обучения, включая классификацию, регрессию, кластеризацию, снижение размерности и многое другое. Scikit-learn также предлагает функции для предобработки данных, оценки моделей и выбора наилучших параметров.
***
### Что делает лабораторная работа:
В лабораторной работе сначала загружаются данные из файла `tutors.csv`, пустые значения убираются из выборки, строковые значения приводятся к числовому типу.
Далее происходит разделение данных на обучащий (95% данных) и тестовый (5% данных) наборы при помощи функции *train_test_split*.
После создается модель линейной регрессии, происходит обучение модели на тренировочных данных, предсказание стоимости занятий и оценка качества модели.
Результатом работы являются предсказанные стоимости занятий и оценка качества моделей, выведенные в консоль, а также график, отображающий фактические и предсказанные стоимости занятий репетиторов.
***
### Пример выходных данных:
***Оценка качества модели и стоимости занятий***
![](consoleRes.JPG)
***График***
![](plotRes.JPG)
***
**Вывод**: результатом лабораторной работы стали предсказанные стоимости занятий репетиторов, полученные при помощи линейной регрессии.
Оценка качества модели показала результат *0.06*, что является очень низким значением и говорит о том, что линейная регрессия плохо справилась со своей задачей.
По фактическим и предсказанным стоимостям в консоли и на графике видно, что значения сильно расходятся.

Binary file not shown.

After

Width:  |  Height:  |  Size: 87 KiB

View File

@ -0,0 +1,45 @@
import pandas as pd
import matplotlib.pyplot as plt
from sklearn.linear_model import LinearRegression
from sklearn.model_selection import train_test_split
# загрузка и обработка данных
tutors_data = pd.read_csv('tutors.csv')
tutors_data = tutors_data.dropna()
status_coding = {'Student': 0, 'School teacher': 1, 'Postgraduate student': 2, 'Private tutor': 3, 'University professor': 4, 'Native speaker': 5}
tutors_data['Status'] = tutors_data['Status'].replace(status_coding)
photo_coding = {'No': 0, 'Yes': 1}
tutors_data['Photo'] = tutors_data['Photo'].replace(photo_coding)
tutors_data['Video_presentation'] = tutors_data['Video_presentation'].replace(photo_coding)
# выбор признаков и целевой переменной
X = tutors_data[['Score', 'Reviews_number', 'Experience', 'Status', 'Video_presentation', 'Photo']]
y = tutors_data['Price']
# разделение данных на обучащий и тестовый наборы
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.05, random_state=42)
# создание модели линейной регрессии и обучение на тренировочных данных
model = LinearRegression()
model.fit(X_train, y_train)
# предсказание стоимости занятия
predictions = model.predict(X_test)
# оценка качества модели
score = model.score(X_test, y_test)
print(f"Качество модели линейной регрессии = {score:.2f}")
# вывод результатов в консоль
test_data = y_test.values
print("------------ СТОИМОСТИ ЗАНЯТИЙ ------------")
for i in range(len(predictions)):
print(f"Фактическая: {test_data[i]}\t\tПредсказанная: {int(predictions[i])}")
# отображение результатов на графике
plt.scatter(y_test, predictions, color='b')
plt.plot([y_test.min(), y_test.max()], [y_test.min(), y_test.max()], color='r')
plt.xlabel("Фактическая стоимость занятия")
plt.ylabel("Предсказанная стоимость занятия")
plt.title("Линейная регрессия")
plt.show()

Binary file not shown.

After

Width:  |  Height:  |  Size: 102 KiB

File diff suppressed because it is too large Load Diff