IIS_2023_1/shadaev_anton_lab_3/README.md

91 lines
10 KiB
Markdown
Raw Normal View History

2023-11-03 15:50:54 +04:00
# IIS_2023_1
2023-11-03 19:39:53 +04:00
### Задание
<u>Часть 1.</u> По данным о пассажирах Титаника решите задачу классификации (с помощью дерева решений), в которой по различным характеристикам пассажиров требуется найти у выживших пассажиров два наиболее важных признака из трех рассматриваемых (по варианту). Пример решения задачи можно посмотреть здесь: [1] (стр.188). Скачать данные можно по ссылке: https://www.kaggle.com/datasets/heptapod/titanic
<u>9 Вариант.</u> Pclass, Cabin,Embarked 10 Name, Cabin,Embarked
<u>Часть 2.</u> Решите с помощью библиотечной реализации дерева решений задачу из лабораторной работы «Веб-сервис «Дерево решений» по предмету «Методы искусственного интеллекта» на 99% ваших данных. Проверьте работу модели на оставшемся проценте, сделайте вывод
### Способ запуска лабораторной работы
Чтобы запустить 1-ю часть лабораторной работы, нужно запустить скрипт `shadaev_anton_lab_3/titanic.py`
Чтобы запустить 2-ю часть лабораторной работы, нужно запустить скрипт `shadaev_anton_lab_3/stroke_prediction.py`
### Стек технологий
2023-11-03 19:48:45 +04:00
* `Python`: v. 3.11
2023-11-03 19:39:53 +04:00
* `Sklearn` - библиотека, которая поддерживает различные методы регрессии и классификации, включая линейную регрессию, метод k-ближайших соседей, регрессию опорных векторов, деревья принятия решений, ансамбль методов, такие как random forest и градиентный бустинг
* `Pandas` - библиотека, которая позволяет работать с двумерными и многомерными таблицами, строить сводные таблицы, выделять колонки, использовать фильтры по параметрам, выполнять группировку по параметрам, запускать функции (сложение, нахождение медианы, среднего, минимального, максимального значений), объединять таблицы и многое другое
### Описание кода
<u>Часть 1.</u>
1. Импорт необходимых библиотек и модулей: `pandas` для работы с данными, `train_test_split` из `sklearn.model_selection` для разделения данных на обучающий и тестовый наборы, `DecisionTreeClassifier` из `sklearn.tree` для создания модели классификации, и `LabelEncoder` из `sklearn.preprocessing` для преобразования категориальных данных в числовые, `scikit-learn.org`.
1. Загрузка данных о пассажирах на "Титанике" из CSV-файла с помощью `pandas`.
1. Обработка пропущенных значений в столбце 'Embarked', заменяя их на 'S'.
1. Преобразование категориальных данных в числовые с помощью `LabelEncoder`. Это делается для столбцов 'Pclass', 'Cabin' и 'Embarked'.
1. Вывод первых 10 записей из обработанного набора данных.
1. Разделение данных на признаки (X) и целевую переменную (y).
1. Разделение данных на обучающий и тестовый наборы с помощью функции `train_test_split` из `sklearn.model_selection`. 20% данных выделяются для тестового набора, а остальные 80% - для обучающего.
1. Создание модели классификации на основе алгоритма решающего дерева с помощью `DecisionTreeClassifier` из `sklearn.tree`.
1. Обучение модели с использованием обучающего набора данных.
1. Вычисление и вывод важности признаков для модели. Это делается с помощью атрибута `feature_importances_ `модели.
<u>Часть 2.</u>
1. Импорт необходимых библиотек и модулей: `pandas` для работы с данными, `accuracy_score` и `mean_squared_error` из `sklearn.metrics` для вычисления метрик модели, `train_test_split` из `sklearn.model_selection` для разделения данных на обучающий и тестовый наборы, и `DecisionTreeClassifier` из `sklearn.tree` для создания модели классификации.
1. Загрузка данных о риске инсульта из CSV-файла с помощью `pandas`.
1. Преобразование категориальных данных в числовые с помощью метода `map`.
1. Определение признаков и целевой переменной.
1. Разделение данных на обучающую и тестовую выборки с помощью функции `train_test_split` из `sklearn.model_selection`. 20% данных выделяются для тестового набора, а остальные 80% - для обучающего.
1. Создание модели классификации на основе алгоритма решающего дерева с помощью `DecisionTreeClassifier` из `sklearn.tree`.
1. Обучение модели с использованием обучающего набора данных.
1. Вычисление важности признаков для модели. Это делается с помощью атрибута `feature_importances_` модели.
1. Вычисление 'Accuracy' модели с использованием функции `accuracy_score` из `sklearn.metrics`.
1. Вычисление средней квадратичной ошибки с использованием функции `mean_squared_error` из `sklearn.metrics`.
1. Вывод результатов, включая первые 10 строк данных, важность признаков, точность модели и среднюю квадратичную ошибку.
### Решение
<u>Часть 1.</u>
2023-11-03 19:48:45 +04:00
2023-11-03 19:39:53 +04:00
![img.png](public/img/img_0.png)
<u>Часть 2.</u>
2023-11-03 19:48:45 +04:00
2023-11-03 19:39:53 +04:00
![img_1.png](public/img/img_1.png)
### Вывод
2023-11-03 19:48:45 +04:00
<u>Часть 1.</u>
Исходя из выводимых результатов, можно сделать вывод, что:
* Признак 0: Значение `0.36399999535331234` указывает на то, что признак 0 (в данном случае 'PassengerId') имеет важность 36.4%. Это означает, что признак 'PassengerId' вносит меньший вклад в прогноз, по сравнению с другими признаками.
* Признак 1: Значение `0.5373525457492807` указывает на то, что признак 1 (в данном случае 'Pclass') имеет важность 53.7%. Это означает, что признак 'Pclass' играет более значимую роль в прогнозе, по сравнению с признаком 'PassengerId'.
* Признак 2: Значение `0.09864745889740695` указывает на то, что признак 2 (в данном случае 'Cabin') имеет важность 9.9%. Это означает, что признак 'Cabin' вносит наименьший вклад в прогноз, по сравнению с другими признаками.
<u>Часть 2.</u>
2023-11-03 19:39:53 +04:00
Исходя из выводимых результатов, можно сделать вывод, что:
* Значения в массиве `[0.25588112 0.40781287 0.24234788 0.09395812]` соответствуют признакам `hypertension`, `heart_disease`, `ever_married` и `gender` соответственно. Значение `0.40781287` указано для `heart_disease`, что означает, что этот признак является наиболее важным для прогнозирования результата. Признак `hypertension` следует за ним с важностью `0.25588112`, `ever_married` - `0.24234788`, и `gender` - `0.09395812`. Это означает, что `heart_disease` влияет на прогноз больше всего, `hypertension` и `ever_married` влияют на прогноз в средней степени, а `gender` влияет на прогноз меньше всего.
* Accuracy модели составляет 94%, что означает, что модель правильно классифицировала 94% примеров из тестового набора данных. Это хороший показатель, который указывает на то, что модель хорошо справляется с задачей классификации.
* Средняя квадратичная ошибка составляет 6.07%, что является достаточно хорошим показателем для модели. Меньшее значение MSE указывает на то, что прогнозы модели в среднем близки к истинным значениям.