Введение

Я решил продолжить анализ набора данных, который я использовал для своего EDA для окончательного проекта. Набор данных зафиксировал уровни ожирения у людей из Мексики, Перу и Колумбии, а также их пищевые привычки и физическое состояние. Поскольку в рамках проекта нас просили создать модель машинного обучения, мне было интересно построить точную модель, учитывающую, страдает человек ожирением или нет (проблема двух классов), а также найти функции, которые будут наиболее актуальны при обучении этой модели. .

Набор данных, который я использовал, содержит данные 2111 человек в возрасте от 14 до 61 года и 17 атрибутов. Многие из этих атрибутов имеют аббревиатуры, поэтому я кратко описал их все ниже:

  • Пол: 1 = женский, 2 = мужской
  • Возраст: числовой
  • Высота: числовое значение в метрах.
  • Вес: число в килограммах.
  • family_history (семейный анамнез ожирения): 1 = да, 2 = нет
  • FCHCF (частое употребление высококалорийной пищи): 1 = да, 2 = нет
  • FCV (частота употребления овощей: 1 = никогда, 2 = иногда, 3 = всегда
  • NMM (количество основных приемов пищи): 1, 2, 3 или 4-разовое питание.
  • CFBM (потребление пищи между приемами пищи): 1 = нет, 2 = иногда, 3 = часто, 4 = всегда
  • Дым: 1 = да, 2 = нет
  • CW (расход воды): 1 = менее 1 литра, 2 = 1–2 литра, 3 = более 2 литров.
  • CCM (мониторинг потребления калорий): 1 = да, 2 = нет
  • PAF (частота физической активности в неделю): 0 = нет, 1 = от 1 до 2 дней, 2 = от 2 до 4 дней, 3 = от 4 до 5 дней
  • TUT (время использования технологических устройств в день): 0 = 0–2 часа, 1 = 3–5 часов, 2 = более 5 часов.
  • CA (употребление алкоголя): 1 = никогда, 2 = иногда, 3 = часто, 4 = всегда
  • Транспорт: 1 = автомобиль, 2 = мотоцикл, 3 = велосипед, 4 = общественный транспорт, 5 = ходьба.
  • Ожирение (целевая переменная): 2 = без ожирения, 4 = ожирение.

Подготовка данных

  1. Импорт библиотек

Во-первых, я импортировал библиотеки, которые мне понадобились бы для понимания и обучения моих данных. После этого я использовал google.colab для импорта файла CSV, а затем загрузил данные во фрейм данных с помощью pandas. Первые пять точек данных отображаются с помощью функции .head.

2. Проверьте форму и значения

Функция .shape вернула точный результат (2111,17), а тепловая карта подтвердила отсутствие пропущенных значений.

3. Корреляция

Затем я вызвал .corr, чтобы получить корреляционную матрицу, так как это поможет мне определить, есть ли какие-либо переменные, которые мне следует отбросить, потому что они слишком коррелированы с целевой переменной, ожирением. Я превратил матрицу в тепловую карту, поскольку она позволяет мне эффективно распознавать переменные, которые сильно коррелированы или некоррелированы.

Тепловая карта показывает мне, что одна переменная, переменная веса, сильно коррелирует с ожирением (0,79). Это имеет смысл, поскольку вес является неотъемлемым фактором при определении ИМТ человека и страдает ли он ожирением.

4. Удалить переменную

Зная, что вес так сильно коррелирует с ожирением, мне нужно отбросить переменную, чтобы убедиться, что моя модель может учиться на других переменных. Когда я запускал свои модели с функцией веса, все мои ансамблевые модели выходили с точностью от 98,74% до 99,16% без какой-либо настройки, и даже моя модель логистической регрессии имела точность 97,68%. Отказ от него снизит их точность и позволит мне подробнее проанализировать другие функции.

5. Обзор набора данных

Чтобы проверить, упала ли переменная, а также общую точность и состав моего набора данных, я вызвал следующие четыре функции, чтобы дать мне быстрый обзор.

6. Распределение целевых переменных

Наконец, я создал счетный график, чтобы получить распределение целевой переменной, чтобы я мог видеть, сбалансировано оно или нет, чтобы информировать наборы для обучения и тестирования.

Этот набор данных довольно сбалансирован, так как случаев ожирения почти столько же, сколько случаев без ожирения. Целевая переменная здесь явно является случаем бинарной классификации, которая будет определять наши будущие выборы модели.

Для дальнейшего изучения данных, пожалуйста, обратитесь к моей статье EDA.

Предварительное моделирование

  1. Предварительная обработка

Прежде чем данные можно будет разделить, их следует нормализовать, поскольку диапазоны объектов набора данных не совпадают. Это может быть проблематично, потому что небольшое изменение одной функции может не повлиять на другую, поэтому диапазоны нормализуются до однородного диапазона 0–1.

2. Разделение тестовых и обучающих данных

Набор данных разделен на обучающий (70%) и тестовый (30%) наборы, и соответствующие формы распечатываются, чтобы убедиться, что данные были правильно разделены перед построением моделей.

Эти числа показывают, что обучающий набор содержит 1477 точек данных, а тестовый набор - 634 точки данных.

3. Базовая точность классификации

Полезно рассчитать базовую точность классификации, потому что это простейший возможный прогноз. Это дает нам хорошую отправную точку, о которой следует помнить при создании более точных моделей с целью достижения лучших результатов.

Мы получили низкую базовую точность 54,57%, поэтому наши последующие модели должны иметь более высокую точность, чем эта.

Модели

Я выбрал следующие шесть моделей, потому что они хорошо работают с задачами бинарной классификации, такими как ожирение, о котором идет речь в этом посте.

Модель №1: логистическая регрессия и точная настройка гиперпараметров

Первая модель, которую я обучу, - это модель логистической регрессии, поскольку это алгоритм классификации, который предсказывает вероятность категориальной переменной. Я создал его, используя параметры по умолчанию, помимо random_state, потому что я хочу, чтобы разбиение было одинаковым каждый раз. Затем модель сопоставляется с данными, и прогноз делается и оценивается. После этого модель подвергается перекрестной проверке посредством стандартной 10-кратной перекрестной проверки, при которой данные разделяются на 10 подмножеств, и каждый набор, в свою очередь, откладывается в качестве набора данных проверки для определения соответствия.

Здесь мы видим, что модель логистической регрессии является точной в 77,91% случаев, что намного ниже, чем 97,68%, которые модель получила, когда функция веса все еще присутствовала. Оценка перекрестной проверки 71,01% оказалась существенно ниже точности модели. Это указывает на то, что наша модель может быть переоснащена или слишком точно согласована с текущими данными и случайным шумом, а не с фактической взаимосвязью между переменными. Поскольку разница составляет почти 8%, мы должны точно настроить гиперпараметры модели и посмотреть, что происходит, когда мы используем GridSearchCV. GridSearchCV считается одним из наиболее точных методов из-за большого количества итераций, поскольку он проходит через каждую комбинацию значений гиперпараметров.

Теперь, когда GridSearchCV предоставил нам лучшие гиперпараметры для использования для C, штрафа и решателя, мы должны использовать их и повторно оценить точность.

После использования предложенных гиперпараметров наша оценка перекрестной проверки в 72% ближе к 75,72% выходным данным GridSearchCV, что означает, что наша модель была улучшена и не так перегружена, как раньше. Однако мне было любопытно, как будет работать другой популярный метод настройки гиперпараметров, RandomizedSearchCV, поскольку он использует другой подход, создавая сетку значений гиперпараметров и выбирая случайные комбинации при обучении.

Я вставил ключевые гиперпараметры RandomizedSearchCV обратно в логистическую регрессию, чтобы оценить ее эффективность.

Хотя гиперпараметры RandomizedSearchCV все же улучшили разницу между перекрестной проверкой и оценкой RandomizedSearchCV по сравнению с точностью исходной модели логистической регрессии и ее оценкой перекрестной проверки, они не минимизировали разницу в такой степени, как GridSearchCV. Поэтому мы рассмотрим основные функции логистической регрессии с использованием гиперпараметров GridSearchCV.

Этот график показывает нам относительную важность различных функций для прогнозирования ожирения. Мы видим, что тремя наиболее важными характеристиками этой модели являются CFBM (потребление пищи между приемами пищи), возраст и семейный анамнез. На первый взгляд кажется, что эти переменные имеют смысл в их большем влиянии на ожирение, но мы продолжим исследовать больше моделей и достигнем лучшего консенсуса.

Мы также можем быстро создать классификационный отчет по модели логистической регрессии. Категория точности относится к проценту точных прогнозов, категория отзыва указывает процент обнаруженных положительных случаев, а оценка F1 - это процент правильных положительных прогнозов.

Двигаясь вперед, я буду использовать различные методы ансамбля, которые представляют собой модели прогнозирования, которые объединяют несколько моделей для получения окончательного прогноза.

Модель № 2: упаковка

Пакетирование, также известное как агрегирование начальной загрузки, представляет собой метод ансамбля усреднения, который используется с деревьями решений и объединяет прогнозы нескольких моделей. n_estimators, параметр BaggingClassifier и других подобных моделей, может иметь большое значение для точности модели, и может быть сложно определить оптимальный n_estimator для использования. Следовательно, мы можем использовать график возрастающих значений n_estimators и их результирующую точность тестирования, чтобы помочь нам выбрать n_estimator с максимально возможной точностью.

Этот график говорит нам, что наивысшая точность достигается, когда n_estimator составляет около 79, так что это то, что мы будем использовать для нашей модели упаковки.

Модель мешков дает нам точность 93,06% и оценку перекрестной проверки 92,14%, что является огромным улучшением по сравнению с тем, что мы получили от модели логистической регрессии, вероятно потому, что это продукт нескольких моделей, которые были обучены индивидуально и усреднены. . Разница между двумя оценками также существенно меньше, что указывает на более подходящую модель и отрицает необходимость точной настройки гиперпараметров, как мы это делали с моделью логистической регрессии. Все последующие модели с небольшой разницей (‹1%) между оценками перекрестной проверки и точности не будут настраиваться.

Отчет о классификации печатается только для подтверждения точности:

Отчет сообщает нам, что модель имеет более высокую точность для обоих объектов класса 0 и класса 1 по сравнению с отчетом о классификации модели логистической регрессии.

Модель № 3: случайный лес

Затем я построю модель случайного леса, которая является еще одним методом усреднения и создаст ансамбль декоррелированных деревьев решений.

Я создал еще один график n_estimators и их точности тестирования, чтобы дать мне представление о том, какой n_estimator мне следует использовать для моей модели случайного леса.

Этот график показывает, что n_estimator около 132 поможет нам достичь высокой точности. Однако степень точности по-прежнему зависит от других параметров, которые я диктую или не диктую.

max_features - это размер случайных подмножеств функций, которые следует учитывать при разделении узла. Хотя установка «авто» дает мне высокую точность 94,95% и перекрестную проверку 93,85%, я решил установить его на 6, чтобы получить аналогичную точность 94,79% и более высокий балл перекрестной проверки 94,04%. Как мы видим, модель случайного леса пока что является лучшей моделью с высокой точностью и оценками перекрестной проверки, а также с оценкой перекрестной проверки, очень близкой к точности, что свидетельствует о гораздо более низкой степени переобучения.

Мне также интересно узнать о наиболее важных функциях модели случайного леса, поэтому я создал простую гистограмму для визуализации этого.

Это показывает мне, что возраст, семейный анамнез и рост были наиболее полезными функциями для прогнозирования ожирения с помощью модели случайного леса, в то время как другие функции, такие как отслеживание курения и потребления калорий, были просто шумом. Я также могу быстро извлечь три основные функции с их значениями важности с помощью следующего кода:

Образцы вне пакета (OOB) - это образцы, которые не включены в образец начальной загрузки и могут использоваться в качестве образцов для тестирования, поскольку они не использовались при обучении и, таким образом, предотвращают утечку. Поскольку oob_score обеспечивает лучшую модель с меньшей дисперсией и без переобучения, ее полезно использовать при проверке модели. В следующем коде я сравниваю оценку точности OOB с точностью модели Random Forest.

Здесь мы видим, что оценка OOB очень близка к нашей ранее рассчитанной точности тестирования, что подтверждает высокую производительность нашей модели.

Модель №4: AdaBoost

Далее мы рассмотрим другой метод ансамбля, метод повышения. Это отличается от метода мешков, потому что они работают для уменьшения общей дисперсии, в то время как усиление моделей снижает общую систематическую ошибку за счет последовательного обучения слабых учеников.

Я решил построить модель AdaBoost, которая объединяет нескольких слабых учеников в одного сильного ученика и меняет вес для каждого неправильно классифицированного наблюдения. Я начал с другого графика n_estimator:

Я указал больше параметров с моделью AdaBoost, например max_depth, равный 7, и Learning_rate, равный 0,5, чтобы еще больше повысить точность и оценки перекрестной проверки. Я протестировал различные примеры этих параметров и выбрал их на основе их точности. Модель дает нам высокую точность и оценку перекрестной проверки с незначительной разницей между ними.

Мне интересно посмотреть, как функциональные переменные модели AdaBoost складываются по сравнению с моделью случайного леса, поэтому я построил их график ниже.

Выходные данные о важности характеристик аналогичны для наиболее важных и наименее важных переменных, поскольку рост и возраст отображаются в трех основных характеристиках обеих моделей, а мониторинг курения и потребления калорий по-прежнему является наименее важным. Однако в трех основных функциях модели AdaBoost семейный анамнез был заменен на частоту физической активности.

Модель №5: деревья усиления градиента

Gradient Boosted Trees - еще одна модель повышения. Однако, в то время как AdaBoost повторно взвешивает наблюдения в соответствии с их точностью предсказания, Gradient Boosted Trees пытается подогнать новые предикторы к остаточным ошибкам от предыдущих предикторов.

Как и раньше, я сначала визуализировал производительность n_estimators.

Пик здесь, кажется, около 170.

Повышение градиента и здесь работает довольно хорошо, и разница между перекрестной проверкой и оценками точности также невелика.

Мне было интересно увидеть оценки важности функций модели Gradient Boosted Trees по сравнению с показателями модели AdaBoost, поэтому я построил график важности функций и три основных функции ниже.

Модели Gradient Boosted Trees и AdaBoost разделяют возраст как одну из трех основных характеристик, но модель Gradient Boosted Trees также зависит от семейной истории и количества основных приемов пищи. Мониторинг курения и потребления калорий снова занимает низкое положение.

Модель № 6: классификатор голосования

Наконец, мы будем использовать модель классификатора голосования, которая обучается с помощью набора выбранных моделей и уравновешивает слабые места в отдельных классификаторах. Есть два типа голосования: жесткое голосование и мягкое голосование. Мы будем использовать мягкое голосование, потому что оно дает больше информации о вероятности, чем о классах. Он включает в себя усреднение вероятностей каждого класса и выбор класса с наивысшим средним значением в качестве окончательного прогноза. Я решил включить в ансамбль четыре самые эффективные модели: Random Forest, Bagging, AdaBoost и Gradient Boosting.

Как и ожидалось, модель классификатора голосования показала самые высокие показатели точности и перекрестной проверки из всех моделей, хотя и не намного превзошла модель AdaBoost. Это может быть связано с тем, что мягкое голосование учитывает фактическую вероятность, принимает во внимание неопределенность каждого классификатора и придает больший вес высоконадежным голосам. Модель классификатора голосования является наиболее многообещающей из-за ее высокой точности, небольшой разницы между оценками перекрестной проверки и точности, ее более низкой дисперсии и того факта, что ее окончательные прогнозы основаны на большинстве голосов участвующих моделей, которые были уже все на высоте.

Вывод

Произошло значительное улучшение от базовой точности 54,57% до точности ансамбля для голосования 95,27%, что было достигнуто за счет агрегирования различных моделей и настройки различных параметров, таких как n_estimators, max_depth и Learning_rate. Хотя точность высока, модель не является существенно переоборудованной, поскольку все оценки перекрестной проверки для каждого из методов ансамбля отличались от точности модели менее чем на 1%.

Расчеты важности характеристик показывают, что наибольшее влияние на приведенные выше модели оказали возраст, семейный анамнез и рост. Другими факторами, которые оказали большое влияние на одну из вышеперечисленных моделей, были потребление пищи перед едой, частота физической активности и количество основных приемов пищи. Факторами, которые не повлияли на все аспекты, были курение, мониторинг потребления калорий, пол и транспорт. Учитывая высокую точность модели, любой, кто интересуется факторами, влияющими на ожирение по причинам собственного здоровья или для других целей, может обратиться к вышеупомянутым характерным особенностям.