[Python, Алгоритмы, Машинное обучение, Data Engineering] Расширение возможностей алгоритмов Машинного Обучения с помощью библиотеки daal4py
Автор
Сообщение
news_bot ®
Стаж: 6 лет 9 месяцев
Сообщений: 27286
Каждый человек, который когда-либо сталкивался с алгоритмами машинного обучения знает, что даже простые 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
===========
Похожие новости:
- [Python, JavaScript, Java] Разбор вступительных задач Школы Программистов hh.ru
- [Анализ и проектирование систем, Гаджеты, Data Engineering] Ремонт слухового аппарата. (Почти детективная история)
- [Разработка веб-сайтов, Python, Django] Что происходит, когда вы выполняете manage.py test? (перевод)
- [Высокая производительность, Программирование, Алгоритмы, Промышленное программирование] Быстрая сортировка
- [Поисковые технологии, Алгоритмы, Машинное обучение] Как построить полнотекстовый поиск с помощью нейронных сетей
- [Python, Программирование, Математика, Научно-популярное, Физика] Изучаем распространение радиосигналов в ионосфере с помощью SDR
- [Машинное обучение] ALBERT — облегченный BERT для самообучения языковым представлениям (перевод)
- [Python, Информационная безопасность] Сказ о том, как я токен в Линуксе хранил
- [Python] Мелкая питонячая радость #11: реактивное программирование, парсинг страниц и публикация моделей машинного обучения
- [Искусственный интеллект, Машинное обучение, Управление персоналом] Логика у HR проста — обучать ИИ на «прижившихся»
Теги для поиска: #_python, #_algoritmy (Алгоритмы), #_mashinnoe_obuchenie (Машинное обучение), #_data_engineering, #_python3, #_scikitlearn, #_daal4py, #_intel_daal, #_machine_learning, #_optimization, #_python, #_algoritmy (
Алгоритмы
), #_mashinnoe_obuchenie (
Машинное обучение
), #_data_engineering
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете прикреплять файлы к сообщениям
Вы не можете скачивать файлы
Текущее время: 22-Ноя 23:14
Часовой пояс: UTC + 5
Автор | Сообщение |
---|---|
news_bot ®
Стаж: 6 лет 9 месяцев |
|
Каждый человек, который когда-либо сталкивался с алгоритмами машинного обучения знает, что даже простые 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 =========== Похожие новости:
Алгоритмы ), #_mashinnoe_obuchenie ( Машинное обучение ), #_data_engineering |
|
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете прикреплять файлы к сообщениям
Вы не можете скачивать файлы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете прикреплять файлы к сообщениям
Вы не можете скачивать файлы
Текущее время: 22-Ноя 23:14
Часовой пояс: UTC + 5