Расширение возможностей алгоритмов Машинного Обучения с помощью библиотеки daal4py

МЕНЮ


Искусственный интеллект
Поиск
Регистрация на сайте
Помощь проекту

ТЕМЫ


Новости ИИРазработка ИИВнедрение ИИРабота разума и сознаниеМодель мозгаРобототехника, БПЛАТрансгуманизмОбработка текстаТеория эволюцииДополненная реальностьЖелезоКиберугрозыНаучный мирИТ индустрияРазработка ПОТеория информацииМатематикаЦифровая экономика

Авторизация



RSS


RSS новости


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

Для начала обучим обе реализации алгоритмов на одинаковых параметрах и сравним их:

Функции обучения и вывода лучших классификаторов:

from sklearn.model_selection import GridSearchCV  # Best Logistic Regression def get_best_clf_lr(name, clf, params):     start = timer()     grid_clf = GridSearchCV(estimator=clf, param_grid=params, n_jobs=-1)     grid_clf.fit(X_train, y_train)     end = timer()     learning_time = end - start     print(learning_time)      return name, learning_time, grid_clf.best_estimator_  # Best Random Forest Classifier def get_best_clf_rf(name, clf, params):     start = timer()     grid_clf = GridSearchCV(estimator=clf, param_grid=params, n_jobs=-1, cv=5)     grid_clf.fit(X_train, y_train)     end = timer()     learning_time = end - start     print(learning_time)      return name, learning_time, grid_clf.best_estimator_  # Best K Neighbors Classifier def get_best_clf_knn(name, clf, params):     start = timer()     grid_clf = GridSearchCV(estimator=clf, param_grid=params, n_jobs=-1)     grid_clf.fit(X_train, y_train)     end = timer()     learning_time = end - start     print(learning_time)      return name, learning_time, grid_clf.best_estimator_ 

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

from sklearn.ensemble import RandomForestClassifier as RandomForestClassifier_skl from daal4py.sklearn import ensemble  # Random Forest Classifier  params_RF = {     'n_estimators': [1, 3, 5, 7, 10],     'max_depth': [3, 5, 7, 9, 11, 13, 15],     'min_samples_leaf': [2, 4, 6, 8],     'min_samples_split': [2, 4, 6, 8, 10] }  name, lrn_time, model = get_best_clf_lr("RF_sklearn", RandomForestClassifier_skl(random_state = 42), params_RF) learn_data_skl.append([name, model, lrn_time])  name, lrn_time, model = get_best_clf_lr("RF_daal4py", ensemble.RandomForestClassifier(random_state = 42), params_RF) learn_data_daal.append([name, model, lrn_time]) 

Очевидным является прирост скорости обучения моделей. Особенно ярко он выражен на модели KNeigborsClassifier, где скорость обучения модели увеличилась в 45раз. Это невероятный показатель, позволяющий нагружать алгоритм, увеличением количества итераций, перебираемых гиперпараметров или ещё чем-нибудь другим. На остальных алгоритмах ускорение составило 1.5 — 2 раза.

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

Последующее объединение моделей в ensamble и определяло финальный вид модели.
В качестве метрики качества использовали ROC_AUC score.

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

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

GitHub Dataset Daal4py


Источник: habr.com

Комментарии: