Merge pull request 'Лабораторная работа 6' (#238) from orlov_artem_lab_6 into main

Reviewed-on: http://student.git.athene.tech/Alexey/IIS_2023_1/pulls/238
This commit is contained in:
Alexey 2023-12-07 16:02:26 +04:00
commit 2058d70341
4 changed files with 2518 additions and 0 deletions

69
orlov_artem_lab_6/app.py Normal file
View File

@ -0,0 +1,69 @@
from flask import Flask, render_template, request
import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.neural_network import MLPClassifier
from sklearn.preprocessing import OneHotEncoder
import joblib
app = Flask(__name__)
# Загрузка данных
data = pd.read_csv('top_240_restaurants_recommended_in_los_angeles_2.csv')
# Выбор нужных столбцов
selected_columns = ['Rank', 'StarRating', 'NumberOfReviews', 'Style']
data = data[selected_columns]
# Кодирование столбца Style
encoder = OneHotEncoder(sparse=False)
encoded_styles = encoder.fit_transform(data[['Style']])
encoded_styles_df = pd.DataFrame(encoded_styles, columns=encoder.get_feature_names_out(['Style']))
data = pd.concat([data, encoded_styles_df], axis=1).drop('Style', axis=1)
# Разделение данных
X = data.drop('Rank', axis=1)
y = data['Rank']
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
# Обучение модели
mlp_model = MLPClassifier(hidden_layer_sizes=(100,), max_iter=1000)
mlp_model.fit(X_train, y_train)
# Сохранение модели
joblib.dump(mlp_model, 'mlp_model.joblib')
# Загрузка модели
mlp_model = joblib.load('mlp_model.joblib')
@app.route('/')
def index():
return render_template('index.html')
@app.route('/predict', methods=['POST'])
def predict():
if request.method == 'POST':
# Получение данных из формы
input_data = {
'StarRating': float(request.form['StarRating']),
'NumberOfReviews': int(request.form['NumberOfReviews']),
'Style': request.form['Style']
}
# Кодирование стиля
input_style_encoded = encoder.transform([[input_data['Style']]])
input_data.pop('Style')
input_data.update(dict(zip(encoded_styles_df.columns, input_style_encoded[0])))
# Преобразование данных в DataFrame
input_df = pd.DataFrame([input_data])
# Предсказание
prediction = mlp_model.predict(input_df)[0]
return render_template('index.html', prediction=prediction)
if __name__ == '__main__':
app.run(debug=True)

View File

@ -0,0 +1,40 @@
Общее задание:
Использовать регрессию по варианту для данных из курсовой работы, самостоятельно сформулировав задачу.
Оценить, насколько хорошо она подходит для решения сформулированной вами задачи.
Задание по вариантам:
Тема: Анализ данных Top 240 Recommended Restaurants in L.A. 2023
Ссылка на датасет:
https://www.kaggle.com/datasets/lorentzyeung/top-240-recommended-restaurants-in-la-2023?resource=download&select=top+240+restaurants+recommanded+in+los+angeles+2.csv
Задача для нейронной сети: предсказать рейтинг ресторана по их мировому рейтингу, звездному рейтингу, количеству отзывов и стилю
Запуск приложения: запуск файла app.py
Использованные технологии:
Flask: Веб-фреймворк для создания веб-приложений на Python.
Pandas: Библиотека для обработки и анализа данных.
Scikit-learn: Библиотека для машинного обучения, используется для создания и обучения модели MLPClassifier.
Joblib: Используется для сохранения и загрузки модели машинного обучения.
HTML и Flask Templates: Для создания веб-интерфейса.
Описание работы программы:
Загружаются данные из CSV-файла о ресторанах в Лос-Анджелесе.
Выбираются нужные столбцы, и столбец "Style" кодируется с использованием One-Hot Encoding.
Данные разделяются на обучающий и тестовый наборы.
Обучается модель MLPClassifier для предсказания рейтинга ресторанов.
Создается веб-приложение с использованием Flask.
HTML-страница содержит форму для ввода данных о ресторане (звездный рейтинг, количество отзывов, стиль).
Пользователь вводит данные и нажимает кнопку "Predict Rating".
Введенные данные преобразуются, и модель делает предсказание рейтинга ресторана.
Предсказанный рейтинг отображается на веб-странице.
Пример входных данных:
StarRating: 4.3
NumberOfReviews: 2000
Style: American (New)
Пример выходных данных:
Предсказанный рейтинг: 3.8 (примерное значение, зависит от обученной модели и введенных данных).

View File

@ -0,0 +1,27 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Restaurant Rating Prediction</title>
</head>
<body>
<h1>Restaurant Rating Prediction</h1>
<form method="post" action="/predict">
<label for="StarRating">Star Rating:</label>
<input type="number" step="0.1" name="StarRating" required><br>
<label for="NumberOfReviews">Number of Reviews:</label>
<input type="number" name="NumberOfReviews" required><br>
<label for="Style">Style:</label>
<input type="text" name="Style" required><br>
<button type="submit">Predict Rating</button>
</form>
{% if prediction %}
<p>Predicted Rating: {{ prediction }}</p>
{% endif %}
</body>
</html>

File diff suppressed because one or more lines are too long