Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

lab4_analysis

.docx
Скачиваний:
1
Добавлен:
27.08.2024
Размер:
381.96 Кб
Скачать

ГУАП

КАФЕДРА № 41

ОТЧЕТ ЗАЩИЩЕН С ОЦЕНКОЙ

ПРЕПОДАВАТЕЛЬ

Ассистент

В.В. Боженко

должность, уч. степень, звание

подпись, дата

инициалы, фамилия

ОТЧЕТ О ЛАБОРАТОРНОЙ РАБОТЕ №4

ПРИМЕНЕНИЕ МЕТОДОВ КЛАССИФИКАЦИИ

по курсу: ВВЕДЕНИЕ В АНАЛИЗ ДАННЫХ

РАБОТУ ВЫПОЛНИЛ

СТУДЕНТ ГР. №

4016

М.О. Жовтяк

подпись, дата

инициалы, фамилия

Санкт-Петербург 2022

  1. Цель работы

Цель: изучить алгоритмы и методы классификации на практике

  1. Вариант задания

Вариант 14. Так как преподаватель выдал только 5 вариантов, то будет выполняться 4 вариант работы.

Записи о болезнях сердца

Столбцы

1. возраст: возраст пациента (лет)

2. анемия: снижение количества эритроцитов или гемоглобина (логическое значение)

3. высокое кровяное давление: если у пациента гипертония (логическое значение)

4. креатининфосфокиназа (КФК): уровень фермента КФК в крови (мкг/л)

5. диабет: если у пациента диабет (логическое значение)

6. фракция выброса: процент крови, покидающей сердце при каждом сокращении (в процентах)

7. тромбоциты: тромбоциты в крови (килотромбоциты/ мл)

8. пол: женщина или мужчина (бинарный)

9. креатинин сыворотки: уровень креатинина сыворотки в крови (мг/дл)

10. натрий сыворотки: уровень натрия сыворотки в крови (мэкв/л)

11.курение: если пациент курит или нет (логическое)

12.время: период наблюдения (дни)

13. событие смерти: если пациент умер в течение периода наблюдения (логическое значение)

  1. Предварительный анализ данных

Загружается датасет с помощью библиотеки pandas в Jupyter-ноутбук, использую Google Colab. Результат на рисунке 1.

Рисунок 1 – Загрузка датасета

Выполняется загрузка библиотек, настройка csv-файла. Выводятся первые 20 строк с помощью команды head(). Результат работы можно увидеть на рисунке 2.

Рисунок 2 – Вывод таблицы

Записи о болезнях сердца:

  • возраст: возраст пациента (лет)

  • анемия: снижение количества эритроцитов или гемоглобина (логическое значение)

  • высокое кровяное давление: если у пациента гипертония (логическое значение)

  • креатининфосфокиназа (КФК): уровень фермента КФК в крови (мкг/л)

  • диабет: если у пациента диабет (логическое значение)

  • фракция выброса: процент крови, покидающей сердце при каждом сокращении (в процентах)

  • тромбоциты: тромбоциты в крови (килотромбоциты/ мл)

  • пол: женщина или мужчина (бинарный)

  • креатинин сыворотки: уровень креатинина сыворотки в крови (мг/дл)

  • натрий сыворотки: уровень натрия сыворотки в крови (мэкв/л)

  • курение: если пациент курит или нет (логическое)

  • время: период наблюдения (дни)

  • событие смерти: если пациент умер в течение периода наблюдения (логическое значение)

С помощью команды info() оцениваются столбцы датасета. Результат на рисунке 3.

Рисунок 3 – Информация о датасете

Проанализировав данные, можно сделать следующие выводы:

  • Всего 299 объектов, пустых строк нет

  • Все столбцы имеют правильный тип данных

  • Все столбцы имеют правильное название

  • Будет выполнена проверка на явные дубликаты, проверки на неявные дубликаты не предвидится, так как нет столбцов с строковым значением

В датасете удаляются дубликаты данных с помощью команды drop_duplicates(), так как необходимы только уникальные значения. После этого выполняется обновления индексации с помощью команды drop_duplicates().reset_index(), чтобы не существовало пустых строк. После этого выполняется проверка датасета на дубликаты с помощью команды duplicated().sum(). Дубликатов, судя по рисунку 4 не было.

Рисунок 4 – Удаление дубликатов данных

В поиске неявных дубликатов, удалении пустых строк, смене названий столбцов и их типов нет никакой необходимости, поэтому предварительная обработка данных завершена.

  1. Применение методов классификации

Целевым признаком в датасете является DEATH-EVENT. Перед разделением датасета на тестовую и обучающую выборку, целевой признак идентифицируется в одной переменной, остальные признаки в другой. Отделение целевого признака от датасета показано на рисунке 5.

Рисунок 5 – Разделение целевого признака с данными

После разделения датасета производится стандартизация данных. Это показано на рисунке 6.

Рисунок 6 – Стандартизация данных

Набор данных разделяется на обучающую и тестовую выборку. Это показано на рисунке 7.

Рисунок 7 – Разделение датасета на обучающую и тестовую выборку

  1. Метод k-ближайших соседей

Импортируется модуль KNeighborsClassifier и метрики классификации из sklearn. Создается экземпляр класса KNeighborsClassifier. С помощью метода fit экземпляр обучается на обучающей выборке. Задается параметр n_neighbors, который высчитывается из алгоритма для определения лучшего значения по метрике "Recall". Это показано на рисунке 8-8.1.

Рисунок 8 – Расчет лучшего количества соседей для KNeighbors

Рисунок 8.1 – Создание экземпляра класса KNeighborsClassifier

С помощью метода predict модель выведет предсказания. Это показано на рисунке 9.

Рисунок 9 – Модель предсказания

Создается функция, которая высчитывает ошибку классификации, а именно метрики "Accuracy", "Precision", "Recall", "Balanced accuracy", 'F1 score'. Высчитываются метрики методом k-ближайших соседей. Результат на рисунке 10.

Рисунок 10 – Метрики k-ближайших соседей

Из полученных результатов видно, что ближе к 1 только метрики доля правильных ответов (accuracy) и полнота (recall).

  1. Случайный лес и логистическая регрессия

Аналогично обучаются модели "случайный лес" и "логистическая регрессия", составляется их ошибка классификации. В "случайном лесе" вручную устанвливается параметр, который увеличивает "глубину дерева" по модели. Результаты метрик на рисунке 11.

Рисунок 11 – Метрики «случайного леса» и «логистической регрессии»

Лучший результат показал метод "случайный лес", так как его метрики максимально приближены к 1.

После этого строится график ROC-кривой, который позволяет сравнить эффективности всех классификаторов. Результат на рисунке 12.

Рисунок 12 – График ROC-кривой

Исходя из графика можно увидеть, что лучшим методом является метод RandomTree, потому что его прогноз ближе других приблежен к True Positive. Худшим является K-nearest.

Ссылка на Google Colab:

https://colab.research.google.com/drive/1CfmvNqd4bZtRHhxH0jMDY0P7nwgLq8Hi?usp=sharing

  1. Вывод

В результате работы было создано три классификатора, из которых лучшее предсказание было дано методом RandomTree, у которого полнота (Recall) приближеннее равна 1, т.е. способность записывать правильно все объекты в один класс максимально.

Справедливости ради стоит сказать, что не существует идеального способа для поиска необходимой классификации, который покажет все метрики, равные единице. В данном случае необходимо подчеркнуть самую важную метрику, которая жизненно необходима в определенном контексте. В моем же случае исследования заболеваний требуют точное определение класса: болен/здоров, ведь лучше отправить человека на повторное обследование, чем пропустить болезнь, поэтому фокус должен быть на метрике Recall. Вручную подбирая параметры для каждой модели, я старался найти максимальный результат для Recall, где в итоге лучшим стал именно RandomTree, у которого качество метрик чуть лучше LogisticRegression, хотя Recall при этом равны.

Соседние файлы в предмете Введение в анализ данных