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

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

Сбор и подготовка данных

Любой вариант использования машинного обучения начинается со сбора данных. Мы используем открытые и легкодоступные данные из наборов данных Kaggle. Этот конкретный Рак молочной железы был получен из Висконсинского (диагностического) набора данных.

Словарь данных. Набор данных состоит из нескольких переменных медицинских предикторов и одной целевой переменной — Результат. Это проблема классификации. Параметры следующие:

1) ID number

2) Diagnosis (M = malignant, B = benign)

Ten real-valued features are computed for each cell nucleus:

a) radius (mean of distances from center to points on the perimeter)

b) texture (standard deviation of gray-scale values)

c) perimeter

d) area

e) smoothness (local variation in radius lengths)

f) compactness (perimeter^2 / area - 1.0)

g) concavity (severity of concave portions of the contour)

h) concave points (number of concave portions of the contour)

i) symmetry

j) fractal dimension ("coastline approximation" - 1)

Теперь давайте приступим к исследовательскому анализу данных. Здесь мы используем Modin от Intel, который помогает нам получать более быстрые результаты, чем традиционные фреймы данных pandas. Модин работает так же, как и панды, но с дополнительным увеличенным временем выполнения. Мы также импортируем другие часто используемые библиотеки обработки данных — numpy для вычислений n-мерных массивов, для визуализации — matplotlib и seaborn.

# importing libraries 

import modin.pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
%matplotlib inline
import warnings
warnings.filterwarnings('ignore')
import time

Пришло время использовать еще один блестящий продукт Intel для повышения производительности — scikit-learn-intelex. Это легко и просто использовать с двухстрочным кодом и не требует внесения изменений в существующий код. Следующий код должен исправить и обеспечить ускоренную мощность времени выполнения. После включения патча, как обычно, импортируется библиотека sklearn.

from sklearnex import patch_sklearn
patch_sklearn()

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

# Reading data
df = pd.read_csv("../input/breast-cancer-wisconsin-data/data.csv")
%time
df.info()
%time

Проверка целевого распределения столбцов

malignant_count = len(df.loc[df['diagnosis'] == 'M'])
benign_count = len(df.loc[df['diagnosis'] == 'B'])
import seaborn as sns
df.hist(figsize = (30,30))

Работа над очисткой данных и предварительной обработкой

# removing unknown column
df.drop('Unnamed: 32',axis = 1, inplace = True)

Построение графика корреляции

%matplotlib inline
corrmat = df.corr()
top_corr_features = corrmat.index
plt.figure(figsize=(20,20))
#plot heat map
g=sns.heatmap(df1[top_corr_features].corr(),annot=True,cmap="RdYlGn")

# separating feature cols & target
feature_columns = df1.loc[:, df1.columns != 'diagnosis']
target_column = df1['diagnosis']

feature_columns.shape,target_column.shape 

X = feature_columns
y = target_column

Разложение больших данных с использованием анализа основных компонентов и масштабирования с помощью StandardScalar

from sklearn.decomposition import PCA
from sklearn.preprocessing import StandardScaler
from sklearn.model_selection import train_test_split

scaler = StandardScaler()
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)

X_train = scaler.fit_transform(X_train)
X_test = scaler.transform(X_test)

pca = PCA(n_components=3)
scaler = StandardScaler()

X_train = pca.fit_transform(X_train)
X_test = pca.transform(X_test)

X_train = scaler.fit_transform(X_train)
X_test = scaler.transform(X_test)
plt.figure(figsize=(8,6))
plt.scatter(X_train[:,0],X_train[:,1],c=y_train,cmap='plasma')
plt.xlabel('First principal component')
plt.ylabel('Second Principal Component')

Обучение модели с помощью SVC

# model fitting with support vector classifier
from sklearn.svm import SVC
model = SVC(kernel='poly', degree=2, gamma='auto')
model.fit(X_train, y_train)


predict_train_data = model.predict(X_test)
from sklearn import metrics
print("Accuracy Using OneAPI= {0:.3f}".format(metrics.accuracy_score(y_test, predict_train_data)))
%time
Accuracy Using OneAPI= 0.789
CPU times: user 4 µs, sys: 0 ns, total: 4 µs
Wall time: 9.06 µs

SVC не дал хороших результатов

Попытка с RandomForestClassifier

from sklearn.ensemble import RandomForestClassifier
random_forest_model = RandomForestClassifier(random_state=10)
model = random_forest_model.fit(X_train, y_train)


predict_train_data = model.predict(X_test)
from sklearn import metrics
print("Accuracy Using OneAPI = {0:.3f}".format(metrics.accuracy_score(y_test, predict_train_data)))

from sklearn.metrics import confusion_matrix
cm = confusion_matrix(y_test, predict_train_data)
print(cm)
%time
Accuracy Using OneAPI = 0.930
CPU times: user 0 ns, sys: 4 µs, total: 4 µs
Wall time: 8.82 µs

CPU times: user 3 µs, sys: 0 ns, total: 3 µs
Wall time: 8.58 µs

Метрики оценки

Как показывает оценка, модель работает исключительно хорошо с помощью Intel One API AI Analytics Toolkit and Libraries. Мы также отображаем результаты других доступных метрик, чтобы исключить точность, отзыв, f1-оценку и матрицу путаницы.

Сохранение модели с помощью joblib в формате pkl для последующего использования для прогнозирования.

# saving model 
import joblib
joblib.dump(model, "./RF_breast_cancer_OneAPI.joblib")
%time
from sklearnex import unpatch_sklearn
unpatch_sklearn()

Заключение

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