Merge pull request 'podkorytova_yulia_lab_6 is ready' (#141) from podkorytova_yulia_lab_6 into main
Reviewed-on: http://student.git.athene.tech/Alexey/IIS_2023_1/pulls/141
This commit is contained in:
commit
666a34b483
40
podkorytova_yulia_lab_6/README.md
Normal file
40
podkorytova_yulia_lab_6/README.md
Normal file
@ -0,0 +1,40 @@
|
|||||||
|
# Лабораторная работа 6. Нейронная сеть
|
||||||
|
### Задание на лабораторную:
|
||||||
|
Использовать нейронную сеть для данных из курсовой работы, самостоятельно сформулировав задачу. Интерпретировать результаты и оценить, насколько хорошо она подходит для решения сформулированной вами задачи.
|
||||||
|
|
||||||
|
**Вариант 20 (четный).**
|
||||||
|
Нейроная сеть: MLPRegressor.
|
||||||
|
|
||||||
|
**Набор данных:** "Moscow tutors". Ссылка: https://www.kaggle.com/datasets/vadimantipov/moscow-tutors
|
||||||
|
|
||||||
|
**Задача:** предсказать стоимость занятий репетиторов на основе имеющихся данных.
|
||||||
|
|
||||||
|
***
|
||||||
|
### Как запустить лабораторную работу:
|
||||||
|
Для запуска лабораторной работы необходимо открыть файл `lr6.py`, нажать на ПКМ и в выпадающем списке выбрать опцию "Run".
|
||||||
|
***
|
||||||
|
### Технологии:
|
||||||
|
**Pandas** - это библиотека на языке Python, которая предоставляет удобные и эффективные инструменты для обработки и анализа данных. Она предоставляет высокоуровневые структуры данных, такие как DataFrame, которые позволяют легко и гибко работать с табличными данными.
|
||||||
|
|
||||||
|
**Matplotlib** - это библиотека визуализации данных на языке программирования Python, которая предоставляет широкий спектр инструментов для создания различных типов графиков, диаграмм и визуализаций данных.
|
||||||
|
|
||||||
|
**Scikit-learn (Sklearn)** - это библиотека для языка программирования Python, которая предоставляет инструменты для разработки и применения различных алгоритмов машинного обучения, включая классификацию, регрессию, кластеризацию, снижение размерности и многое другое. Scikit-learn также предлагает функции для предобработки данных, оценки моделей и выбора наилучших параметров.
|
||||||
|
***
|
||||||
|
### Что делает лабораторная работа:
|
||||||
|
В лабораторной работе сначала загружаются данные из файла `tutors.csv`, пустые значения убираются из выборки, строковые значения приводятся к числовому типу.
|
||||||
|
Далее происходит разделение данных на обучащий (95% данных) и тестовый (5% данных) наборы при помощи функции *train_test_split*.
|
||||||
|
Перед обучением модели данные масштабируются с использованием *StandardScaler*.
|
||||||
|
После создается модель MLPRegressor, происходит обучение модели на тренировочных данных, предсказание стоимости занятий и оценка качества модели.
|
||||||
|
|
||||||
|
Результатом работы являются предсказанные стоимости занятий и оценка качества модели, выведенные в консоль, а также график, отображающий фактические и предсказанные стоимости занятий репетиторов.
|
||||||
|
***
|
||||||
|
### Пример выходных данных:
|
||||||
|
***Оценка качества модели и стоимости занятий***
|
||||||
|
![](consoleRes.JPG)
|
||||||
|
|
||||||
|
***График***
|
||||||
|
![](plotRes.JPG)
|
||||||
|
***
|
||||||
|
**Вывод**: результатом лабораторной работы стали предсказанные стоимости занятий репетиторов, полученные при помощи нейроной сети *MLPRegressor*.
|
||||||
|
Оценка качества модели показала результат *0.07*, что является очень низким значением (чуть выше, чем у линейной регрессии) и говорит о том, что нейроная сеть *MLPRegressor* плохо справилась со своей задачей.
|
||||||
|
По фактическим и предсказанным стоимостям в консоли и на графике видно, что значения сильно расходятся.
|
BIN
podkorytova_yulia_lab_6/consoleRes.JPG
Normal file
BIN
podkorytova_yulia_lab_6/consoleRes.JPG
Normal file
Binary file not shown.
After Width: | Height: | Size: 81 KiB |
51
podkorytova_yulia_lab_6/lr6.py
Normal file
51
podkorytova_yulia_lab_6/lr6.py
Normal file
@ -0,0 +1,51 @@
|
|||||||
|
import pandas as pd
|
||||||
|
from matplotlib import pyplot as plt
|
||||||
|
from sklearn.model_selection import train_test_split
|
||||||
|
from sklearn.neural_network import MLPRegressor
|
||||||
|
from sklearn.preprocessing import StandardScaler
|
||||||
|
|
||||||
|
# загрузка и обработка данных
|
||||||
|
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)
|
||||||
|
|
||||||
|
# масштабирование данных
|
||||||
|
scaler = StandardScaler()
|
||||||
|
X_train = scaler.fit_transform(X_train)
|
||||||
|
X_test = scaler.transform(X_test)
|
||||||
|
|
||||||
|
# создание и обучение модели MLPRegressor
|
||||||
|
model = MLPRegressor(hidden_layer_sizes=(100, 100), activation='relu', solver='adam', random_state=42)
|
||||||
|
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("MLPRegressor")
|
||||||
|
plt.show()
|
BIN
podkorytova_yulia_lab_6/plotRes.JPG
Normal file
BIN
podkorytova_yulia_lab_6/plotRes.JPG
Normal file
Binary file not shown.
After Width: | Height: | Size: 102 KiB |
88700
podkorytova_yulia_lab_6/tutors.csv
Normal file
88700
podkorytova_yulia_lab_6/tutors.csv
Normal file
File diff suppressed because it is too large
Load Diff
Loading…
Reference in New Issue
Block a user