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

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

Введение

Рак — это название, данное совокупности родственных заболеваний. При всех видах рака часть клеток организма начинает делиться без остановки и распространяться в окружающие ткани (NCI). Ожидается, что рак станет основной причиной смерти в течение следующих нескольких десятилетий.

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

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

В зависимости от того, где обнаружен рак, раку молочной железы присваивается стадия от I до IV. Рак молочной железы стадии IV, также называемый метастатическим раком молочной железы, представляет собой рак молочной железы, который распространился на участок тела, удаленный от молочной железы и подмышечных лимфатических узлов. (Вакс, А.Г. и Винер, Э.П., 2019 г.)

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

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

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

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

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

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

Время кодирования!

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

Импорт библиотек:

  • Scikit-learn — это наиболее широко используемая библиотека Python для машинного обучения.
  • Pandas – это быстрый, мощный, гибкий и простой в использовании инструмент для анализа и обработки данных с открытым исходным кодом, созданный на основе языка программирования Python.
  • Seaborn — это библиотека визуализации данных Python, основанная на matplotlib. Он предоставляет высокоуровневый интерфейс для рисования привлекательных и информативных статистических графиков.
  • NumPy – это библиотека для языка программирования Python, добавляющая поддержку больших многомерных массивов и матриц, а также большой набор высокоуровневых математических функций для работы с этими массивами.
  • Matplotlib — это библиотека для построения графиков для языка программирования Python и его расширения NumPy для числовой математики.
import sklearn
import pandas as pd
import seaborn as sns
import numpy as np
import matplotlib.pyplot as plt

Загрузка данных:

Чтение файла .csv с помощью read_csv от Pandas.

data = pd.read_csv("data.csv")

Очистка данных:

Для очистки данных проверяется наличие значений null:

data.isnull()

В этих данных была проблема со столбцом: «Безымянный 32», со всеми значениями null. Поэтому я удалил его, а также столбец «id», который не будет использоваться.

# Deleting 'Unnamed: 32' column
data.drop("Unnamed: 32",axis=1,inplace=True)
# Deleting 'id' column
data.drop("id",axis=1,inplace=True)

Исследование данных:

Полный источник данных можно найти здесь.
Взгляните на столбцы данных:

list(data.columns)

Информация об атрибутах:

  1. Идентификационный номер
    2) Диагноз (M = злокачественный, B = доброкачественный)
    3–32)
    Для каждого клеточного ядра вычисляются десять вещественных признаков:
    a) радиус ( среднее расстояний от центра до точек на периметре)
    б) текстура (стандартное отклонение значений шкалы серого)
    в) периметр
    г) площадь
    д) гладкость (локальная разброс длин радиусов)
    е) компактность (периметр² / площадь — 1,0)
    ж) вогнутость (выраженность вогнутых участков контура)
    з) вогнутость точек (количество вогнутых участков контура) контур)
    i) симметрия
    j) фрактальная размерность («приближение береговой линии» — 1)

Используя методы: data.head() и data.describe() можно просмотреть данные, столбцы, строки и значения, такие как среднее значение, количество и стандартная вариация.

Значения столбца diagnostic, первоначально представленные в формате String («B» и «M»), становятся целыми.

data['diagnosis']=data['diagnosis'].map({'M':1,'B':0})

Данные можно разделить на «средние», «наиболее» и «наихудшие», так ниже это сделано:

features_mean= list(data.columns[1:11])
features_se= list(data.columns[11:20])
features_worst=list(data.columns[21:31])

Получение частоты диагностики рака молочной железы:

  • 1 (Злокачественный)
  • 0 (доброкачественный)
sns.set(style='darkgrid', font_scale=1.1)
sns.countplot(data['diagnosis'],label="Count")

Анализ корреляции данных:

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

corr = data[features_mean].corr()
plt.figure(figsize=(14,14))
sns.heatmap(corr, cbar = True,  square = True, annot=True, fmt= '.2f',annot_kws={'size': 15},
           xticklabels= features_mean, yticklabels= features_mean

Чем сильнее цвет, тем больше величина корреляции. Корреляция суммирует силу и направление линейной (прямолинейной) связи между двумя количественными переменными. Обозначается как r и принимает значения от -1 до +1. Положительное значение r указывает на положительную связь, а отрицательное значение r указывает на отрицательную связь.
Чем ближе r, до 1, чем ближе точки данных располагаются к прямой линии, тем сильнее линейная связь. Чем ближе r к 0, тем слабее линейная ассоциация.

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

pred_var = ['texture_mean','radius_mean','smoothness_mean','concavity_mean','symmetry_mean']

Создание модели машинного обучения:

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

  1. набор данных для обучения, который мы используем для построения модели
  2. тестовый набор данных, который мы используем для проверки точности нашей модели. Мы делаем это с помощью метода train_test_split, который случайным образом перемешивает набор данных и по умолчанию извлекает 75 % случаев в качестве обучающих данных. и 25 % случаев как тестовые данные.
# Diagnosis is the target of our results
data_target = data['diagnosis']
data_features = data.drop(['diagnosis'],axis=1)

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

from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split(data_features, data_target, random_state=0)

Модель: K-ближайшие соседи:

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

Построение модели:

n_neighbors=1 устанавливает число ближайших соседей равным 1.

from sklearn.neighbors import KNeighborsClassifier
knn = KNeighborsClassifier(n_neighbors=1)

И постройте его на тренировочном наборе:

knn.fit(X_train, y_train)

Оценка модели. Тестирование набора данных для оценки точности модели.

print("KNN-1 Accuracy on training set:  {:.3f}".format(knn.score(X_train, y_train)))
print("KNN-1 Accuracy on test set: {:.3f}".format(knn.score(X_test, y_test)))
KNN-1 Accuracy on training set:  1.000
KNN-1 Accuracy on test set: 0.916

Модель KNN с n_neighbors=1 имеет точность 100 % в обучающем наборе данных. Это означает, что он переопределяет данные обучения.

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

X_new = np.array([[18.99,
10.30,123.8,1001,0.119,0.26,0.30,0.15,0.24,0.08,1.095,0.9053,8.65,
157.4,0.0064,0.04904,0.05373,0.01587,0.03003,0.0053,25.38,17.33,
186.5,2019,0.1642,0.6656,0.7119,0.2654,0.4601,0.1189]])

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

prediction = knn.predict(X_new)
print(f"Prediction: {'Malignant' if prediction == 1 else 'Benign'}")
Prediction: Malignant

Пробуем разное количество n_neighbors для улучшения модели KNN.

knn = KNeighborsClassifier(n_neighbors=4)
knn.fit(X_train, y_train)
print("KNN-4 - Accuracy on training set:  {:.3f}".format(knn.score(X_train, y_train)))
print("KNN-4 - Accuracy on test set: {:.3f}".format(knn.score(X_test, y_test)))
KNN-4 - Accuracy on training set:  0.941
KNN-4 - Accuracy on test set: 0.937

Улучшена точность модели при использовании 4 n_neighbors вместо 1.

prediction = knn.predict(X_new)
print(f"Prediction: {'Malignant' if prediction == 1 else 'Benign'}")
Prediction: Malignant

Модель: Дерево решений

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

from sklearn.tree import DecisionTreeClassifier
tree = DecisionTreeClassifier(random_state=0)
tree.fit(X_train, y_train)

Проверка точности:

print("Decision Tree - Accuracy on training set: {:.3f}".format(tree.score(X_train, y_train)))
print("Decision Tree - Accuracy on test set: {:.3f}".format(tree.score(X_test, y_test)))
Decision Tree - Accuracy on training set: 1.000
Decision Tree - Accuracy on test set: 0.881

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

tree = DecisionTreeClassifier(max_depth=3, random_state=12)
tree.fit(X_train, y_train)

print("Decision Tree - Accuracy on training set: {:.3f}".format(tree.score(X_train, y_train)))
print("Decision Tree - Accuracy on test set: {:.3f}".format(tree.score(X_test, y_test)))
Decision Tree - Accuracy on training set: 0.977
Decision Tree - Accuracy on test set: 0.916

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

prediction = tree.predict(X_new)
print(f"Prediction: {'Malignant' if prediction == 1 else 'Benign'}")
Prediction: Malignant

Попытка изменить max_depth для улучшения модели дерева решений.

tree = DecisionTreeClassifier(max_depth=2, random_state=12)
tree.fit(X_train, y_train)

print("Decision Tree - Accuracy on training set: {:.3f}".format(tree.score(X_train, y_train)))
print("Decision Tree - Accuracy on test set: {:.3f}".format(tree.score(X_test, y_test)))
Decision Tree - Accuracy on training set: 0.941
Decision Tree - Accuracy on test set: 0.923

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

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

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

from sklearn.ensemble import RandomForestClassifier
forest = RandomForestClassifier(n_estimators=1000, random_state=999, max_depth=3)
forest.fit(X_train, y_train)

Проверка точности модели случайного леса:

print("Random Forest - Accuracy on training set: {:.3f}".format(forest.score(X_train, y_train)))
print("Random Forest - Accuracy on test set: {:.3f}".format(forest.score(X_test, y_test)))
Random Forest - Accuracy on training set: 0.981
Random Forest - Accuracy on test set: 0.965

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

prediction = forest.predict(X_new)
print(f"Prediction: {'Malignant' if prediction == 1 else 'Benign'}"
Prediction: Malignant

Вывод

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

  • KNN (n_neighbors=1) — Точность на тестовом наборе: 0,916
  • KNN (n_neighbors=4) — Точность на тестовом наборе: 0,937
  • Дерево решений (по умолчанию) — Точность набора тестов: 0,881
  • Дерево решений (max_depth=3) — Точность на тестовом наборе: 0,916
  • Дерево решений (max_depth = 2) — Точность на тестовом наборе: 0,923
  • Случайный лес — точность тестового набора: 0,965

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

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

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

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

Обо мне:

Найдите меня в LinkedIn

Ссылки:
Информационные бюллетени ВОЗ по раку. (2009). [Онлайн]. Доступно: http://www.who.int/mediacentre/factsheets/fs297/en/index.html.

Вакс А. Г. и Винер Э. П., 2019 г. Лечение рака молочной железы. Джама, 321(3), стр. 316–316.

МакКинни, Скотт Майер и др. «Международная оценка системы ИИ для скрининга рака молочной железы». Природа 577.7788 (2020): 89–94.

Куши Л.Х., Дойл С., Маккалоу М. и др.; Консультативный комитет по рекомендациям по питанию и физической активности Американского онкологического общества, 2010 г. Рекомендации Американского онкологического общества по питанию и физической активности для профилактики рака: снижение риска рака с помощью выбора здоровой пищи и физической активности. CA Рак J Clin. 2012;62:30-67.

КЭРИ, Лиза А. и др. Раса, подтипы рака молочной железы и выживаемость в исследовании рака молочной железы в Каролине. Джама, т. 295, сн. 21, с. 2492–2502, 2006 г.