volkov_rafael_lab_3 is done #251
80
volkov_rafael_lab_3/app.py
Normal file
80
volkov_rafael_lab_3/app.py
Normal file
@ -0,0 +1,80 @@
|
||||
from flask import Flask, render_template, request
|
||||
import pandas as pd
|
||||
from sklearn.tree import DecisionTreeClassifier
|
||||
from sklearn.model_selection import train_test_split
|
||||
from sklearn.metrics import accuracy_score
|
||||
from sklearn.inspection import permutation_importance
|
||||
|
||||
app = Flask(__name__)
|
||||
|
||||
# Загрузите данные из файла
|
||||
bgg_data = pd.read_csv("bgg_dataset.csv", delimiter=";")
|
||||
|
||||
# Преобразуйте столбцы Rating Average и Complexity Average в числа с плавающей точкой
|
||||
bgg_data["Rating Average"] = bgg_data["Rating Average"].apply(lambda x: float(x.replace(',', '.')))
|
||||
bgg_data["Complexity Average"] = bgg_data["Complexity Average"].apply(lambda x: float(x.replace(',', '.')))
|
||||
|
||||
# Создайте целевую переменную (успешность игры)
|
||||
bgg_data["Success"] = bgg_data["Rating Average"].apply(lambda x: 1 if x > 7.5 else 0)
|
||||
|
||||
# Определите признаки и целевую переменную
|
||||
features_bgg = ["Year Published", "Users Rated", "BGG Rank", "Owned Users", "Complexity Average"]
|
||||
X_bgg = bgg_data[features_bgg]
|
||||
y_bgg = bgg_data["Success"]
|
||||
|
||||
# Разделите данные на обучающий и тестовый наборы
|
||||
X_train_bgg, X_test_bgg, y_train_bgg, y_test_bgg = train_test_split(X_bgg, y_bgg, test_size=0.01, random_state=42)
|
||||
|
||||
# Создайте и обучите модель дерева решений
|
||||
model_bgg = DecisionTreeClassifier()
|
||||
model_bgg.fit(X_train_bgg, y_train_bgg)
|
||||
|
||||
# Оцените модель на тестовом наборе данных
|
||||
y_pred_bgg = model_bgg.predict(X_test_bgg)
|
||||
accuracy_bgg = accuracy_score(y_test_bgg, y_pred_bgg)
|
||||
|
||||
# Оценка важности признаков с использованием permutation_importance
|
||||
result = permutation_importance(model_bgg, X_test_bgg, y_test_bgg, n_repeats=30, random_state=42)
|
||||
|
||||
# Важности признаков
|
||||
feature_importances_bgg = result.importances_mean
|
||||
|
||||
@app.route("/", methods=["GET", "POST"])
|
||||
def index():
|
||||
if request.method == "POST":
|
||||
# Получите данные из запроса
|
||||
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"].replace(',', '.'))
|
||||
|
||||
# Создайте DataFrame с введенными данными
|
||||
input_data_bgg = pd.DataFrame({
|
||||
"Year Published": [year_published],
|
||||
"Users Rated": [users_rated],
|
||||
"BGG Rank": [bgg_rank],
|
||||
"Owned Users": [owned_users],
|
||||
"Complexity Average": [complexity_average]
|
||||
})
|
||||
|
||||
# Прогнозируйте успешность игры
|
||||
prediction_bgg = model_bgg.predict(input_data_bgg)[0]
|
||||
|
||||
# Определите результат
|
||||
result_bgg = "Высокая оценка" if prediction_bgg == 1 else "Низкая оценка"
|
||||
|
||||
# Передайте переменные в шаблон
|
||||
return render_template("index.html", accuracy_bgg=accuracy_bgg, success_count_bgg=sum(y_test_bgg),
|
||||
failure_count_bgg=len(y_test_bgg) - sum(y_test_bgg),
|
||||
feature_importances_bgg=feature_importances_bgg, prediction_result_bgg=result_bgg,
|
||||
X_train_bgg_columns=X_train_bgg.columns)
|
||||
|
||||
# Передайте переменные в шаблон
|
||||
return render_template("index.html", accuracy_bgg=accuracy_bgg, success_count_bgg=sum(y_test_bgg),
|
||||
failure_count_bgg=len(y_test_bgg) - sum(y_test_bgg),
|
||||
feature_importances_bgg=feature_importances_bgg,
|
||||
X_train_bgg_columns=X_train_bgg.columns)
|
||||
|
||||
if __name__ == "__main__":
|
||||
app.run(host="localhost", port=5000)
|
20344
volkov_rafael_lab_3/bgg_dataset.csv
Normal file
20344
volkov_rafael_lab_3/bgg_dataset.csv
Normal file
File diff suppressed because it is too large
Load Diff
43
volkov_rafael_lab_3/readme.md
Normal file
43
volkov_rafael_lab_3/readme.md
Normal file
@ -0,0 +1,43 @@
|
||||
Общее задание:
|
||||
Решите с помощью библиотечной реализации дерева решений задачу из лабораторной работы «Веб-сервис «Дерево решений» по предмету
|
||||
«Методы искусственного интеллекта» на 99% ваших данных. Проверьте работу модели на оставшемся проценте, сделайте вывод.
|
||||
|
||||
Задание по вариантам:
|
||||
Датасет: Board Games
|
||||
Ссылки:
|
||||
https://www.kaggle.com/datasets/andrewmvd/board-games
|
||||
|
||||
Задача для древа решений:
|
||||
|
||||
Классифицировать игры на игры с высокой и низкой оценкой на основе их характеристик.
|
||||
Признаки:
|
||||
Year Published
|
||||
Users Rated
|
||||
BGG Rank
|
||||
Owned Users
|
||||
Complexity Average
|
||||
Целевая переменная: Успех игры (Высокая оценка/Низкая оценка), если Rating Average > 7.5, то высокая оценка.
|
||||
|
||||
Запуск через файл app.py
|
||||
|
||||
Технологии:
|
||||
|
||||
Flask: Фреймворк для веб-приложений на языке программирования Python.
|
||||
Pandas: Библиотека для обработки и анализа данных.
|
||||
scikit-learn: Библиотека для машинного обучения в Python.
|
||||
Описание работы программы:
|
||||
|
||||
Программа представляет собой веб-приложение, использующее машинное обучение для классификации на основе данных об играх на сайте BoardGameGeek (BGG). Она загружает данные из CSV-файла, предобрабатывает их, обучает модель дерева решений на основе выбранных признаков (год выпуска, количество оценок пользователей, рейтинг BGG и другие), а затем предоставляет интерфейс для ввода данных о новой игре и получения предсказания о ее "успешности" (высокий или низкий рейтинг).
|
||||
|
||||
Входные данные:
|
||||
|
||||
Год выпуска игры.
|
||||
Количество оценивших игру.
|
||||
Рейтинг BGG игры.
|
||||
Ранг BGG игры.
|
||||
Количество владельцев игры.
|
||||
Средняя сложность игры.
|
||||
Выходные данные:
|
||||
|
||||
Классификация игры: "Высокая оценка" или "Низкая оценка".
|
||||
Дополнительная информация: Точность модели, количество игр с высокой и низкой оценкой, важность признаков.
|
49
volkov_rafael_lab_3/templates/index.html
Normal file
49
volkov_rafael_lab_3/templates/index.html
Normal file
@ -0,0 +1,49 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<title>Классификация игр</title>
|
||||
</head>
|
||||
<body>
|
||||
<h1>Классификация игр</h1>
|
||||
|
||||
<!-- Форма для ввода данных -->
|
||||
<form method="POST">
|
||||
<label for="year_published">Год выпуска игры:</label>
|
||||
<input type="text" name="year_published" id="year_published" required>
|
||||
<br>
|
||||
<label for="users_rated">Количество оценивших игру:</label>
|
||||
<input type="text" name="users_rated" id="users_rated" required>
|
||||
<br>
|
||||
<label for="bgg_rank">BGG Рейтинг игры:</label>
|
||||
<input type="text" name="bgg_rank" id="bgg_rank" required>
|
||||
<br>
|
||||
<label for="owned_users">Количество владельцев игры:</label>
|
||||
<input type="text" name="owned_users" id="owned_users" required>
|
||||
<br>
|
||||
<label for="complexity_average">Средняя сложность игры:</label>
|
||||
<input type="text" name="complexity_average" id="complexity_average" required>
|
||||
<br>
|
||||
<button type="submit">Выполнить</button>
|
||||
</form>
|
||||
|
||||
<!-- Результат классификации -->
|
||||
{% if prediction_result_bgg %}
|
||||
<h2>Результат классификации:</h2>
|
||||
<p>Игра классифицирована как: {{ prediction_result_bgg }}</p>
|
||||
{% endif %}
|
||||
|
||||
<!-- Другие результаты (точность, количество успешных и неуспешных игр, важности признаков) -->
|
||||
<h2>Другие результаты:</h2>
|
||||
<p>Точность модели: {{ "%.4f"|format(accuracy_bgg) }}</p>
|
||||
<p>Количество игр с высокой оценкой: {{ success_count_bgg }}</p>
|
||||
<p>Количество игр с низкой оценкой: {{ failure_count_bgg }}</p>
|
||||
<p>Важность признаков:</p>
|
||||
<ul>
|
||||
{% for idx in range(feature_importances_bgg|length) %}
|
||||
{% set feature = X_train_bgg_columns[idx] %}
|
||||
<li>{{ feature }}: {{ "%.4f"|format(feature_importances_bgg[idx]) }}</li>
|
||||
{% endfor %}
|
||||
</ul>
|
||||
</body>
|
||||
</html>
|
Loading…
Reference in New Issue
Block a user