volkov_rafael_lab_5 is done
This commit is contained in:
parent
a8c58683dd
commit
fab8430c9e
72
volkov_rafael_lab_5/app.py
Normal file
72
volkov_rafael_lab_5/app.py
Normal file
@ -0,0 +1,72 @@
|
|||||||
|
from flask import Flask, render_template, request
|
||||||
|
import pandas as pd
|
||||||
|
from sklearn.model_selection import train_test_split
|
||||||
|
from sklearn.linear_model import LogisticRegression
|
||||||
|
from sklearn.pipeline import Pipeline
|
||||||
|
from sklearn.preprocessing import Binarizer
|
||||||
|
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]
|
||||||
|
|
||||||
|
# Замена запятых на точки в столбцах 'Users Rated' и 'Owned Users'
|
||||||
|
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())
|
||||||
|
|
||||||
|
# Определение порога для классификации (средний рейтинг)
|
||||||
|
threshold = features['Rating Average'].mean()
|
||||||
|
|
||||||
|
# Разделение данных
|
||||||
|
X_bgg = features.drop('Rating Average', axis=1)
|
||||||
|
y_bgg = features['Rating Average'] > threshold # Классификация: 1 - выше среднего, 0 - ниже среднего
|
||||||
|
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)
|
||||||
|
|
||||||
|
# Обучение модели логистической регрессии
|
||||||
|
logistic_regression_model = Pipeline([
|
||||||
|
('binarizer', Binarizer(threshold=threshold)),
|
||||||
|
('logistic_regression', LogisticRegression())
|
||||||
|
])
|
||||||
|
logistic_regression_model.fit(X_train_bgg, y_train_bgg)
|
||||||
|
|
||||||
|
# Сохранение модели
|
||||||
|
joblib.dump(logistic_regression_model, 'logistic_regression_model.joblib')
|
||||||
|
|
||||||
|
# Загрузка модели
|
||||||
|
logistic_regression_model = joblib.load('logistic_regression_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])
|
||||||
|
|
||||||
|
# Предсказание
|
||||||
|
prediction_bgg = logistic_regression_model.predict(input_df_bgg)[0]
|
||||||
|
|
||||||
|
return render_template('index.html', prediction_bgg=prediction_bgg)
|
||||||
|
|
||||||
|
if __name__ == '__main__':
|
||||||
|
app.run(debug=True)
|
20344
volkov_rafael_lab_5/bgg_dataset.csv
Normal file
20344
volkov_rafael_lab_5/bgg_dataset.csv
Normal file
File diff suppressed because it is too large
Load Diff
BIN
volkov_rafael_lab_5/linear_regression_model.joblib
Normal file
BIN
volkov_rafael_lab_5/linear_regression_model.joblib
Normal file
Binary file not shown.
BIN
volkov_rafael_lab_5/logistic_regression_model.joblib
Normal file
BIN
volkov_rafael_lab_5/logistic_regression_model.joblib
Normal file
Binary file not shown.
35
volkov_rafael_lab_5/readme.md
Normal file
35
volkov_rafael_lab_5/readme.md
Normal file
@ -0,0 +1,35 @@
|
|||||||
|
Общее задание:
|
||||||
|
Использовать регрессию по варианту для данных из курсовой работы, самостоятельно сформулировав задачу.
|
||||||
|
Оценить, насколько хорошо она подходит для решения сформулированной вами задачи.
|
||||||
|
|
||||||
|
Задание по вариантам:
|
||||||
|
алгоритм Логистическая регрессия
|
||||||
|
Датасет: 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: для создания веб-приложения.
|
||||||
|
pandas: для работы с данными в формате CSV.
|
||||||
|
scikit-learn: для обучения и использования моделей машинного обучения (Linear Regression и Logistic Regression).
|
||||||
|
joblib: для сохранения и загрузки обученных моделей.
|
||||||
|
Описание работы программы:
|
||||||
|
|
||||||
|
Программа загружает данные из файла "bgg_dataset.csv", используя библиотеку pandas.
|
||||||
|
Выбираются нужные столбцы: 'Year Published', 'Users Rated', 'Rating Average', 'BGG Rank', 'Owned Users', 'Complexity Average'.
|
||||||
|
Производится замена запятых на точки в столбцах 'Rating Average' и 'Complexity Average'.
|
||||||
|
Пропущенные значения в данных заменяются средними значениями по соответствующим столбцам.
|
||||||
|
Данные разделяются на обучающий и тестовый наборы.
|
||||||
|
Создается и обучается модель (линейной или логистической регрессии) с использованием scikit-learn и сохраняется в файле.
|
||||||
|
Веб-приложение на Flask запускается локально.
|
||||||
|
Пользователь взаимодействует с веб-формой, вводя параметры игры (Year Published, Users Rated, BGG Rank, Owned Users, Complexity Average).
|
||||||
|
Введенные данные передаются в обученную модель, которая делает предсказание.
|
||||||
|
Предсказание выводится на веб-странице.
|
||||||
|
Входные данные: параметры игры (Year Published, Users Rated, BGG Rank, Owned Users, Complexity Average) через веб-форму.
|
||||||
|
|
||||||
|
Выходные данные: предсказание (например, классификация игры как "выше среднего"(1) или "ниже среднего"(0)) на веб-странице.
|
36
volkov_rafael_lab_5/templates/index.html
Normal file
36
volkov_rafael_lab_5/templates/index.html
Normal 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>
|
Loading…
Reference in New Issue
Block a user