Русский
Русский
English
Статистика
Реклама

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

Каждый человек, который когда-либо сталкивался с алгоритмами машинного обучения знает, что даже простые 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 Regressiondef 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 Classifierdef 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 Classifierdef 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_sklfrom daal4py.sklearn import ensemble# Random Forest Classifierparams_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
К списку статей
Опубликовано: 26.10.2020 14:14:03
0

Сейчас читают

Комментариев (0)
Имя
Электронная почта

Python

Алгоритмы

Машинное обучение

Data engineering

Python3

Scikit-learn

Daal4py

Intel daal

Machine learning

Optimization

Категории

Последние комментарии

  • Имя: Макс
    24.08.2022 | 11:28
    Я разраб в IT компании, работаю на арбитражную команду. Мы работаем с приламы и сайтами, при работе замечаются постоянные баны и лаги. Пацаны посоветовали сервис по анализу исходного кода,https://app Подробнее..
  • Имя: 9055410337
    20.08.2022 | 17:41
    поможем пишите в телеграм Подробнее..
  • Имя: sabbat
    17.08.2022 | 20:42
    Охренеть.. это просто шикарная статья, феноменально круто. Большое спасибо за разбор! Надеюсь как-нибудь с тобой связаться для обсуждений чего-либо) Подробнее..
  • Имя: Мария
    09.08.2022 | 14:44
    Добрый день. Если обладаете такой информацией, то подскажите, пожалуйста, где можно найти много-много материала по Yggdrasil и его уязвимостях для написания диплома? Благодарю. Подробнее..
© 2006-2024, personeltest.ru