Каковы настоящие симптомы рака легких? Давайте ответим на него в этой статье

Фон

Рак легких — это тип рака, который начинается в легких. Ваши легкие — это два губчатых органа в груди, которые поглощают кислород при вдохе и выделяют углекислый газ при выдохе.

Рак легких является ведущей причиной смертности от рака во всем мире.

Рак легких обычно не вызывает признаков и симптомов на самых ранних стадиях. Признаки и симптомы рака легких обычно проявляются на поздних стадиях заболевания.

Признаки и симптомы рака легких могут включать:

  • Новый кашель, который не проходит
  • Кашель кровью, даже небольшим количеством
  • Одышка
  • Боль в груди
  • аллергия
  • хрипы
  • Похудение без усилий
  • Боль в костях
  • Головная боль

Сопутствующие работы

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

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

https://www.mayoclinic.org/diseases-conditions/lung-cancer/symptoms-causes/syc-20374620

Наборы данных и функции

  1. Пол: M (мужской), F (женский)
  2. Возраст: Возраст пациента
  3. Курение: ДА=2 , НЕТ=1.
  4. Желтые пальцы: ДА=2, НЕТ=1.
  5. Тревога: ДА=2, НЕТ=1.
  6. Peer_pressure: YES=2 , NO=1.
  7. Хроническое заболевание: ДА=2, НЕТ=1.
  8. Усталость: ДА=2, НЕТ=1.
  9. Аллергия: ДА=2 , НЕТ=1.
  10. Свистящее дыхание: ДА=2, НЕТ=1.
  11. Алкоголь: ДА=2, НЕТ=1.
  12. Кашель: ДА=2, НЕТ=1.
  13. Одышка: ДА=2, НЕТ=1.
  14. Затрудненное глотание: ДА=2, НЕТ=1.
  15. Боль в груди: ДА=2, НЕТ=1.
  16. Рак легких: ДА, НЕТ.

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

Предварительная обработка данных

Нам действительно не нужно много менять, потому что данные уже не нулевые или не-NaN данные.

Что нам нужно сделать, так это изменить формат всех категориальных данных на 0 и 1, например

dataset["GENDER"] = dataset["GENDER"].apply(lambda x: '1' if x == "M" else '0')
dataset["GENDER"] = dataset["GENDER"].astype(int)
dataset["LUNG_CANCER"] = dataset["LUNG_CANCER"].apply(lambda x: '1' if x == "YES" else '0')
dataset["LUNG_CANCER"] = dataset["LUNG_CANCER"].astype(int)

и результат будет таким

ЭДА

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

На этом этапе давайте узнаем информацию об этой паре.

  1. Корреляция
  2. Распределение данных

Корреляция

Мы знаем, что из приведенного выше графика корреляции

  1. Курение имеет низкую корреляцию со всеми переменными, влияющими на рак легких, а также не коррелирует с раком легких.
  2. Желтые пальцы и беспокойство имеют высокую корреляцию, которая составляет 57%, и оба имеют достойную корреляцию с раком легких.
  3. Затрудненное глотание и беспокойство имеют высокую корреляцию с 49% и каким-то образом хорошо коррелируют с раком легких.
  4. Одышка и усталость имеют высокую корреляцию с 44% и имеют достойную корреляцию с раком легких.
  5. Аллергия и употребление алкоголя имеют высокую корреляцию с 34% и самую высокую корреляцию с раком легких, что указывает на то, что это важный фактор рака легких.
  6. Употребление алкоголя и свистящее дыхание также имеют высокую корреляцию с 37% и высокую корреляцию с раком легких, что также указывает на фактор рака легких.
  7. Боль в груди и употребление алкоголя также имеют высокую корреляцию с 33%, а также сильно коррелируют с раком легких, что также может указывать на фактор рака легких.

Из приведенных выше пунктов мы это знаем.

  • Употребление алкоголя и свистящее дыхание могут быть Х-фактором
  • Употребление алкоголя и аллергия могут быть Х-фактором
  • Боль в груди и употребление алкоголя также могут быть Х-фактором.
  • Затрудненное глотание и тревога также могут быть Х-фактором.

Особенности, которые я возьму после рассмотрения корреляции, вероятно,

  1. Употребление алкоголя
  2. хрипы
  3. аллергия
  4. Боль в груди

Распределение данных

Распределение данных по возрасту довольно нормальное, диапазон находится между возрастными точками 52–72 лет.

Это означает, что люди в возрасте от 52 до 72 лет, скорее всего, больны раком легких.

Результат ЭДА

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

  1. Употребление алкоголя
  2. хрипы
  3. аллергия
  4. Боль в груди
  5. Возраст
  6. Рак легких (как ярлык)

Методы

Дисбалансный подход к данным

Мы видим, что LUNG_CANCERpeople составляет 270 человек по сравнению с не-LUNG_CANCERpeople около 39 человек.

Из-за дисбаланса данных нам нужно сделать передискретизацию.

Почему?

Потому что, если данные о дисбалансе произошли, модель будет иметь смещение, потому что данные, как правило, показывают больше данных «LUNG_CANCER», которые нужно обучить.

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

Мы будем использовать SMOTE для обработки этих данных дисбаланса.

from imblearn.over_sampling import SMOTE
sm = SMOTE(random_state = 120)


x_sm, y_sm = sm.fit_resample(dataset.drop("LUNG_CANCER", axis=1), dataset["LUNG_CANCER"])

dataset_sm = pd.concat([x_sm, y_sm], axis=1)
dataset_sm

Теперь наши данные сбалансированы.
Продолжим моделирование.

Подход к моделированию

Исходя из этих данных, приведенных выше, я буду использовать алгоритм классификации «Дерево решений».

Почему ?

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

Выбор атрибутов

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

Из приведенной выше модели мы используем «ИНДЕКС Джини» в качестве критерия.

classifier = DecisionTreeClassifier(criterion="gini", max_depth=3)

Подход к масштабированию функций

Функции AGE имеют широкий диапазон данных, которые на самом деле не имеют такого же масштаба, как другие функции.

Нам нужно будет стандартизировать шкалу, используя подход StandardScaler. Это изменит значение на основе среднего значения и стандартного отклонения.

Полученные результаты

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

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

  1. Отзывать
  2. Оценка F1
  3. Матрица путаницы
classifier = DecisionTreeClassifier(criterion="gini", max_depth=3)
classifier.fit(X_train, y_train)

y_pred = classifier.predict(X_test)

recall = metrics.recall_score(y_test, y_pred)
f1_score = metrics.f1_score(y_test, y_pred)
confusion_matrix = metrics.confusion_matrix(y_test, y_pred)

/**
Output

Recall: 0.6521739130434783
F1 Score: 0.75
Confusion Metrics: [[58  4]
 [16 30]]
*/

Отзывать

Мы получаем оценку отзыва 0.65, что вполне нормально, но может увеличить истинное положительное значение.

Оценка F1

Оценка f1 находится на 0.75, что больше, чем «ОК», она может прогнозировать с несколько высоким баллом.

Матрица путаницы

Это означает, что у нас есть 16 ложноотрицательных результатов, которые не смогли предсказать, что у 16 ​​человек есть рак легких, хотя у человека он есть.

А также мы ошибочно предсказываем, что у 4 человек будет РАК ЛЕГКИХ.

Заключение

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

Скорее всего, это заболевание возникло в пожилом возрасте от 52 до 72 лет.

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

И мы уже знаем некоторую существующую закономерность, и было бы проще, если бы критерии пациентов соответствовали нашему анализу.

Кредиты

Pacmann.ai научил меня многому, благодаря чему я смог создать этот отчет и поделиться им со всеми вами.

Проекты

Исходный код можно посмотреть здесь

СТАНЬТЕ ПИСАТЕЛЕМ на MLearning.ai