done
This commit is contained in:
parent
c4bd132891
commit
0d1e5a83f4
BIN
sergeev_evgenii_lab_3/decision_tree.png
Normal file
BIN
sergeev_evgenii_lab_3/decision_tree.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 383 KiB |
@ -0,0 +1,76 @@
|
|||||||
|
import pandas as pd
|
||||||
|
import matplotlib.pyplot as plt
|
||||||
|
from sklearn.preprocessing import LabelEncoder
|
||||||
|
from sklearn.tree import DecisionTreeClassifier, export_graphviz, plot_tree
|
||||||
|
|
||||||
|
df = pd.read_csv("hotel_bookings_raw.csv", delimiter=',')
|
||||||
|
|
||||||
|
|
||||||
|
# Тип питания в зависимости от инфляции и потребительских настроений по отношению к экономике
|
||||||
|
# Функция для отображения дерева решений
|
||||||
|
def tree_visual():
|
||||||
|
# Преобразование типов питания к числам
|
||||||
|
# Инициализация LabelEncoder
|
||||||
|
label_encoder = LabelEncoder()
|
||||||
|
|
||||||
|
# Преобразование столбцов в числовые значения для всего фрейма
|
||||||
|
# list_col = ['hotel', 'arrival_date_month', 'meal', 'country', 'market_segment', 'distribution_channel', 'reserved_room_type', 'deposit_type', 'customer_type', 'reservation_status', 'assigned_room_type']
|
||||||
|
# for i in list_col:
|
||||||
|
# df[i] = label_encoder.fit_transform(df[i])
|
||||||
|
#df[list_col] = label_encoder.fit_transform(df[list_col])
|
||||||
|
|
||||||
|
#для всего фрейма
|
||||||
|
# mean_value = round(df['agent'].mean())
|
||||||
|
# df['agent'].fillna(mean_value, inplace=True)
|
||||||
|
|
||||||
|
# Количество элементов для обучения (99%)
|
||||||
|
count_to_train = round(len(df) * 0.99)
|
||||||
|
# Количество элементов для тестирования (1%)
|
||||||
|
count_to_test = len(df) - count_to_train
|
||||||
|
|
||||||
|
# Набор данных для обучения для всего фрейма
|
||||||
|
# train_df = df.head(count_to_train).copy().drop(columns=['reservation_status_date', 'MO_YR'])
|
||||||
|
train_df = df.head(count_to_train).copy()
|
||||||
|
|
||||||
|
# Тип питания
|
||||||
|
y = train_df.copy()['meal']
|
||||||
|
|
||||||
|
# Уровень инфляции и потребительские настроения по отношению к экономике для всего фрейма
|
||||||
|
# x = train_df.copy().drop(columns=['meal'])
|
||||||
|
x = train_df.copy()[['INFLATION', 'CSMR_SENT']]
|
||||||
|
# Создание модели дерева решений
|
||||||
|
model = DecisionTreeClassifier()
|
||||||
|
|
||||||
|
# Обучение модели
|
||||||
|
model.fit(x, y)
|
||||||
|
|
||||||
|
# Проверка модели для всего фрейма
|
||||||
|
#test_df = df.tail(count_to_test).copy().drop(columns=['reservation_status_date', 'MO_YR'])
|
||||||
|
test_df = df.tail(count_to_test)[['INFLATION', 'CSMR_SENT', 'meal']]
|
||||||
|
|
||||||
|
y_test = test_df.copy()['meal']
|
||||||
|
x_test = test_df.copy().drop(columns=['meal'])
|
||||||
|
|
||||||
|
prediction = model.score(x_test, y_test)
|
||||||
|
|
||||||
|
print('Качество дерева решений: ', prediction * 100, '%')
|
||||||
|
# Визуализация дерева решений
|
||||||
|
plt.figure(figsize=(12, 8))
|
||||||
|
plot_tree(model, feature_names=['INFLATION', 'CSMR_SENT'], filled=True)
|
||||||
|
|
||||||
|
# Сохранение графика в файл .png
|
||||||
|
plt.savefig('decision_tree.png', dpi=300)
|
||||||
|
plt.show()
|
||||||
|
|
||||||
|
res = sorted(dict(zip(list(x.columns), model.feature_importances_)).items(),
|
||||||
|
key=lambda el: el[1], reverse=True)
|
||||||
|
|
||||||
|
flag = 0
|
||||||
|
print('feature importance:')
|
||||||
|
for val in res:
|
||||||
|
print(val[0]+" - "+str(val[1]))
|
||||||
|
|
||||||
|
return
|
||||||
|
|
||||||
|
|
||||||
|
tree_visual()
|
23
sergeev_evgenii_lab_3/readme.md
Normal file
23
sergeev_evgenii_lab_3/readme.md
Normal file
@ -0,0 +1,23 @@
|
|||||||
|
# Лабораторная работа 3. Деревья решений
|
||||||
|
## Задание
|
||||||
|
1. По данным курсовой работы с помощью дерева решений
|
||||||
|
решить выбранную задачу: классификация - зависимость типа обеда
|
||||||
|
от инфляции и потребительских настроений по отношению к экономике
|
||||||
|
|
||||||
|
Ссылка на мой датасет: https://www.kaggle.com/datasets/mlardi/hotel-booking-demand-with-economic-indicators
|
||||||
|
### Запуск программы
|
||||||
|
Файл lab3.py содержит и запускает программу.
|
||||||
|
|
||||||
|
### Описание программы
|
||||||
|
Программа состоит из двух частей:
|
||||||
|
1. Она считывает файл с данными о двух отелях: City Hotel и Resort Hotel. Содержит множество различных метрик
|
||||||
|
2. Далее загружает необходимые столбцы и проводит создание модели
|
||||||
|
3. Выводит % правильных предсказаний и создает изображение дерева решений
|
||||||
|
### Результаты тестирования
|
||||||
|
По результатам тестирования, можно сказать следующее:
|
||||||
|
|
||||||
|
* Дерево решений показывает неплохие результаты, 66%.
|
||||||
|
* Оценка важности признаков показывает наиболее важным признаком уровень инфляции, затем уже уровень потребительских настроений по отношению к экономике
|
||||||
|
* В самом датафрейме есть еще много различных признаков, но они не так сильно влияют на дерево решений
|
||||||
|
|
||||||
|
Итого. Дерево решений даёт неплохие результаты при классификации.
|
Loading…
Reference in New Issue
Block a user