www.machinelearningmastery.ru

Машинное обучение, нейронные сети, искусственный интеллект
Header decor

Home

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

Дата публикации Sep 29, 2018

Рис. Модель машинного обучения

Введение

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

Ранняя диагностика БК может значительно улучшить прогноз и шансы на выживание, поскольку это может способствовать своевременному клиническому лечению пациентов. Дальнейшая точная классификация доброкачественных опухолей может предотвратить пациентов, подвергающихся ненужному лечению. Таким образом, правильный диагноз БК и классификация пациентов по злокачественным или доброкачественным группам является предметом многих исследований. Благодаря своим уникальным преимуществам в обнаружении критических признаков из сложных наборов данных BC, машинное обучение (ML) широко признано в качестве методологии выбора в классификации шаблонов BC и прогнозировании.

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

Рекомендуемые правила отбора:

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

Женщины в возрасте 40–45 лет и старшете, кто в среднем рискуют заболеть раком молочной железы, должны делать маммографию раз в год

Женщины с высоким рискомдолжны иметь ежегодные маммограммы вместе с МРТ, начиная с 30 лет.

Некоторые факторы риска рака молочной железы

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

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

Личная история рака молочной железы.Женщина, у которой был рак молочной железы в одной груди, подвержена повышенному риску развития рака в другой ее груди.

Семейный анамнез рака молочной железы.У женщины более высокий риск развития рака молочной железы, если у ее матери, сестры или дочери был рак молочной железы, особенно в молодом возрасте (до 40 лет). Наличие других родственников с раком молочной железы также может повысить риск.

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

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

  • Женщины, у которых менструация впервые в раннем возрасте (до 12 лет)
  • Женщины, у которых менопауза наступает поздно (после 55 лет)
  • Женщины, у которых никогда не было детей

Этап 0 - Подготовка данных

Мы будем использовать UCI Machine Learning Repository для рака молочной железыНабор данных,

http://archive.ics.uci.edu/ml/datasets/breast+cancer+wisconsin+%28diagnostic%29

Набор данных, использованный в этой истории, является общедоступным и был создан доктором Уильямом Х. Вольбергом, врачом из больницы Висконсинского университета в Мэдисоне, штат Висконсин, США. Для создания набора данных доктор Вольберг использовал образцы жидкости, взятые у пациентов с твердой массой молочной железы, и простую в использовании графическую компьютерную программу под названием Xcyt, которая способна выполнять анализ цитологических признаков на основе цифрового сканирования. Программа использует алгоритм подбора кривой для вычисления десяти признаков из каждой ячейки в образце, затем вычисляет среднее значение, экстремальное значение и стандартную ошибку каждого признака для изображения, возвращая вектор с 30 действительными значениями.

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

  1. Идентификационный номер 2) Диагноз (М = злокачественный, В = доброкачественный) 3–32)

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

  1. радиус (среднее расстояние от центра до точек по периметру)
  2. текстура (стандартное отклонение значений оттенков серого)
  3. периметр
  4. площадь
  5. гладкость (локальное изменение длины радиуса)
  6. компактность (периметр² / площадь - 1,0)
  7. вогнутость (выраженность вогнутых участков контура)
  8. вогнутые точки (количество вогнутых частей контура)
  9. симметрия
  10. фрактальная размерность («приближение береговой линии» - 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
Рис. Набор данных и X установлены после импорта набора данных

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

dataset.head()
Рис: 5 лучших данных нашего набора данных

Мы можем найти размеры набора данных, используя атрибут «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, чтобы найти распределение данных по функциям.

Рис. Визуализация набора данных

Отсутствующие или нулевые точки данных

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

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 setfrom 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 Scalingfrom sklearn.preprocessing import StandardScaler
sc = StandardScaler()
X_train = sc.fit_transform(X_train)
X_test = sc.transform(X_test)

Этап 4 - Выбор модели

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

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

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

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

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

классификацияПроблема в том, что выходная переменная представляет собой категорию, такую ​​как фильтрация писем «спам» или «не спам»

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

В нашем наборе данных есть переменная результата или зависимая переменная, т. Е. Y, имеющая только два набора значений: M (Malign) или B (Benign). Поэтому мы будем использовать алгоритм классификации контролируемого обучения.

У нас есть различные типы алгоритмов классификации в машинном обучении:

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

2. Ближайший сосед

3. Машины опорных векторов

4. Ядро СВМ

5. Наивный Байес

6. Алгоритм дерева решений

7 Классификация случайных лесов

Давайте начнем применять алгоритмы:

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

Мы будем использовать метод выбора модели LogisticRegression, чтобы использовать алгоритм логистической регрессии,

#Using Logistic Regression Algorithm to the Training Setfrom 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 algorithmfrom 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. Ядро СВМ - 96,5%

5. Наивный байесовский - 91,6%

6. Алгоритм дерева решений - 95,8%

7. Классификация случайных лесов - 98,6%

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

Это базовое применение модели машинного обучения к любому набору данных. Не стесняйтесь задавать вопросы, если у вас есть какие-либо сомнения. Оставьте электронное письмо по адресу: [email protected] или свяжитесь со мной черезсвязаны в,

Вы можете найти код наGitHubи попробуйте на консоли Ipython.

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

Надеюсь, вам понравилась статья ...

Оригинальная статья

Footer decor

© www.machinelearningmastery.ru | Ссылки на оригиналы и авторов сохранены. | map