Для меня важнее всего моя родина и идеология, которой я придерживаюсь

Куанг Кхай Нгуен Хунг

I) Введение

Сердечно-сосудистые заболевания (ССЗ) вызываются нарушениями работы сердца и сосудов. Сердечно-сосудистые заболевания включают ишемическую болезнь сердца (инфаркт миокарда), нарушение мозгового кровообращения (инсульт), гипертонию (высокое кровяное давление), заболевание периферических артерий, ревматический порок сердца и врожденный порок сердца. сердечная недостаточность. Основными причинами сердечно-сосудистых заболеваний являются употребление табака, отсутствие физической активности, нездоровое питание и вредное употребление алкоголя. Таким образом, большинство сердечно-сосудистых заболеваний можно предотвратить путем устранения этих поведенческих факторов риска.

Тем не менее, сердечно-сосудистые заболевания в настоящее время являются основной причиной смерти во всем мире, на их долю приходится 31% всех смертей. Во Вьетнаме сердечно-сосудистые заболевания были причиной 31% всех смертей в 2016 году, что составляет более 170 000 смертей.

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

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

II) Описание данных и стратегия решения проблемы

Данные состоят из 303 строк, представляющих 303 человека, и 13 функций, связанных с их собственной информацией и состоянием здоровья. Столбец, который мы хотим спрогнозировать, — это «целевой», который помечен 1, если у человека есть болезнь сердца, и 0 в противном случае. Описание функции в данных показано в этой таблице:

Я выполняю здесь первые несколько строк в наборе данных

В этой статье мы пройдем 3 основных этапа:

Шаг 1. Разработка функций

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

Шаг 3. Оценка модели

Мы оценим характеристики этой модели с помощью двух основных показателей: точности, точности, отзыва и дадим некоторые выводы.

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

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

III) Разработка функций

1) Устранение слабых признаков с помощью графиков

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

а) Анализ числовых характеристик

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

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

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

Здесь показан код реализации теста. Этапы выполнения теста:

  • Рассчитать среднее значение и стандартное отклонение каждой числовой функции в каждой цели
  • Подсчитайте количество точек данных в каждой цели
  • Рассчитайте Sp, которая представляет собой объединенную дисперсию
  • Рассчитать тестовую статистику для каждой функции

Квантиль t-распределения 0,975 с 301 числом степени свободы равен 1,96. Следовательно, из приведенного выше вывода мы не можем сделать вывод, что «хол» имеет разницу в среднем между двумя целями для доверительного интервала 95%. (отклонить нулевую гипотезу)
Из диаграммы и проверки гипотезы я решил исключить две функции, а именно «хол» и «трестбпс», хотя «трестбпс» проходят тест, мы не можем увидеть очень четкого различия между ними. эта функция между двумя целями, поэтому я решил исключить и эту функцию

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

Из приведенного выше графика видно, что существует очень четкое различие между каждым типом боли в груди, в большинстве случаев, если у вас есть боль в груди 1, 2, 3 типа, у вас будет высокая вероятность заболевания.

Из приведенного выше графика видно, что существует четкое различие между болезнью/не болезнью в классах 1, 2, 3, особенно примерно в 80% случаев у вас будет заболевание, учитывая, что вы принадлежите к классу 2. 0 не имеет четкого различия и имеет высокую дисперсию на графике факторов, следовательно, это слабая функция.

Из приведенного выше графика видно, что существует четкое различие между каждой группой «ca». Это показывает, что «ca» — очень сильная черта. Мы извлекли тот факт, что у людей очень высока вероятность сердечно-сосудистых заболеваний, если они относятся к классам «ca» 0 и 4, однако из факторного графика дисперсия класса 4 очень высока, что означает количество точек данных запись в классе 4 «ca» составляет меньшинство в наборе данных, поскольку тогда класс «ca» 4 не является сильным признаком

Из графика видно, что существует четкое различие в классах уклона 1 и 2. Класс уклона 0 не имеет четкого разделения и высокой дисперсии на факторном графике. Поэтому класс уклона 0 является слабым признаком.

Из обоих графиков мы видим, что только класс рестектирования 1 имеет четкое различие с низкой дисперсией, тогда как классы рестектирования 0 и 2 не имеют четкого различия.

2) Исследовательский анализ данных

Теперь мы наносим данные, чтобы увидеть некоторую связь между функциями и некоторыми интересными выводами.

Я делю возрастной признак на 3 возрастные группы (молодые-средние-старые) и рассматриваю взаимосвязь между полом и возрастом. Как правило, чем старше возраст, тем ниже вероятность заболевания. Кроме того, у мужчин меньше шансов заболеть сердечно-сосудистыми заболеваниями по сравнению с женщинами в целом.

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

График показывает взаимосвязь между 3 группами наклона, мы можем сделать вывод, что, как правило, чем ниже старый пик, тем выше вероятность дефекта. Однако, если люди находятся на склоне 0 и 1, низкое старое пиковое значение является высоким предупредительным сигналом об их сердечных заболеваниях.

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

К счастью, из графика корреляции признаки в наборе данных не слишком сильно зависят друг от друга. Самая высокая корреляция составляет всего 0,43. Следовательно, мы готовы подогнать данные к моделям машинного обучения.

Наконец, из шага выше мы извлекли интересные идеи:

  • Чем вы моложе, тем выше вероятность, что у вас есть сердечные заболевания
  • Низкое старое пиковое значение является опасным предупредительным сигналом для вашего сердца.
  • У женщин больше шансов заболеть сердечно-сосудистыми заболеваниями, чем у мужчин
  • Поскольку вы моложе, если у вас высокий талах, высока вероятность того, что у вас есть болезнь сердца.
  • Если люди находятся на склоне 3, у них будет очень высокий шанс заболеть.

IV) Подгонка моделей классификации

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

a) Предварительно обработайте данные перед подгонкой
Перед подгонкой к модели нам необходимо предварительно обработать данные, а затем разделить исходный набор данных на обучающий/тестовый набор. Сначала мы выполняем одно горячее кодирование, одно горячее кодирование — это процесс, который превращает категориальные данные в числовые данные. Идея состоит в том, что мы превратим каждую категорию в столбцы, а затем используем фиктивные значения, чтобы показать существование этой категории в каждой строке. Чтобы выполнить одно горячее кодирование, я использовал функцию pd.get_dummies() для категориальных столбцов в наборе данных. В приведенном здесь коде показан процесс, поскольку мы видим, что после выполнения одного горячего кодирования набор данных имеет больше столбцов.

Следующим шагом будет удаление слабых категориальных столбцов из data_hot_encoded. Основываясь на анализе в разработке признаков, слабыми признаками являются «cp_3», «thal_0», «restecg_2», «ca_4», «slope_0», вот код для удаления этих столбцов. Обратите внимание, что удаление слабых признаков помогает уменьшить шум и повысить предсказательную способность модели.

б) Подгонка моделей машинного обучения

1) Логистическая регрессия

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

Мы измеряем условную вероятность зависимой переменной Y при заданной независимой переменной X в бинарной регрессии. P(Y=1|X) или P(Y=0|X) — это два способа записи. В логистической регрессии P(Y |X) аппроксимируется как сигмовидная функция, применяемая к линейной комбинации входных признаков.

Я настроил два гиперпараметра в логистической регрессии, а именно:

  • l1_ratio: Параметр смешивания эластичной сетки
  • C: обратная сила регуляризации, меньшие значения указывают на более сильную регуляризацию.

Код Python для всего процесса:

После запуска кода оптимальные гиперпараметры:

Теперь давайте воспользуемся оптимальной моделью для прогнозирования набора тестов и посмотрим на производительность.

Из приведенного выше вывода мы видим, что точность модели довольно высока 87,91%, кроме того, и точность, и полнота также высоки, что показывает, что у этой модели нет проблем с дисбалансом.

2) Случайный лес

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

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

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

  • критерий: {"джини", "энтропия"}:Функция для измерения качества разделения. Поддерживаемые критерии: «джини» для примеси Джини и «энтропия» для получения информации.
  • max_features: количество функций, которые следует учитывать при поиске лучшего сплита.
  • max_depth: максимальная глубина дерева
  • n_estimators: количество деревьев в лесу.
  • min_weight_fraction_leaf: Минимальная взвешенная доля суммы весов (всех входных выборок), необходимая для конечного узла.
  • min_samples_split : минимальное количество сэмплов, необходимое для разделения внутреннего узла.

Код Python для поиска оптимальной модели случайного леса показан здесь:

После настройки гиперпараметра вот результат:

Теперь воспользуемся оптимальной моделью для подгонки и сообщим о результате:

Точность модели составляет 83,52%, что все еще является высоким, но ниже, чем у логистической регрессии. Теперь давайте посмотрим на извлечение важности функций из модели.

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

3) Усиление градиента

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

После настройки вот гиперпараметр, который я нашел

Точность Gradient Boosting составляет 85,71%, что выше, чем у алгоритма случайного леса. Высокая точность и полнота показывают, что модель сбалансирована при прогнозировании цели. Теперь давайте посмотрим на важность функций из модели.

Основываясь на Gradient Boosting, thal_2, cp_0 и ca_0 являются 3 наиболее важными функциями с относительной важностью более 20%, другие функции, похоже, не имеют значительной силы в модели.

4) Наивный байесовский анализ

Наивный байесовский метод — это метод классификации, основанный на теореме Байеса с предположением о независимости предикторов. Проще говоря, наивный байесовский классификатор предполагает, что наличие определенной функции в классе не связано с наличием какой-либо другой функции.

Наивную байесовскую модель легко построить, и она особенно полезна для очень больших наборов данных. Наряду с простотой, Наивный Байес, как известно, превосходит даже очень сложные методы классификации. Теорема Байеса обеспечивает способ вычисления апостериорной вероятности P(c|x) из P(c), P(x) и P(x|c).

Посмотрите на уравнение ниже:

Выше,

  • P(c|x) — апостериорная вероятность класса(c, цель) с учетом предиктора (x, атрибуты).
  • P(c) — априорная вероятность класса.
  • P(x|c) — это вероятность, которая является вероятностью предиктораданного класса.

Чтобы подогнать наивный байесовский алгоритм в python, я использовал GaussianNB() из sklearn.naive_bayes. Процедура очень проста. Мы вызываем GaussianNB(), затем подгоняем его к обучающим данным, затем используем модель для прогнозирования на тестовом наборе и оцениваем ее точность. Код этого процесса показан здесь:

Давайте воспользуемся моделью и посмотрим на ее характеристики:

На выходе точность модели на выходе составляет 82,42%.

V) Оценка модели и заключение

Характеристики каждой модели приведены в этой таблице.

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

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

Более того, из результата мы видим превосходство метода повышения градиента по сравнению со случайным лесом. Две модели имеют одинаковую методологию подгонки, но у них разный подход. Результат показывает, что Gradient Boosting превосходит Random Forest по обоим трем показателям.

Полный код этого проекта вы можете найти здесь.

Спасибо, что уделили время на прочтение моей статьи, надеюсь, моя статья окажется для вас полезной. Я также с нетерпением жду комментариев от вас.