Введение
Согласно глобальной статистике, рак груди (РМЖ) является одним из наиболее распространенных видов рака среди женщин во всем мире, на него приходится большинство новых случаев рака и связанных с ним смертей, что делает его серьезной проблемой общественного здравоохранения в современном обществе.
Ранняя диагностика РМЖ может значительно улучшить прогноз и шанс на выживание, поскольку может способствовать своевременному клиническому лечению пациентов. Дальнейшая точная классификация доброкачественных опухолей может предотвратить ненужное лечение пациентов. Таким образом, правильный диагноз РМЖ и отнесение пациентов к злокачественным и доброкачественным группам является предметом большого количества исследований. Благодаря своим уникальным преимуществам в обнаружении критических характеристик из сложных наборов данных BC, машинное обучение (ML) широко признано в качестве методологии выбора в классификации шаблонов BC и прогнозном моделировании.
Методы классификации и интеллектуального анализа данных - эффективный способ классификации данных. Особенно в области медицины, где эти методы широко используются в диагностике и анализе для принятия решений.
Рекомендуемые правила скрининга:
Маммография. Маммография - это самый важный скрининговый тест на рак груди. Маммограмма - это рентген груди. Он может обнаружить рак груди за два года до того, как вы или ваш врач почувствуете опухоль.
Женщины в возрасте 40–45 лет и старше, подверженные среднему риску рака груди, должны проходить маммографию один раз в год.
Женщины из группы высокого риска должны проходить маммографию ежегодно вместе с МРТ, начиная с 30 лет.
Некоторые факторы риска рака груди
Ниже приведены некоторые известные факторы риска рака груди. Однако большинство случаев рака груди нельзя связать с какой-либо конкретной причиной. Поговорите со своим врачом о вашем конкретном риске.
Возраст. Вероятность заболевания раком груди увеличивается с возрастом женщины. Почти 80 процентов случаев рака груди обнаруживается у женщин старше 50 лет.
В личном анамнезе был рак груди. Женщина, у которой был рак одной груди, имеет повышенный риск развития рака другой груди.
Семейный анамнез рака груди. Женщина имеет более высокий риск рака груди, если ее мать, сестра или дочь болели раком груди, особенно в молодом возрасте (до 40 лет). Наличие других родственников с раком груди также может повысить риск.
Генетические факторы. Женщины с определенными генетическими мутациями, включая изменения в генах BRCA1 и BRCA2, подвергаются более высокому риску развития рака груди в течение жизни. Другие изменения генов также могут повысить риск рака груди.
Детородный и менструальный анамнез. Чем старше женщина, когда у нее первый ребенок, тем выше риск рака груди. Также более высокому риску подвержены:
- Женщины, у которых первая менструация в раннем возрасте (до 12 лет)
- Женщины, у которых поздно наступает менопауза (после 55 лет)
- Женщины, у которых никогда не было детей
Этап 0 - Подготовка данных
Мы будем использовать репозиторий машинного обучения UCI для набора данных рака груди.
Http://archive.ics.uci.edu/ml/datasets/breast+cancer+wisconsin+%28diagnostic%29
Набор данных, использованный в этой истории, является общедоступным и был создан доктором Уильямом Х. Вольбергом, врачом больницы Университета Висконсина в Мэдисоне, штат Висконсин, США. Для создания набора данных доктор Вольберг использовал образцы жидкости, взятые у пациентов с твердыми образованиями груди, и простую в использовании графическую компьютерную программу под названием Xcyt, которая способна выполнять анализ цитологических характеристик на основе цифрового сканирования. Программа использует алгоритм аппроксимации кривой, чтобы вычислить десять характеристик из каждой ячейки в выборке, затем вычисляет среднее значение, экстремальное значение и стандартную ошибку каждой функции для изображения, возвращая 30 векторов с действительным знаком.
Информация об атрибутах:
- Идентификационный номер 2) Диагноз (M = злокачественный, B = доброкачественный) 3–32)
Для каждого ядра клетки вычисляются десять характеристик с действительным знаком:
- радиус (среднее расстояние от центра до точек по периметру)
- текстура (стандартное отклонение значений шкалы серого)
- периметр
- площадь
- гладкость (локальное изменение длины радиуса)
- компактность (периметр² / площадь - 1,0)
- вогнутость (выраженность вогнутых участков контура)
- вогнутые точки (количество вогнутых участков контура)
- симметрия
- фрактальная размерность («приближение береговой линии» - 1)
Среднее значение, стандартная ошибка и «худшее» или наибольшее (среднее из трех наибольших значений) этих характеристик были вычислены для каждого изображения, в результате чего было получено 30 функций. Например, поле 3 - это средний радиус, поле 13 - радиус SE, поле 23 - худший радиус.
Цели
Этот анализ направлен на наблюдение, какие функции наиболее полезны в прогнозировании злокачественного или доброкачественного рака, и на выявление общих тенденций, которые могут помочь нам в выборе модели и выборе гиперпараметров. Цель состоит в том, чтобы классифицировать, является ли рак груди доброкачественным или злокачественным. Для этого я использовал методы классификации машинного обучения, чтобы они соответствовали функции, которая может предсказывать дискретный класс нового ввода.
Этап 1 - Исследование данных
Мы будем использовать Spyder для работы с этим набором данных. Сначала мы импортируем необходимые библиотеки и импортируем наш набор данных в Spyder:
#importing the libraries import numpy as np import matplotlib.pyplot as plt import pandas as pd #importing our cancer dataset dataset = pd.read_csv(‘cancer.csv') X = dataset.iloc[:, 1:31].values Y = dataset.iloc[:, 31].values
Мы можем проверить набор данных с помощью метода pandas head ().
dataset.head()
Мы можем найти размеры набора данных, используя атрибут «shape» набора данных panda.
print("Cancer data set dimensions : {}".format(dataset.shape)) Cancer data set dimensions : (569, 32)
Мы можем заметить, что набор данных содержит 569 строк и 32 столбца. «Диагноз» - это столбец, который мы собираемся предсказать, в котором указано, является ли рак M = злокачественным или B = доброкачественным. 1 означает, что рак злокачественный, а 0 означает доброкачественный. Мы можем идентифицировать, что из 569 человек 357 помечены как B (доброкачественные), а 212 - как M (злокачественные).
Визуализация данных - обязательный аспект науки о данных. Это помогает понять данные, а также объяснить их другому человеку. Python имеет несколько интересных библиотек визуализации, таких как Matplotlib, Seaborn и т. Д.
В этом руководстве мы будем использовать визуализацию pandas, которая построена поверх matplotlib, чтобы найти распределение данных функций.
Отсутствующие или нулевые точки данных
Мы можем найти любые отсутствующие или нулевые точки данных набора данных (если они есть), используя следующую функцию pandas.
dataset.isnull().sum() dataset.isna().sum()
Этап 2 - Категориальные данные
Категориальные данные - это переменные, которые содержат значения меток, а не числовые значения. Количество возможных значений часто ограничено фиксированным набором.
Например, пользователи обычно описываются по стране, полу, возрастной группе и т. Д.
Мы будем использовать Label Encoder для маркировки категориальных данных. Label Encoder является частью библиотеки SciKit Learn в Python и используется для преобразования категориальных или текстовых данных в числа, которые наши прогнозные модели могут лучше понять.
#Encoding categorical data values from sklearn.preprocessing import LabelEncoder labelencoder_Y = LabelEncoder() Y = labelencoder_Y.fit_transform(Y)
Разделение набора данных
Данные, которые мы используем, обычно делятся на данные обучения и данные тестирования. Обучающий набор содержит известные выходные данные, и модель учится на этих данных, чтобы впоследствии обобщить их на другие данные. У нас есть тестовый набор данных (или подмножество), чтобы проверить предсказание нашей модели на этом подмножестве.
Мы сделаем это с помощью библиотеки SciKit-Learn на Python, используя метод train_test_split.
# Splitting the dataset into the Training set and Test set from sklearn.model_selection import train_test_split X_train, X_test, Y_train, Y_test = train_test_split(X, Y, test_size = 0.25, random_state = 0)
Этап 3 - Масштабирование функций
В большинстве случаев ваш набор данных будет содержать функции, сильно различающиеся по величине, единицам измерения и диапазону. Но поскольку большинство алгоритмов машинного обучения в своих вычислениях используют эвклидово расстояние между двумя точками данных. Нам нужно привести все функции к одному уровню. Этого можно добиться масштабированием. Это означает, что вы преобразуете свои данные, чтобы они соответствовали определенному масштабу, например 0–100 или 0–1.
Мы будем использовать метод StandardScaler из библиотеки SciKit-Learn.
#Feature Scaling from sklearn.preprocessing import StandardScaler sc = StandardScaler() X_train = sc.fit_transform(X_train) X_test = sc.transform(X_test)
Этап 4 - Выбор модели
Это самый захватывающий этап в применении машинного обучения к любому набору данных. Он также известен как выбор алгоритма для прогнозирования наилучших результатов.
Обычно специалисты по обработке данных используют различные типы алгоритмов машинного обучения для больших наборов данных. Но на высоком уровне все эти различные алгоритмы можно разделить на две группы: обучение с учителем и обучение без учителя.
Не теряя много времени, я бы просто дал краткий обзор этих двух типов обучения.
Обучение с учителем: обучение с учителем - это тип системы, в которой предоставляются как входные, так и желаемые выходные данные. Входные и выходные данные помечаются для классификации, чтобы обеспечить основу для обучения для будущей обработки данных. Задачи контролируемого обучения можно разделить на задачи Регрессия и Классификация.
Проблема регрессии возникает, когда выходная переменная представляет собой действительное или непрерывное значение, такое как «зарплата» или «вес».
Проблема классификации возникает, когда выходной переменной является категория, например, фильтрация электронных писем «спам» или «не спам».
Обучение без учителя: обучение без учителя - это алгоритм, использующий информацию, которая не классифицируется и не маркируется, и позволяет алгоритму действовать на основе этой информации без руководства.
В нашем наборе данных у нас есть переменная результата или зависимая переменная, то есть Y, имеющая только два набора значений, либо M (вредоносный), либо B (доброкачественный). Поэтому мы будем использовать алгоритм классификации контролируемого обучения.
У нас есть разные типы алгоритмов классификации в машинном обучении: -
1. Логистическая регрессия
2. Ближайший сосед
3. Машины опорных векторов
4. Ядро SVM
5. Наивный Байес
6. Алгоритм дерева решений
7. Классификация случайных лесов
Приступим к применению алгоритмов:
Мы будем использовать библиотеку sklearn для импорта всех методов алгоритмов классификации.
Мы будем использовать метод выбора модели LogisticRegression, чтобы использовать алгоритм логистической регрессии,
#Using Logistic Regression Algorithm to the Training Set from sklearn.linear_model import LogisticRegression classifier = LogisticRegression(random_state = 0) classifier.fit(X_train, Y_train) #Using KNeighborsClassifier Method of neighbors class to use Nearest Neighbor algorithm from sklearn.neighbors import KNeighborsClassifier classifier = KNeighborsClassifier(n_neighbors = 5, metric = 'minkowski', p = 2) classifier.fit(X_train, Y_train) #Using SVC method of svm class to use Support Vector Machine Algorithm from sklearn.svm import SVC classifier = SVC(kernel = 'linear', random_state = 0) classifier.fit(X_train, Y_train) #Using SVC method of svm class to use Kernel SVM Algorithm from sklearn.svm import SVC classifier = SVC(kernel = 'rbf', random_state = 0) classifier.fit(X_train, Y_train) #Using GaussianNB method of naïve_bayes class to use Naïve Bayes Algorithm from sklearn.naive_bayes import GaussianNB classifier = GaussianNB() classifier.fit(X_train, Y_train) #Using DecisionTreeClassifier of tree class to use Decision Tree Algorithm from sklearn.tree import DecisionTreeClassifier classifier = DecisionTreeClassifier(criterion = 'entropy', random_state = 0) classifier.fit(X_train, Y_train) #Using RandomForestClassifier method of ensemble class to use Random Forest Classification algorithm from sklearn.ensemble import RandomForestClassifier classifier = RandomForestClassifier(n_estimators = 10, criterion = 'entropy', random_state = 0) classifier.fit(X_train, Y_train)
Теперь мы спрогнозируем результаты набора тестов и проверим точность каждой нашей модели:
Y_pred = classifier.predict(X_test)
Для проверки точности нам необходимо импортировать метод confusion_matrix класса метрик. Матрица неточностей - это способ табулирования количества ошибочных классификаций, то есть количества предсказанных классов, которые оказались в неверном классификационном бункере на основе истинных классов.
from sklearn.metrics import confusion_matrix cm = confusion_matrix(Y_test, Y_pred)
Мы будем использовать метод точности классификации, чтобы определить точность наших моделей. Точность классификации - это то, что мы обычно имеем в виду, когда используем термин «точность». Это отношение количества правильных прогнозов к общему количеству входных выборок.
Чтобы проверить правильный прогноз, мы должны проверить объект матрицы путаницы и добавить прогнозируемые результаты по диагонали, которые будут количеством правильных прогнозов, а затем разделить их на общее количество прогнозов.
После применения различных моделей классификации мы получили следующие точности для разных моделей:
1. Логистическая регрессия - 95,8%
2. Ближайший сосед - 95,1%.
3. Машины опорных векторов - 97,2%
4. Ядро SVM - 96,5%
5. Наивный Байес - 91,6%
6. Алгоритм дерева решений - 95,8%
7. Случайная классификация лесов - 98,6%
Итак, наконец, мы построили нашу модель классификации и видим, что алгоритм классификации случайного леса дает наилучшие результаты для нашего набора данных. Ну, это не всегда применимо к каждому набору данных. Чтобы выбрать нашу модель, нам всегда нужно проанализировать наш набор данных, а затем применить нашу модель машинного обучения.
Это базовое приложение модели машинного обучения к любому набору данных. Не стесняйтесь задавать вопросы, если у вас есть сомнения. Напишите письмо по адресу: [email protected] или свяжитесь со мной через связанный.
Вы можете найти код на github и попробовать его на консоли Ipython.
Не забывайте также всегда помнить о проблеме переобучения и недообучения.
Надеюсь, вам понравилась статья ...