Merge pull request 'volkov_rafael_lab_6 is done' (#255) from volkov_rafael_lab_6 into main

Reviewed-on: http://student.git.athene.tech/Alexey/IIS_2023_1/pulls/255
This commit is contained in:
Alexey 2023-12-07 16:05:08 +04:00
commit d206a7277d
5 changed files with 20494 additions and 0 deletions

View File

@ -0,0 +1,77 @@
from flask import Flask, render_template, request
import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
from sklearn.neural_network import MLPRegressor
from sklearn.pipeline import Pipeline
import joblib
app = Flask(__name__)
# Загрузка данных
data_bgg = pd.read_csv("bgg_dataset.csv", delimiter=";")
# Выбор нужных столбцов
selected_columns_bgg = ['Year Published', 'Users Rated', 'Rating Average', 'BGG Rank', 'Owned Users', 'Complexity Average']
features = data_bgg[selected_columns_bgg]
# Замена запятых на точки в столбцах 'Rating Average' и 'Complexity Average'
features['Rating Average'] = features['Rating Average'].str.replace(',', '.').astype(float)
features['Complexity Average'] = features['Complexity Average'].str.replace(',', '.').astype(float)
# Замена пропущенных значений средними значениями по столбцам
features = features.fillna(features.mean())
# Разделение данных
X_bgg = features.drop('Rating Average', axis=1)
y_bgg = features['Rating Average']
X_train_bgg, X_test_bgg, y_train_bgg, y_test_bgg = train_test_split(X_bgg, y_bgg, test_size=0.2, random_state=42)
# Масштабирование данных
scaler = StandardScaler()
X_train_bgg_scaled = scaler.fit_transform(X_train_bgg)
X_test_bgg_scaled = scaler.transform(X_test_bgg)
# Обучение модели нейронной сети
mlp_regressor_model = Pipeline([
('scaler', StandardScaler()),
('mlp_regressor', MLPRegressor(hidden_layer_sizes=(100, 50), max_iter=2000, random_state=42))
])
mlp_regressor_model.fit(X_train_bgg_scaled, y_train_bgg)
# Сохранение модели
joblib.dump(mlp_regressor_model, 'mlp_regressor_model.joblib')
# Загрузка модели
mlp_regressor_model = joblib.load('mlp_regressor_model.joblib')
# Обновление маршрута для предсказания
@app.route('/')
def index():
return render_template('index.html')
@app.route('/predict', methods=['POST'])
def predict():
if request.method == 'POST':
# Получение данных из формы
input_data_bgg = {
'Year Published': int(request.form['Year Published']),
'Users Rated': int(request.form['Users Rated']),
'BGG Rank': int(request.form['BGG Rank']),
'Owned Users': int(request.form['Owned Users']),
'Complexity Average': float(request.form['Complexity Average'])
}
# Преобразование данных в DataFrame
input_df_bgg = pd.DataFrame([input_data_bgg])
# Масштабирование входных данных
input_data_scaled = scaler.transform(input_df_bgg)
# Предсказание
prediction_bgg = mlp_regressor_model.predict(input_data_scaled)[0]
return render_template('index.html', prediction_bgg=prediction_bgg)
if __name__ == '__main__':
app.run(debug=True)

File diff suppressed because it is too large Load Diff

Binary file not shown.

View File

@ -0,0 +1,37 @@
Общее задание:
Использовать нейронную сеть (четные варианты MLPRegressor, нечетные MLPClassifier) для данных из датасета выбранного для курсовой работы, самостоятельно сформулировав задачу. Интерпретировать результаты и оценить, насколько хорошо она подходит для решения сформулированной вами задачи.
Задание по вариантам:
модель MLPRegressor
Датасет: Board Games
Ссылки:
https://www.kaggle.com/datasets/andrewmvd/board-games
Задача для нейронной сети:
предсказание рейтинга игры на основе характеристик: 'Year Published', 'Users Rated', 'Rating Average', 'BGG Rank', 'Owned Users', 'Complexity Average'
Запуск через файл app.py
Технологии:
Flask: фреймворк для создания веб-приложений на языке Python.
Pandas: библиотека для работы с данными и анализа данных.
scikit-learn: библиотека для машинного обучения.
Описание работы программы:
Программа представляет собой веб-приложение с использованием Flask.
Загружает данные из CSV-файла, обрабатывает их (заменяет запятые на точки, заполняет пропущенные значения средними) и разделяет на обучающий и тестовый наборы.
Обучает модель (линейная регрессия или нейронная сеть) на основе выбранных признаков.
Пользователь вводит данные через веб-форму (Year Published, Users Rated, BGG Rank, Owned Users, Complexity Average).
Программа использует обученную модель для предсказания Rating Average на основе введенных данных.
Предсказанное значение выводится пользователю на веб-странице.
Входные данные (вводимые пользователем через веб-форму):
Year Published (год публикации игры).
Users Rated (количество пользователей, оценивших игру).
BGG Rank (рейтинг игры на BoardGameGeek).
Owned Users (количество пользователей, которые владеют игрой).
Complexity Average (средняя сложность игры).
Выходные данные:
Прогнозируемое значение Rating Average для введенных пользователем данных.

View File

@ -0,0 +1,36 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Board Game Rating Prediction</title>
</head>
<body>
<h1>Board Game Rating Prediction</h1>
<!-- Форма для ввода данных -->
<form method="post" action="/predict">
<label for="Year Published">Year Published:</label>
<input type="number" name="Year Published" required><br>
<label for="Users Rated">Users Rated:</label>
<input type="number" name="Users Rated" required><br>
<label for="BGG Rank">BGG Rank:</label>
<input type="number" name="BGG Rank" required><br>
<label for="Owned Users">Owned Users:</label>
<input type="number" name="Owned Users" required><br>
<label for="Complexity Average">Complexity Average:</label>
<input type="number" step="0.01" name="Complexity Average" required><br>
<button type="submit">Predict Rating Average</button>
</form>
<!-- Отображение предсказания -->
{% if prediction_bgg %}
<p>Predicted Rating Average: {{ prediction_bgg }}</p>
{% endif %}
</body>
</html>