Merge pull request 'zhukova_alina_lab_3 is ready' (#158) from zhukova_alina_lab_3 into main
Reviewed-on: http://student.git.athene.tech/Alexey/IIS_2023_1/pulls/158
This commit is contained in:
commit
d734997760
20059
zhukova_alina_lab_3/Data_chess_games.csv
Normal file
20059
zhukova_alina_lab_3/Data_chess_games.csv
Normal file
File diff suppressed because it is too large
Load Diff
93
zhukova_alina_lab_3/flask-server.py
Normal file
93
zhukova_alina_lab_3/flask-server.py
Normal file
@ -0,0 +1,93 @@
|
|||||||
|
import pandas
|
||||||
|
from flask import Flask
|
||||||
|
from sklearn.metrics import accuracy_score
|
||||||
|
from sklearn.model_selection import train_test_split
|
||||||
|
from sklearn.tree import DecisionTreeClassifier
|
||||||
|
|
||||||
|
app = Flask(__name__)
|
||||||
|
|
||||||
|
|
||||||
|
@app.route("/")
|
||||||
|
def home():
|
||||||
|
return "<html>" \
|
||||||
|
"<h1>Жукова Алина ПИбд-41</h1>" \
|
||||||
|
"<h1>Лабораторная работа №3</h1>" \
|
||||||
|
"<table>" \
|
||||||
|
"<td>" \
|
||||||
|
"<form Action='http://127.0.0.1:5000/k4_1_task_3' Method=get>" \
|
||||||
|
"<input type=submit value='Дерево решений'>" \
|
||||||
|
"</form>" \
|
||||||
|
"</td>" \
|
||||||
|
"</table>" \
|
||||||
|
"</html>"
|
||||||
|
|
||||||
|
# Деревья решений
|
||||||
|
# 3.2 Решите задачу классификации
|
||||||
|
# (с помощью дерева решений), в которой по различным характеристикам
|
||||||
|
# пассажиров требуется найти у выживших пассажиров два наиболее важных
|
||||||
|
# признака из трех рассматриваемых (Name, Cabin,Embarked)
|
||||||
|
# 3.2
|
||||||
|
#
|
||||||
|
#
|
||||||
|
@app.route("/k4_1_task_3", methods=['GET'])
|
||||||
|
def k4_1_task_3():
|
||||||
|
data = pandas.read_csv('Data_chess_games.csv', index_col='id')
|
||||||
|
data = data.sample(n=5000, replace=True, random_state=1)
|
||||||
|
|
||||||
|
# отбор нужных столбцов
|
||||||
|
corr = data[['rated', 'turns', 'increment_code', 'white_rating', 'black_rating', 'opening_ply',
|
||||||
|
'created_at', 'last_move_at', 'white_id', 'black_id']]
|
||||||
|
|
||||||
|
# Добавление времени игры
|
||||||
|
corr['time_game'] = corr['last_move_at'] - corr['created_at']
|
||||||
|
|
||||||
|
def new_code(code):
|
||||||
|
return (int(code.split("+")[0]) * 100) + int(code.split("+")[1])
|
||||||
|
corr['n_increment_code'] = corr['increment_code'].apply(new_code)
|
||||||
|
|
||||||
|
def strToint(elem):
|
||||||
|
it_i = 0
|
||||||
|
for ch in elem:
|
||||||
|
it_i += ord(ch)
|
||||||
|
return 2500 - it_i
|
||||||
|
corr['n_white_id'] = corr['white_id'].apply(strToint)
|
||||||
|
corr['n_black_id'] = corr['black_id'].apply(strToint)
|
||||||
|
|
||||||
|
|
||||||
|
corr = corr[['white_rating', 'black_rating', 'n_white_id', 'n_black_id']]
|
||||||
|
|
||||||
|
# определение целевой переменной
|
||||||
|
y = data['victory_status']
|
||||||
|
|
||||||
|
X_train, X_test, y_train, y_test = train_test_split(corr, y, test_size=.01, random_state=42)
|
||||||
|
|
||||||
|
# создание и обучение дерева решений
|
||||||
|
clf = DecisionTreeClassifier(random_state=241)
|
||||||
|
clf.fit(X_train, y_train)
|
||||||
|
prediction = clf.predict(X_test)
|
||||||
|
accuracy = str(accuracy_score(y_test, prediction))
|
||||||
|
# получение и распечатка важностей признаков
|
||||||
|
importances = clf.feature_importances_
|
||||||
|
|
||||||
|
data = {}
|
||||||
|
ind = 0
|
||||||
|
st = []
|
||||||
|
for el in importances:
|
||||||
|
st.append(el)
|
||||||
|
ind += 1
|
||||||
|
|
||||||
|
data["Важность"] = st
|
||||||
|
df = pandas.DataFrame(data, index=corr.columns)
|
||||||
|
|
||||||
|
return "<html>" \
|
||||||
|
"<h1>Деревья решений</h1>" \
|
||||||
|
"<h2>Вариант 10. Задание 3.2</h2>" \
|
||||||
|
"<h2>Данные об исходе шахматных партий. Необходимо определить исход партии (поставлен мат, кончилось время, соперник сдался, ничья)</h2>" \
|
||||||
|
"<h2>Выбраны признаки: Рейтинг игрока за белых, рейтинг игрока за черных, id игроков</h2>" \
|
||||||
|
"<h2>Важность признаков: </h2>" \
|
||||||
|
"<div>" + df.to_html() + "</div>" \
|
||||||
|
"<h2>Точность предсказания: " + str(accuracy) + "</h2>" \
|
||||||
|
"</html>"
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
app.run(debug=True)
|
BIN
zhukova_alina_lab_3/img_screen_1.png
Normal file
BIN
zhukova_alina_lab_3/img_screen_1.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 34 KiB |
BIN
zhukova_alina_lab_3/img_screen_2.png
Normal file
BIN
zhukova_alina_lab_3/img_screen_2.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 30 KiB |
41
zhukova_alina_lab_3/readme.md
Normal file
41
zhukova_alina_lab_3/readme.md
Normal file
@ -0,0 +1,41 @@
|
|||||||
|
## Задание
|
||||||
|
Решите с помощью библиотечной реализации дерева решений
|
||||||
|
задачу классификации на 99% данных.
|
||||||
|
Проверить работу модели на оставшемся проценте, сделать вывод
|
||||||
|
|
||||||
|
Вариант №10
|
||||||
|
|
||||||
|
## Используемые технологии
|
||||||
|
В лабораторной были использованы библиотеки:
|
||||||
|
+ pandas - позволяет работать с наборами данных
|
||||||
|
+ sklearn - используется для работы с моделями и методами машинного обучения
|
||||||
|
+ Flask - предоставляет способ быстрого создания веб-страниц для визуализации работы приложения
|
||||||
|
|
||||||
|
## Используемые компоненты
|
||||||
|
+ DecisionTreeClassifier - библиотечная реализация дерева решений
|
||||||
|
|
||||||
|
## Как запустить
|
||||||
|
Запустить файл flask-server, который поднимет локальный сервер
|
||||||
|
и позволит обратиться к программе через браузер по ссылке [http://127.0.0.1:5000/](http://127.0.0.1:5000/)
|
||||||
|
|
||||||
|
## Что делает программа
|
||||||
|
Берет 5000 записей из датасета (датасет Chess Game Dataset
|
||||||
|
[https://www.kaggle.com/datasets/datasnaek/chess](https://www.kaggle.com/datasets/datasnaek/chess)),
|
||||||
|
обучает модель DecisionTreeClassifier на 99% данных.
|
||||||
|
После этого модель проверяется на тестовой выборке данных.
|
||||||
|
Программа выводит важности признаков в виде таблицы, а также итоговую точность модели
|
||||||
|
|
||||||
|
## Скриншоты работы программы
|
||||||
|
|
||||||
|
Полученные оценки значимости признаков и точность модели
|
||||||
|
![img.png](img_screen_1.png)
|
||||||
|
|
||||||
|
Был проведен анализ, и на изначально выбранных признаках максимальная точность
|
||||||
|
модели составила 0.56, что означает, что выбранные признаки слабо коррелируют
|
||||||
|
с исходом игры
|
||||||
|
|
||||||
|
В связи с этим к модели были добавлены ники игроков (id) и убраны
|
||||||
|
некоторые другие признаки, для того чтобы повысить качество работы модели
|
||||||
|
|
||||||
|
Итоговые оценки значимости и точность модели
|
||||||
|
![img.png](img_screen_2.png)
|
Loading…
Reference in New Issue
Block a user