ML | Классификация раковых клеток с помощью Scikit-learn

Опубликовано: 25 Июля, 2021

Машинное обучение - это подраздел искусственного интеллекта, который дает системам возможность учиться сами, не будучи явно запрограммированными на это. Машинное обучение можно использовать для решения многих реальных проблем.
Давайте классифицируем раковые клетки на основе их характеристик и определяем, являются ли они «злокачественными» или «доброкачественными». Мы будем использовать scikit-learn для задач машинного обучения. Scikit-learn - это библиотека машинного обучения, интеллектуального анализа и анализа данных с открытым исходным кодом для языка программирования Python.

Набор данных:
Scikit-learn поставляется с несколькими небольшими стандартными наборами данных, которые не требуют загрузки какого-либо файла с любого внешнего веб-сайта. Набор данных, который мы будем использовать для нашей задачи машинного обучения, - это набор данных (диагностический) по раку груди, штат Висконсин. Набор данных включает несколько данных о опухолях рака молочной железы вместе с классификационными метками, а именно злокачественные или доброкачественные. Его можно загрузить с помощью следующей функции:

 load_breast_cancer ([return_X_y])

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

Установка необходимых модулей:
Для этого проекта машинного обучения нам понадобится модуль Python Scikit-learn. Если он не установлен на вашем компьютере, загрузите и установите его, выполнив следующую команду в командной строке:

 pip install scikit-learn

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

pip install jupyter

Пошаговая реализация классификации с помощью Scikit-learn:

Шаг №1: Импорт необходимого модуля и набора данных.

Нам понадобится модуль Scikit-learn и набор данных по раку груди висконсин (диагностический).




# importing the Python module
import sklearn
# importing the dataset
from sklearn.datasets import load_breast_cancer


Шаг № 2: Загрузка набора данных в переменную.




# loading the dataset
data = load_breast_cancer()

Важными атрибутами, которые мы должны учитывать в этом наборе данных, являются 'target-names' (значение меток), 'target' (классификационные метки), 'feature_names' (значение функций) и 'data' (данные учить).

Шаг № 3: Организуйте данные и изучите их.
Чтобы лучше понять, что содержит набор данных и как мы можем использовать данные для обучения нашей модели, давайте сначала организуем данные, а затем посмотрим, что они содержат, с помощью функции print() .




# Organize our data
label_names = data[ 'target_names' ]
labels = data[ 'target' ]
feature_names = data[ 'feature_names' ]
features = data[ 'data' ]

Затем, используя функцию print () , давайте исследуем данные.




# looking at the data
print (label_names)

Выход:

 ['злокачественный' доброкачественный]

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




print(labels)

Выход:

[0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
 1 0 0 0 0 0 0 0 0 1 0 1 1 1 1 1 0 0 1 0 0 1 1 1 1 0 1 0 0 1 1 1 1 0 1 0 0
 1 0 1 0 0 1 1 1 0 0 1 0 0 0 1 1 1 0 1 1 0 0 1 1 1 0 0 1 1 1 1 0 1 1 0 1 1
 1 1 1 1 1 1 0 0 0 1 0 0 1 1 1 0 0 1 0 1 0 0 1 0 0 1 1 0 1 1 0 1 1 1 1 0 1
 1 1 1 1 1 1 1 1 0 1 1 1 1 0 0 1 0 1 1 0 0 1 1 0 0 1 1 1 1 0 1 1 0 0 0 1 0
 1 0 1 1 1 0 1 1 0 0 1 0 0 0 0 1 0 0 0 1 0 1 0 1 1 0 1 0 0 0 0 1 1 0 0 1 1
 1 0 1 1 1 1 1 0 0 1 1 0 1 1 0 0 1 0 1 1 1 1 0 1 1 1 1 1 0 1 0 0 0 0 0 0 0
 0 0 0 0 0 0 0 1 1 1 1 1 1 0 1 0 1 1 0 1 1 0 1 0 0 1 1 1 1 1 1 1 1 1 1 1 1
 1 0 1 1 0 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 1 0 1 0 1 1 1 1 0 0 0 1 1
 1 1 0 1 0 1 0 1 1 1 0 1 1 1 1 1 1 1 0 0 0 1 1 1 1 1 1 1 1 1 1 1 0 0 1 0 0
 0 1 0 0 1 1 1 1 1 0 1 1 1 1 1 0 1 1 1 0 1 1 0 0 1 1 1 1 1 1 0 1 1 1 1 1 1
 1 0 1 1 1 1 1 0 1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 0 1 0 0 1 0 1 1 1 1 1 0 1 1
 0 1 0 1 1 0 1 0 1 1 1 1 1 1 1 1 0 0 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 1 1 0 1
 1 1 1 1 1 1 0 1 0 1 1 0 1 1 1 1 1 0 0 1 0 1 0 1 1 1 1 1 0 1 1 0 1 0 1 0 0
 1 1 1 0 1 1 1 1 1 1 1 1 1 1 1 0 1 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
 1 1 1 1 1 1 1 0 0 0 0 0 0 1]

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




print (feature_names)

Выход:

['средний радиус' 'средняя текстура' 'средний периметр' 'средняя площадь'
 'средняя гладкость' означает компактность 'означает вогнутость'
 'средние вогнутые точки' 'средняя симметрия' 'средняя фрактальная размерность'
 'ошибка радиуса' ошибка текстуры 'ошибка периметра' ошибка области '
 'ошибка гладкости' ошибка компактности 'ошибка вогнутости'
 'ошибка вогнутых точек' ошибка симметрии 'ошибка фрактальной размерности'
 'худший радиус' худшая текстура 'худший периметр' худшая область '
 'худшая гладкость' худшая компактность 'худшая вогнутость'
 "худшие вогнутые точки" худшая симметрия "худшее фрактальное измерение"]

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




print (features)

Выход:

[[1.799e + 01 1.038e + 01 1.228e + 02 ... 2.654e-01 4.601e-01 1.189e-01]
 [2.057e + 01 1.777e + 01 1.329e + 02 ... 1.860e-01 2.750e-01 8.902e-02]
 [1.969e + 01 2.125e + 01 1.300e + 02 ... 2.430e-01 3.613e-01 8.758e-02]
 ...
 [1.660e + 01 2.808e + 01 1.083e + 02 ... 1.418e-01 2.218e-01 7.820e-02]
 [2.060e + 01 2.933e + 01 1.401e + 02 ... 2.650e-01 4.087e-01 1.240e-01]
 [7.760e + 00 2.454e + 01 4.792e + 01 ... 0.000e + 00 2.871e-01 7.039e-02]]

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

Итак, исходя из приведенных выше данных, мы можем сделать вывод, что первая опухоль является злокачественной и имеет средний радиус 1,79900000e + 01.

Шаг № 4: Организация данных в наборы.

Для проверки точности нашего классификатора мы должны протестировать модель на невидимых данных. Итак, перед построением модели мы разделим наши данные на два набора: обучающий набор и тестовый набор. Мы будем использовать обучающий набор для обучения и оценки модели, а затем использовать обученную модель, чтобы делать прогнозы на невидимом тестовом наборе.
В модуле sklearn есть встроенная функция train_test_split () , которая автоматически разделяет данные на эти наборы. Мы будем использовать эту функцию для разделения данных на два.




# importing the function
from sklearn.model_selection import train_test_split
# splitting the data
train, test, train_labels, test_labels = train_test_split(features, labels,
test_size = 0.33 , random_state = 42 )

Функция train_test_split() случайным образом разбивает данные с помощью параметра test_size . Что мы здесь сделали, так это то, что мы разделили 33% исходных данных на тестовые данные (test). Остальные данные (поезд) - это данные обучения. Кроме того, у нас есть соответствующие метки как для переменных поезда, так и для переменных теста, то есть train_labels и test_labels.

Чтобы узнать больше о том, как использовать train_test_split() , вы можете обратиться к официальной документации.

Шаг № 5: Построение модели.

Есть много моделей машинного обучения на выбор. У всех есть свои достоинства и недостатки. Для этой модели мы будем использовать алгоритм Наивного Байеса, который обычно хорошо работает в задачах двоичной классификации. Во-первых, импортируйте GaussianNB и инициализируйте его с помощью функции GaussianNB() . Затем обучите модель, подогнав ее к данным в наборе данных с помощью метода fit()




# importing the module of the machine learning model
from sklearn.naive_bayes import GaussianNB
# initializing the classifier
gnb = GaussianNB()
# training the classifier
model = gnb.fit(train, train_labels)

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




# making the predictions
predictions = gnb.predict(test)
# printing the predictions
print (predictions)

Выход:

[1 0 0 1 1 0 0 0 1 1 1 0 1 0 1 0 1 1 1 0 1 1 0 1 1 1 1 1 1 0 1 1 1 1 1 1 0
 1 0 1 1 0 1 1 1 1 1 1 1 1 0 0 1 1 1 1 1 0 0 1 1 0 0 1 1 1 0 0 1 1 0 0 1 0
 1 1 1 1 1 1 0 1 1 0 0 0 0 0 1 1 1 1 1 1 1 1 0 0 1 0 0 1 0 0 1 1 1 0 1 1 0
 1 1 0 0 0 1 1 1 0 0 1 1 0 1 0 0 1 1 0 0 0 1 1 1 0 1 1 0 0 1 0 1 1 0 1 0 0
 1 1 1 1 1 1 1 0 0 1 1 1 1 1 1 1 1 1 1 1 0 0 1 1 0 1 1 0 1 1 1 1 1 1 0 0
 0 1 1]

Из выходных данных выше мы видим, что predict() вернула массив из нулей и единиц. Эти значения представляют собой прогнозируемые значения тестового набора для класса опухоли (злокачественная или доброкачественная).

Шаг № 6: Оценка точности обученной модели.

Поскольку теперь мы предсказали значения, мы можем оценить точность нашей модели, сравнив ее с фактическими метками тестового набора, то есть сравнив предсказания с test_labels. Для этого мы будем использовать встроенную функцию precision_score () в модуле sklearn.




# importing the accuracy measuring function
from sklearn.metrics import accuracy_score
# evaluating the accuracy
print (accuracy_score(test_labels, predictions))

Выход:

 0,9414893617021277

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