В этой статье мы расскажем о подходе к нашему решению в области здравоохранения для недостаточно обслуживаемых сообществ. Эта статья продолжает эту серию, в которой мы рассмотрим этапы создания наших прогнозов с использованием машинного обучения с использованием набора инструментов аналитики 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, приведена ниже.