CatBoost от Яндекса. Разбираемся.

CatBoost

CatBoost — открытая программная библиотека разработанная компанией Яндекс и реализующая уникальный патентованный алгоритм построения моделей машинного обучения, использующий одну из оригинальных схем градиентного бустинга (перевод — улучшение). Основное API для работы с библиотекой реализовано для языка Python, также существует реализация для языка программирования R.

18 июля 2017 года компания Яндекс выложила библиотеку с алгоритмом CatBoost в открытый доступ с открытой лицензией Apache 2.0, которая является продолжением и развитием закрытого проекта Яндекса — Матрикcнет.

Практически любой современный метод на основе градиентного бустинга работает с числовыми признаками. Если у нас в наборе данных присутствуют не только числовые, но и категориальные признаки, то необходимо переводить категориальные признаки в числовые. Это приводит к искажению их сути и потенциальному снижению точности работы модели. Именно поэтому было важно разработать алгоритм, который умеет работать не только с числовыми признаками, но и с категориальными напрямую, закономерности между которыми этот алгоритм будет выявлять самостоятельно, без ручной «помощи». CatBoost — библиотека для градиентного бустинга, главным преимуществом которой является то, что она одинаково хорошо работает «из коробки» как с числовыми признаками, так и с категориальными.

Матрикcнет

Закрытая система машинного обучения Матрикcнет разрабатывалась компанией Яндекс с 2009 года для использования градиентного бустинга во внутренних проектах компании — в первую очередь, для построения формулы ранжирования поисковой выдачи.

CatBoost

Компания «Яндекс» разработала и первая среди российских компаний открыла для всех пользователей систему машинного обучения CatBoost. Она уже используется для обработки данных Большого адронного коллайдера в рамках сотрудничества с Европейской организацией по ядерным исследованиям (ЦЕРН).

CatBoost доступна для 64-разрядных операционных систем Linux, macOS и Windows. В ОС macOSдля ускорения работы используется оригинальный фреймворк Core ML — созданный Apple для методов машинного обучения.

Сравнивая CatBoost с подобными системами машинного обучения компаний Google (TensorFlow) и Microsoft (LightGBM), руководитель разработки систем машинного обучения «Яндекса» Анна Вероника Дорогуш отметила, что Google TensorFlow решает другой класс задач, эффективно анализируя однородные данные — например изображения. А «CatBoost работает с данными разной природы и может быть использован в связке с TensorFlow и другими алгоритмами машинного обучения в зависимости от конкретных задач». У Microsoft LightGBM российская разработка выигрывает по качеству, что демонстрирует таблица тестов с общепринятыми в машинном обучении сравнениями, но пока проигрывает в скорости — что Яндекс обещает исправить.

Применение CatBoost

В первую очередь технология CatBoost используется в интернет-сервисах самой компании «Яндекс» — он применяется для улучшения результатов поисковой системыЯндекс, ранжирования ленты рекомендаций, для расчета прогноза погоды и в других сервисах, где он показал себя лучше предыдущей технологии — «Матрикснета». В своих решениях для промышленности команда Yandex Data Factory также использует эту технологию, в частности она используется для оптимизации расхода сырья и предсказания дефектов при производстве.

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

«Яндекс» пока не планирует зарабатывать на Catboost, он бесплатен для всех пользователей. 

Компании выкладывают свой продукт в открытый доступ для создания сообщества и экосистемы вокруг разработки, авторитета среди разработчиков и популяризации компании. Любое упоминание об использовании Catboost в, например, конкурсах kaggle — плюс к репутации «Яндекса» как технологической компании.

CatBoost был внедрён Европейским центром ядерных исследований (ЦЕРН) при исследованиях на Большом адронном коллайдере (БАК) для объединения информации с различных частей детектора LHCb в максимально точное, агрегированное знание о частице. Используя для комбинирования данных CatBoost, учёным удалось добиться улучшения качественных характеристик финального решения, где результаты CatBoost оказались лучше результатов, получаемых с использованием других методов.

Яндекс.Спеллер использует CatBoost

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

Чтобы обнаруживать ошибки и подбирать замены, Спеллер использует библиотеку машинного обучения CatBoost. Благодаря CatBoost он может расшифровывать искажённые до неузнаваемости слова («адникасниеи» → «одноклассники») и учитывать контекст при поиске опечаток («скучать музыку» → «скачать музыку»). Кроме того, Спеллер не придирается к новым словам, ещё не попавшим в словари.

Что CatBoost значит для SEO?

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

Во-вторых, манипулировать выдачей (читай: продвигать сайт) станет сложнее. CatBoost рассчитан на то, чтобы максимально персонализироваться под интересы конкретного пользователя — а любая персонализация вызывает у веб-мастера приступы головной боли.

«CatBoost» расшифровывается как «категориальный бустинг». Никакокого отношения к котятам название новой технологии не имеет, и в своем блоге Яндекс хорошо дает об этом понять:

Если „Матрикснет“ обучает модели на числовых данных, то CatBoost учитывает и нечисловые, например виды облаков или типы зданий. Раньше такие данные приходилось переводить на язык цифр, что могло изменить их суть и повлиять на точность работы модели. Теперь их можно использовать в первоначальном виде.Благодаря этому CatBoost показывает более высокое качество обучения, чем аналогичные методы для работы с разнородными данными. Его можно применять в самых разных областях — от банковской сферы до промышленности.

Яндекс выложил Кота в открытый доступ на GitHub.

CatBoost пример использования 

CatBoost пример кода

  • Делим данные на тренировочное и тестовое множество
from sklearn.model_selection import train_test_split
X_train, X_validation, y_train, y_validation = train_test_split(X, y, train_size=0.5, random_state=1234)
print(X_train.shape, X_validation.shape)
  • Создаем классификатор
from catboost import CatBoostClassifier
best_model = CatBoostClassifier(
   bagging_temperature=1,
   random_strength=1,
   thread_count=3,
   iterations=500,
   l2_leaf_reg = 4.0, 
   learning_rate = 0.07521709965938336,
   save_snapshot=True,
   snapshot_file='snapshot_best.bkp',
   random_seed=63,
   od_type='Iter',
   od_wait=20,
   custom_loss=['AUC', 'Accuracy'],
   use_best_model=True
)
  • Обучаемся
best_model.fit(
   X_train, y_train,
   cat_features=cat_features,
   eval_set=(X_validation, y_validation),
   logging_level='Silent',
   plot=True
)

  • Вывод числа деревьев в модели
print('Resulting tree count:', best_model.tree_count_)
> Resulting tree count: 217
  • Используем скользящий контроль (англ. cross validation)
from catboost import cv
params = best_model.get_params()
params['iterations'] = 10
params['custom_loss'] = 'AUC'
del params['use_best_model']
pool1 = Pool(X, label=y, cat_features=cat_features)
cv_data = cv(
   params = params,
   pool = pool1,
   fold_count=2,
   inverted=False,
   shuffle=True,
   stratified=False,
   partition_random_seed=0
)
  • Выводим результат
best_value = np.max(cv_data['AUC_test_avg'])
best_iter = np.argmax(cv_data['AUC_test_avg'])
print('Best validation AUC score: {:.2f}±{:.2f} on step {}'.format(
   best_value,
   cv_data['AUC_test_stddev'][best_iter],
   best_iter
))
> Best validation AUC score: 0.91±0.00 on step 9

Больше примеров кода можно найти на сайте библиотеки CatBoost.

 

Об авторе Editor
Самый главный человек на сайте. Если Вы хотите опубликовать свою статью на нашем ресурсе то милости просим на nkosistema@mail.ru

ОСТАВЬТЕ ПЕРВЫЙ КОММЕНТАРИЙ

Добавить комментарий