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.

 

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

Оставьте первый комментарий

Отправить ответ

Ваш e-mail не будет опубликован.




16 + 2 =

Нажимая кнопку "Отправить комментарий" Вы даёте свое согласие на обработку введенной персональной информации в соответствии с Федеральным Законом №152-ФЗ от 27.07.2006 "О персональных данных"