Введение

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

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

Прежде чем мы начнем, нам нужно импортировать библиотеки, которые мы будем использовать в этом руководстве. Эти библиотеки включают pandas для обработки данных, scikit-learn для построения и оценки нашей модели машинного обучения и matplotlib для визуализации наших результатов. Мы также импортируем seaborn для создания более визуально привлекательных графиков и pickle для сохранения обученной модели.

import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LogisticRegression
from sklearn.metrics import confusion_matrix
import seaborn as sns
import matplotlib.pyplot as plt
import pickle

Шаг 2. Загрузите и изучите данные

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

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

# Load the data into a pandas DataFrame
data = pd.read_csv("data.csv")

# Print information about the data
print(data.info())

# Print summary statistics for the numeric columns
print(data.describe())

Шаг 3: Очистите и предварительно обработайте данные

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

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

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

# Check for missing values
print(data.isnull().sum())

# Drop rows with missing values
data = data.dropna()

# Convert non-numeric columns to numeric form
data = pd.get_dummies(data, columns=["menopause"])

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

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

# Split the data into training and testing sets
X_train, X_test, y_train, y_test = train_test_split(data.drop(["Class"], 
axis=1), data["Class"], test_size=0.3, random_state=0)

Шаг 4. Создайте и обучите модель

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

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

Чтобы построить и обучить нашу модель логистической регрессии, нам сначала нужно создать экземпляр класса LogisticRegression из библиотеки scikit-learn. Затем мы можем использовать метод fit() для обучения модели на обучающих данных и метках.

# Create an instance of the LogisticRegression class
model = LogisticRegression()

# Train the model on the training data and labels
model.fit(X_train, y_train)

Шаг 5: Оцените модель

После обучения модели нам необходимо оценить ее производительность на данных тестирования. Это даст нам представление о том, насколько хорошо модель обобщает невидимые данные и является ли она переоснащением (т. е. хорошо работает на данных обучения, но плохо на данных тестирования).

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

# Use the trained model to make predictions on the testing data
y_pred = model.predict(X_test)

# Create a confusion matrix
cm = confusion_matrix(y_test, y_pred)

# Print the confusion matrix
print(cm)

Шаг 6. Визуализируйте результаты

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

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

# Create a heatmap of the confusion matrix
sns.heatmap(cm, annot=True)

# Show the heatmap
plt.show()

Шаг 7: Сохраните модель

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

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

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

# Save the trained model
with open("model.pkl", "wb") as f:
    pickle.dump(model, f)

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

# Load the trained model
with open("model.pkl", "rb") as f:
    model = pickle.load(f)

# Use the model to make predictions on new data
y_pred = model.predict(new_data)

Заключение

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

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

Будьте в курсе последних новостей и обновлений в сфере творческого ИИ — следите за публикацией Генеративный ИИ.