По данным W.H.O, в 2014 г. 8,5% взрослых в возрасте 18 лет и старше страдали сахарным диабетом. 1,5 миллиона смертей были напрямую связаны с диабетом в 2019 году, и 48% из них произошли среди лиц моложе 70 лет. Диабет стал причиной еще 460 000 случаев смерти почек, а повышенный уровень глюкозы в крови является причиной около 20% смертей от сердечно-сосудистых заболеваний.

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

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

Принимая во внимание цель этой статьи, мы уделим значительное внимание переменным, связанным с диабетом, которые включают в себя различные показатели здоровья, включая Pregnancies, Glucose, blood pressure, SkinThickness, Insulin, B.M.I, DiabetesPedigreeFunction и Age как independent features. Их анализ поможет определить проблемные области и предсказать диабет outcome как dependent features.

Что такое EvalML (AutoML)?

EvalML — это модуль Python с открытым исходным кодом, разработанный Alteryx, который упрощает автоматическое машинное обучение (AutoML) и понимание модели.

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

Варианты использования EvalML

У EvaML есть несколько очень полезных вариантов использования в реальной жизни, например:

  • Проверка данных.
  • Понимание модели.
  • Обнаружение целевых утечек путем передачи информации модели во время обучения.
  • Проверяет столбцы, не относящиеся к моделированию.
  • Классовый дисбаланс.
  • Избыточные функции, такие как столбцы с нулевым значением, постоянные столбцы и т. д.

Как установить EvalML?

Запустите команду ниже, чтобы установить его на свой компьютер. Важно отметить, что вы должны использовать Python 3.8 или выше.

Установить через пип.

pip install evalml

Установите через conda (Anaconda должна быть установлена ​​на вашем компьютере).

conda install -c conda-forge evalml

Нам также необходимо установить graphviz для построения утилит в EvalML.

pip install graphviz

Давайте начнем

Во-первых, давайте импортируем необходимые библиотеки и прочитаем наш набор данных.

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns

Набор данных

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

df = pd.read_csv("../Downloads/base/diabetes_data.csv")
df.head()

Давайте получим больше информации о наборе данных, используя атрибут .shape, чтобы проверить размер фрейма данных, который состоит из 768 Rowsи 9 Columns. Затем .info() функция для просмотра всего описания данных.

df.shape
df.info()

Теперь мы проверяем значения Null и уникальные значения. Эта функция .isnull()указывает, отсутствуют ли какие-либо значения в наборе данных, и возвращает значение Boolean . Цикл for предназначен для проверки количества различных элементов.

#Checking for null values
df.isnull().any()
#Checking for unique values.
unique_values ={}
for coln in df.columns:
  unique_values[coln] = df[coln].value_counts().shape[0]
pd.DataFrame(unique_values, index=["Unique Values"]).T

Функция .describe() дает нам некоторую статистическую информацию о наших числовых столбцах; он работает только с числовыми столбцами, а .T предназначен для переноса фрейма данных.

df.describe().T

Исследовательский анализ данных (EDA)

EDA направлена ​​​​на выявление закономерностей, рассмотрение предположений и проверку гипотез на данных перед формальным моделированием, графическим представлением и визуализацией.

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

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

sns.heatmap(df.corr(),cmap = 'YlOrRd', annot = True)
plt.title("Correlation Of Features")

Исходы диабета подразделяются на две категории на основе количественных значений дискретных бинарных данных: Diabetic обозначается 1при 268 случаях, а not Diabetic обозначается 0 при 500 случаях.

sns.countplot(df['Outcome'], palette = 'YlOrRd')
plt.title("Count of Diabetes Outcome")
plt.show()

Использование EvalML

Теперь давайте найдем лучшую модель и обучим наш набор данных с помощью библиотеки EvalML.

Во-первых, нам нужно импортировать EvalML.

import evalml

Моделирование данных с помощью EvalML

Давайте проверим наш набор данных.

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

df.head()

Разработка функций

Разделим наши данные. Прогнозирование значений будет выполняться с использованием столбца Outcome как y, а обучение модели машинного обучения будет выполняться с использованием столбцов Pregnancies, Glocose, BloodPressure, SkinThickness, Insulin, B.M.I, DiabetesPedigreeFunction и Age как x.

x = df.iloc[:,:-1]
x.head()
y = df.iloc[:,-1]
y.head()

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

Обучить/протестировать набор данных

Библиотека EvalML выполнит за нас все процедуры предварительной обработки и разделения данных. По умолчанию для text_size установлено значение 20%, что означает 20% для Testing и 80% для Training, но мы можем установить text_size по нашему выбору. Хотя EvalML имеет важную функцию под названием detect_problem_type, помогающую определить тип проблемы в наборе данных, функция problem_type используется для указания типа проблемы в наборе данных.

Примечание. EvalML считывает набор данных как DataTable путем преобразования DataFrame в DataTable . Библиотека Woodworks используется для преобразования набора данных .csv (другой проект Alteryx).

X_train, X_test, y_train, y_test = evalml.preprocessing.split_data(x, y,problem_type='binary')

EvalML может решить множество проблем.

.problem_types.ProblemTypes.all_problem_types часто используется для проверки всех типов задач, предоставляемых EvalML.

evalml.problem_types.ProblemTypes.all_problem_types

После того, как EvalML выполнит за нас предварительную обработку, самое время приступить к автоматическому машинному обучению! AutoSearch() выполняет итерацию по нескольким конвейерам, чтобы определить, какая комбинация шагов и оценок создаст конвейер с наибольшей производительностью. Обычно у нас было бы больше шагов предварительной обработки, явно определенных для задачи машинного обучения. Все, начиная от стандартизации и заканчивая горячим кодированием, подлежит обсуждению.

Мы также должны указать x_train, y_train и problem_type. После того, как необходимые аргументы переданы в AutoSearch(), работа выполняется с использованием .search()метода, и Log Loss определяет наилучший конвейер.

from evalml.automl import AutoMLSearch
automl = AutoMLSearch(X_train=X_train, y_train=y_train, problem_type='binary')
automl.search()

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

automl.rankings

Использование встроенного графического инструмента .graph(), чтобы увидеть, какая модель конвейера является оптимальной и какие параметры использовались. Хотя .best_pipeline делает то же самое, что и .graph(), но делает это неструктурированным образом.

best_pipeline = automl.best_pipeline
best_pipeline.graph()

Если мы хотим предсказать scoreв зависимости от какой-либо цели, мы передаем список оценок целей в аргумент objectives.

best_pipeline.score(X_test, y_test, objectives=["auc","f1","Precision","Recall"])

Предположим, мы хотим гипернастроить модель в зависимости от aucscore; все, что нам нужно сделать, это передать некоторые дополнительные аргументы функции AutoMLSearch(), такие как objective, additional_objective, problem_type, max_batches и optimize_thresholds. Хотя по умолчанию цель установлена ​​на Auto, мы можем указать, какую цель мы хотим использовать: auc, f1, precision или recall. вы можете выполнить этот фрагмент кода evalml.objectives.get_all_object_names(), чтобы просмотреть все файлы objective type.

Между тем, после проверки auc score, additional_objectives проверяет переданный аргумент.

automl_auc = AutoMLSearch(X_train=X_train, y_train=y_train,
problem_type='binary',
objective='auc',
additional_objectives=['f1', 'precision'],
max_batches=1,
optimize_thresholds=True)

automl_auc.search()

Если мы посмотрим на их рейтинг, мы увидим, что он улучшился, предоставив нам лучший конвейер.

automl_auc_.rankings

Пусть модель будет предсказана на основе aucscore и .graph(), чтобы увидеть, какая модель конвейера является оптимальной и какие параметры использовались.

best_pipeline_auc.score(X_test, y_test,  objectives=["auc"])

best_pipeline_auc.score(X_test, y_test,  objectives=["auc"])
best_pipeline_auc.graph()

Чтобы проанализировать и увидеть матрицу путаницы и бинарную цель по сравнению с порогом, нам нужно будет импортировать graph_confusion_matrix и graph_binary_objective_vs_threshold из evalml.model_understanding.metrics и evalml.model_understanding.visualization соответственно.

from evalml.model_understanding.metrics import graph_confusion_matrix

y_pred2 = best_pipeline_auc.predict(X_test)
graph_confusion_matrix(y_test, y_pred2) 

from evalml.model_understanding.visualizations import graph_binary_objective_vs_threshold
graph_binary_objective_vs_threshold(best_pipeline_auc, X_test, y_test, "f1", steps=100)

Теперь сохраните модель, выделив ее, и протестируйте модель на тестовых данных, чтобы оценить ее.

import pickle
best_pipeline_auc.save("model.pkl") 
final_model=automl.load('model.pkl')

Наконец, давайте проверим outcome с помощью функций .predict() и predict_proba(): predict_proba() проверяет вероятность outcome, то есть вероятность того, что diabetic равна «1» или not diabetic равна «0».

В то время как .predict() дает нам фактическое предсказание outcome.

final_model.predict_proba(X_test)

final_model.predict(X_test)

Заключение

До сих пор мы рассмотрели все основы EvalML и то, как мы можем прогнозировать с помощью EvalML. Мы также обсудили, как выполнять гипертюнинг. Тем не менее предстоит еще многому научиться и понять. Следует отметить, что это также может быть использовано для анализа временных рядов, регрессии и НЛП.

EvalML позволяет пользователям объединять различные таблицы/источники данных, создавать преобразованные и агрегированные функции, а затем использовать эти функции для поиска лучших моделей машинного обучения при использовании в сочетании с текущими продуктами Alteryx, Featuretools и Compose.

Дополнительные сведения об EvalML см. на следующих сайтах:

Я надеюсь, что вы найдете эту статью полезной!

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

Независимая от редакции, Heartbeat спонсируется и публикуется Comet, платформой MLOps, которая позволяет специалистам по данным и командам машинного обучения отслеживать, сравнивать, объяснять и оптимизировать свои эксперименты. Мы платим нашим авторам и не продаем рекламу.

Если вы хотите внести свой вклад, перейдите к нашему призыву к участию. Вы также можете подписаться на получение нашего еженедельного информационного бюллетеня (Еженедельник глубокого обучения), заглянуть в блог Comet, присоединиться к нам в Slack и подписаться на Comet в Twitter и LinkedIn для получения ресурсов и событий. и многое другое, что поможет вам быстрее создавать более качественные модели машинного обучения.