Каждый человек, который когда-либо сталкивался с алгоритмами машинного обучения знает, что даже простые ML модели на большом объёме данных могут обучаться непозволительно долго. Задачи восстановления зависимостей, классификации объектов оборачиваются минутами, а то и часами обучения сети.  Данная статья продемонстрирует, как на примере алгоритмов, взятых из библиотеки Scikit-Learn, можно расширить возможности обучения нейронных сетей, путём использования ускоренных вычислений библиотеки daal4py. Scikit-Learn предоставляет серьёзный набор инструментов для решения Machine Learning задач. Классификация, Регрессия, Кластеризация… sklearn обладает алгоритмами для всего этого. С некоторыми из этих алгоритмов мы и поработаем. В 2019 году на базе Intel Data Analytics Acceleration Library (DAAL) формируется библиотека daal4py. Intel презентовало решение, напрямую относящееся к predictive data analysis, имеющее существенное преимущество среди аналогов за счёт производительности и простоты использования. Технология daal4py позволяет увеличить производительность
классических методов sklearn за счёт ускоренных вычислений(в частности матричных преобразований), базирующихся на Intel DAAL. Рассмотрим методы daal4py.sklearn на тестовой задаче. Датасет, опубликованный на kaggle: Cardiovascular Disease dataset
Задачей поставлено создание модели, способной сделать предсказание относительно наличия или отсутствия сердечно-сосудистых заболеваний у человека. Данная задача — задача классификации, поэтому было решено использовать ensamble из моделей LogisticRegression, RandonForestClassifier и KNeighborsClassifier, пропущенные через инструмент подгона параметров GridSearchCV, реализации Scikit-Learn. Для начала обучим обе реализации алгоритмов на одинаковых параметрах и сравним их: Функции обучения и вывода лучших классификаторов: Данные функции принимают на вход название, классификатор и перебираемые параметры обучения, а на выходе возвращают название, время обучения модели и лучшую обученную модель. Относительно каждой модели распишем передаваемые параметры и запустим обучение для sklearn и daal4py версий алгоритмов. Представлю данный процесс на примере RandomForestClassifier алгоритма: Очевидным является прирост скорости обучения моделей. Особенно ярко он выражен на модели KNeigborsClassifier, где скорость обучения модели увеличилась в 45раз. Это невероятный показатель, позволяющий нагружать алгоритм, увеличением количества итераций, перебираемых гиперпараметров или ещё чем-нибудь другим. На остальных алгоритмах ускорение составило 1.5 — 2 раза. Полученный выигрыш во времени, был использован для увеличением количества перебираемых параметров RandomForestClassifier модели, а также увеличением выборки на 34% без временных потерь. Последующее объединение моделей в ensamble и определяло финальный вид модели.
В качестве метрики качества использовали ROC_AUC score. Учитывая тот факт, что обучение происходило без разного рода feature engineering, корреляции между данными практически не наблюдалось, то получившийся показатель roc_auc_score в 0.74 на результирующей модели можно считать закономерным. Посредством библиотеки daal4py, использующей быстрые матричные преобразования, удалось ускорить модели машинного обучения и расширить возможности обучения без потери времени. На данной, тестовой задаче удалось увеличить количество перебираемых параметров, а также увеличить обучающую выборку на 34%, без изменения времени выполнения. GitHub
Dataset
Daal4py Data Scientist