Сегодня Яндекс выложил в open source собственную библиотеку CatBoost, разработанную с учетом многолетнего опыта компании в области машинного обучения. С ее помощью можно эффективно обучать модели на разнородных данных, в том числе таких, которые трудно представить в виде чисел (например, виды облаков или категории товаров). Исходный код, документация, бенчмарки и необходимые инструменты уже опубликованы на GitHub под лицензией Apache 2.0.



CatBoost – это новый метод машинного обучения, основанный на градиентном бустинге. Он внедряется в Яндексе для решения задач ранжирования, предсказания и построения рекомендаций. Более того, он уже применяется в рамках сотрудничества с Европейской организацией по ядерным исследованиям (CERN) и промышленными клиентами Yandex Data Factory. Так чем же CatBoost отличается от других открытых аналогов? Почему бустинг, а не метод нейронных сетей? Как эта технология связана с уже известным Матрикснетом? И причем здесь котики? Сегодня мы ответим на все эти вопросы.

Термин «машинное обучение» появился еще в 50-х годах. Этот термин обозначает попытку научить компьютер решать задачи, которые легко даются человеку, но формализовать путь их решения сложно. В результате машинного обучения компьютер может демонстрировать поведение, которое в него не было явно заложено. В современном мире мы сталкиваемся с плодами машинного обучения ежедневно по многу раз, многие из нас сами того не подозревая. Оно используется для построения лент в социальных сетях, списков «похожих товаров» в интернет-магазинах, при выдаче кредитов в банках и определении стоимости страховки. На технологиях машинного обучения работает поиск лиц на фотографиях или многочисленные фотофильтры. Для последних, кстати, обычно используются нейронные сети, и о них пишут так часто, что может сложиться ошибочное мнение, будто бы это «серебряная пуля» для решения задач любой сложности. Но это не так.

Нейросети или градиентный бустинг

На самом деле, машинное обучение очень разное: существует большое количество разных методов, и нейросети – лишь один из них. Иллюстрацией этого являются результаты соревнований на платформе Kaggle, где на разных соревнованиях побеждают разные методы, причем на очень многих побеждает градиентный бустинг.

Нейросети прекрасно решают определенные задачи – например, те, где нужно работать с однородными данными. Из однородных данных состоят, например, изображения, звук или текст. В Яндексе они помогают нам лучше понимать поисковые запросы, ищут похожие картинки в интернете, распознают ваш голос в Навигаторе и многое другое. Но это далеко не все задачи для машинного обучения. Существует целый пласт серьезных вызовов, которые не могут быть решены только нейросетями – им нужен градиентный бустинг. Этот метод незаменим там, где много данных, а их структура неоднородна.

Например, если вам нужен точный прогноз погоды, где учитывается огромное количество факторов (температура, влажность, данные с радаров, наблюдения пользователей и многие другие). Или если вам нужно качественно ранжировать поисковую выдачу – именно это в свое время и подтолкнула Яндекс к разработке собственного метода машинного обучения.

Матрикснет

Первые поисковые системы были не такими сложными, как сейчас. Фактически сначала был просто поиск слов – сайтов было так мало, что особой конкуренции между ними не было. Потом страниц стало больше, их стало нужно ранжировать. Начали учитываться разные усложнения — частота слов, tf-idf. Затем страниц стало слишком много на любую тему, произошёл первый важный прорыв — начали учитывать ссылки.

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

Лет десять назад человеческого разума перестало хватать на то, чтобы придумывать, как ранжировать документы. Вы, наверное, замечали, что количество найденного почти по любому запросу огромно: сотни тысяч, часто — миллионы результатов. Большая часть из них неинтересные, бесполезные, лишь случайно упоминают слова запроса или вообще являются спамом. Для ответа на ваш запрос нужно мгновенно отобрать из всех найденных результатов десятку лучших. Написать программу, которая делает это с приемлемым качеством, стало не под силу программисту-человеку. Произошёл следующий переход — поисковики стали активно использовать машинное обучение.

Яндекс еще в 2009 году внедрили собственный метод Матрикснет, основанный на градиентном бустинге. Можно сказать, что ранжированию помогает коллективный разум пользователей и «мудрость толпы». Информация о сайтах и поведении людей преобразуется во множество факторов, каждый из которых используется Матрикснетом для построения формулы ранжирования. Фактически, формулу ранжирования теперь пишет машина. Кстати, в качестве отдельных факторов мы в том числе используем результаты работы нейронных сетей (к примеру, так работает алгоритм Палех, о котором рассказывали в прошлом году).

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

Ещё одна важная особенность Матрикснета — в том, что формулу ранжирования можно настраивать отдельно для достаточно узких классов запросов. Например, улучшить качество поиска только по запросам про музыку. При этом ранжирование по остальным классам запросов не ухудшится.

Именно Матрикснет и его достоинства легли в основу CatBoost. Но зачем нам вообще понадобилось изобретать что-то новое?

Категориальный бустинг

Практически любой современный метод на основе градиентного бустинга работает с числами. Даже если у вас на входе жанры музыки, типы облаков или цвета, то эти данные все равно нужно описать на языке цифр. Это приводит к искажению их сути и потенциальному снижению точности работы модели.

Продемонстрируем это на примитивном примере с каталогом товаров в магазине. Товары мало связаны между собой, и не существует такой закономерности между ними, которая позволила бы упорядочить их и присвоить осмысленный номер каждому продукту. Поэтому в этой ситуации каждому товару просто присваивают порядковый id (к примеру, в соответствии с программой учета в магазине). Порядок этих чисел ничего не значит, однако алгоритм будет этот порядок использовать и делать из него ложные выводы.

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

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



Кстати, название технологии происходит как раз от Categorical Boosting (категориальный бустинг). И ни один кот при разработке не пострадал.

Бенчмарки

Можно долго говорить о теоретических отличиях библиотеки, но лучше один раз показать на практике. Для наглядности мы сравнили работу библиотеки CatBoost с открытыми аналогами XGBoost, LightGBM и H20 на наборе публичных датасетов. И вот результаты (чем меньше, тем лучше):



Не хотим быть голословными, поэтому вместе с библиотекой в open source выложены описание процесса сравнения, код для запуска сравнения методов и контейнер с использованными версиями всех библиотек. Любой пользователь может повторить эксперимент у себя или на своих данных.

CatBoost на практике

Новый метод уже протестировали на сервисах Яндекса. Он применялся для улучшения результатов поиска, ранжирования ленты рекомендаций Яндекс.Дзен и для расчета прогноза погоды в технологии Метеум — и во всех случаях показал себя лучше Матрикснета. В дальнейшем CatBoost будет работать и на других сервисах. Не будем здесь останавливаться – лучше сразу расскажем про Большой адронный коллайдер (БАК).

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

Как начать использовать CatBoost?

Для работы с CatBoost достаточно установить его на свой компьютер. Библиотека поддерживает операционные системы Linux, Windows и macOS и доступна на языках программирования Python и R. Яндекс разработал также программу визуализации CatBoost Viewer, которая позволяет следить за процессом обучения на графиках.



Более подробно все описано в нашей документации.

CatBoost — первая российская технология машинного обучения такого масштаба, которая стала доступна в open sourсe. Выкладывая библиотеку в открытый доступ, мы хотим внести свой вклад в развитие машинного обучения. Надеемся, что сообщество специалистов оценит технологию и примет участие в ее развитии.
Поделиться с друзьями
-->

Комментарии (123)


  1. daocrawler
    18.07.2017 12:42
    +36


  1. kdenisk
    18.07.2017 12:50
    +19

    Лучи добра Яндексу за открытые технологии!


  1. quantum
    18.07.2017 13:06
    +2

    del


  1. sborisov
    18.07.2017 13:25

    А данная библиотека подходит для обучения моделей анализа сетевого трафика?
    Интересно как машинное обучение в этой области себя проявляет.


    1. wlbm_onizuka
      18.07.2017 13:52
      +3

      Вы можете проверить :)


      1. sborisov
        18.07.2017 14:15

        Да, есть одна идея, основанная на машинном обучении, если руки дойдут, опубликую обзор.


  1. Crankoman
    18.07.2017 13:47
    -52

    Заголовок выглядит как "Цивилизация Русские открыли Гончарное дело"


  1. justm57
    18.07.2017 13:47
    +2

    Кстати, а как он по скорости обучения. Конечно очень хорошо, что на отдельных задач он превосходит lgb и xgb, но если взять lgb и xgb — многим нравится как раз первый несмотря на чуть худший score, ввиду на порядок быстрой обучаемости


    1. BarakAdama
      18.07.2017 13:54
      +3

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


      1. chupvl
        18.07.2017 14:03
        +1

        Интересно узнать как вы оптимизировали подбор параметров. Есть ли статья на эту тему?


        1. BarakAdama
          18.07.2017 16:39
          +5

          Устойчивость к подбору параметров – это свойство, характерное как для CatBoost, так и для Матрикснета, на основе которого этот алгоритм был разработан. Такое свойство получилось благодаря тому, что при развитии алгоритма мы экспериментировали на большом наборе разных датасетов и старались выбирать конфигурации, которые работают хорошо сразу на всем.

          Это если коротко. Статьи пока нет, но было бы интересно?


          1. oYASo
            18.07.2017 17:23
            +8

            Статьи пока нет, но было бы интересно?

            Ясное дело!


          1. awaik
            19.07.2017 09:04
            +1

            Было бы очень интересно!


          1. chupvl
            20.07.2017 18:53
            -2

            эмпирика вообщем, протестирую…


      1. tunelix
        18.07.2017 16:32
        +1

        ждем побед на kaggle :)


        1. BarakAdama
          18.07.2017 21:13

          Недавно как раз завершилось соревнование http://mlbootcamp.ru/round/12/sandbox/ (вполне Kaggle-подобное). Использовали там комбинацию CatBoost и LGBM, что принесло нам 7 место.


  1. noonv
    18.07.2017 13:49
    +2

    Отличная работа! Молодцы! А третий питон будет? :)


    1. BarakAdama
      18.07.2017 13:56
      +4

      Уже поддерживаем.


      1. noonv
        18.07.2017 14:22

        Супер! Спасибо!


      1. noonv
        18.07.2017 14:57

        А под каким алиасом вы советуете импортировать библиотеку?
        import catboost as…? :)


        1. BarakAdama
          18.07.2017 15:58
          +2

          cb


          1. noonv
            18.07.2017 16:32
            +1

            Спасибо! А то на канале ODS идёт обсуждение :)


            1. stranger777
              19.07.2017 09:24
              -1

              И в большом чужом коде с массой алиасов можно легко получить конфликт. Как RIP — самая употребимая аббревиатура. Я бы алиасил по смыслу c учётом расположения клавиш: Gradient Boosting, bng а если тест разных, то ybn(g) — такое занято с меньшей вероятностью и по коду вспомнить будет легче при чтении.


  1. Mehdzor
    18.07.2017 13:58
    +16

    Было бы неплохо дополнить примером с решением конкретной задачи: чему учили, что получили.


    1. BarakAdama
      18.07.2017 20:14
      +1

      У нас есть набор обучающих материалов с применениями CatBoost. В том числе есть пример с участием в соревновании Paribas на Kaggle. Там использование библиотеки дает 9 место на паблике. Ссылка вот https://github.com/catboost/catboost/blob/master/catboost/tutorials/kaggle_paribas.ipynb


  1. Pythonpy
    18.07.2017 14:11

    да вот только рекомендации работают не очень


  1. painjkee
    18.07.2017 14:56
    +2

    Спасибо за библиотеку, было бы здорово увидеть документацию и на русском языке


    1. Mehdzor
      18.07.2017 15:08

      Русская библиотека, а документации на родненьком нет. Не патриотично совсем.


      Английский сам по себе не является проблемой, но тема довольно специфичная. Устранение языкового барьера значительно упросило бы погружение.


      1. oYASo
        18.07.2017 17:25
        +16

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


        1. VBKesha
          18.07.2017 19:01
          +1

          Терминология и документация не одно и тоже, терминологию можно и английской оставить но остальное перевести.


          1. akzhan
            20.07.2017 16:29

            Можно изучить и английский язык, не изучать — идиотизм.


            причины очевидны.


            1. VBKesha
              20.07.2017 16:38
              -1

              Считать не изучение английского идиотизмом — идиотизм.
              PS. Хотя если вы его изучили то да надо каждому указывать как он не прав раз не делает так как вы.


  1. rzykov
    18.07.2017 14:59
    +1

    Java интерфейс будет?


    1. rzykov
      18.07.2017 15:04
      +1

      Я бы еще сравнил со Spark Gradient Boosted Trees, там тоже есть поддержка категориальных переменных.


    1. carixon
      18.07.2017 15:54

      Зная Яндекс, разве что на плюсах только )
      Для рисерча с самыми передовыми штуками от скалы все-таки приходится отказываться


      1. rzykov
        19.07.2017 09:30

        Может быть, но тот же XGBoost поддерживает «Python, R, Java, Scala, C++ and more. Runs on single machine, Hadoop, Spark, Flink and DataFlow». поддерживает параллельные расчета на Spark


  1. sergei3000
    18.07.2017 15:14

    А какое количество значений внутри категорий может быть, чтобы обучить модель за приемлемое время на достаточно мощном локальном компьютере? С условием если данных достаточно для этого.


    1. BarakAdama
      18.07.2017 17:03

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

      Что касается скорости обучения, здесь все зависит от данных — чем больше данных, тем больше времени требуется на их обработку.


      1. yorko
        18.07.2017 21:53

        То есть если уникальных значений слишком много, то хэширование применяется?


  1. Newcss
    18.07.2017 15:14
    +2

    Открыл документацию, из примеров ссылка на репозиторий, открыл репозиторий CatBoost… и что же вижу там?) Примеры из книги Андреас Мюллер, Сара Гвидо Введение в машинное обучение с помощью Python. Руководство для специалистов по работе с данными. Вступление в статью, описание инструментов уж больно похоже на описываемое в книге и используемую библиотеку scikit-learn…


  1. darkslave
    18.07.2017 15:20
    +3

    >> Например, если вам нужен точный прогноз погоды, где учитывается огромное количество факторов.
    Видимо, тут имеется в виду сервис Яндекс.Погода. Без обид ребята, но прогноз погоды работает далеко от категории «точно». Порой даже постфактум Яндекс.Погода показывает неверные данные. Хотя, полагаю все дело в самой погоде — она такая непредсказуемая.


    1. Zalina
      18.07.2017 15:52
      +4

      Мы будем вам очень благодарны, если пришлете нам описания таких случаев: https://yandex.ru/support/weather/faq.html.


      1. knagaev
        19.07.2017 11:44
        +1

        Два раза подряд в один день (к обеду и к вечеру) Яндекс.Погода (приложение на телефоне) говорила мне, что в ближайшие два часа осадков не предвидится.
        Оба раза спустя пять минут после этого начинался ливень, который шёл около часа-двух, то есть, не мелкий пятиминутный дождик.

        Яндекс.Погода, кстати, реагировала на это — каждый раз спустя десять минут после начала дождя рисовала этот ливень.
        Я тоже отреагировал — снёс приложение с телефона :)
        Хотя поначалу очень интересно было смотреть на карте как движется дождь по Москве.


        1. BarakAdama
          19.07.2017 12:12

          100% прогноза не бывает ни у кого, но то, что описали Вы, очень похоже на какой-то баг. Расскажите, пожалуйста, поддержке, если будет возможность.


          1. Nashev
            19.07.2017 16:09

            А поддержку нельзя попросить прочитать уже рассказанное здесь?


            1. BarakAdama
              19.07.2017 16:38

              Для починки багов почти всегда нужны детали. Где, когда, при каких обстоятельствах. Поэтому важно в первую очередь наладить переписку. Иначе как понять причину и исправить проблему?


              1. Nashev
                19.07.2017 16:58

                Уверен, у поддержки есть учётка и она может сама обратиться с вопросом в личку.


                1. BarakAdama
                  19.07.2017 17:09
                  +1

                  Нет, аккаунтов у них нет. Более того, обращения отправленные через само приложение зачастую содержит полезную техническую информацию, которую пользователь своими руками не соберет.


            1. Zalina
              19.07.2017 22:41
              +1

              Почитать они, конечно, могут, но в обратную связь можно системно все случаи отсылать. Здесь собирать их не продуктивно как-то.


  1. sunswordred
    18.07.2017 16:44
    -30

    Друг спрашивает, а можно её научить биткойны с эфирами майнить? Оч нужно, заранее спасибо


    1. alex4321
      19.07.2017 14:14

      Казалось бы — какое отношение машинное обучение (читай — вывод алгоритма по обучающей выборке) имеет к биткоинам и эффирам (читай — реализациям уже известных алгоритмов)?


      1. sunswordred
        20.07.2017 09:49
        -3

        Мне кажется, юмор к жизни имеет прямое отношение, хорошего вам дня)


    1. YetAnotherSlava
      20.07.2017 06:39
      +1

      Лол.


  1. marckel
    18.07.2017 16:50
    +4

    Спасибо Яндексу за это!!!


  1. Alexey_mosc
    18.07.2017 16:55

    И вот результаты (чем меньше, тем лучше):


    Мне непонятно, на какой части данных делалось сравнение методов. Это отложенные выборки?

    Также не ясно, как был проведен тюнинг: с кроссвалидацией или без нее.


    1. BarakAdama
      18.07.2017 17:03
      +1

      Подробное описание эксперимента есть в репозитории с бенчмарками: https://github.com/catboost/benchmarks/blob/master/comparison_description.pdf


      1. grossws
        18.07.2017 17:53
        +1

        Поправьте ссылку в README.md, про это даже issue есть.


        1. nikitxskv
          19.07.2017 07:05

          Поправили.


      1. Alexey_mosc
        19.07.2017 12:25

        Могли бы вы ткнуть в строку кода, где начинается описание Mean Abs Err? Например, здесь: https://github.com/catboost/catboost/blob/master/catboost/libs/algo/error_functions.h в строках 100 и 104 я вижу расчет первой и второй производной для L2. Интересует для L1. Если не затруднит…


        1. Alexey_mosc
          19.07.2017 17:33

          сам нашел. это в рамках quantile loss.


  1. paveltro
    18.07.2017 17:09

    Доброго дня…
    А как поставить? Через pip Ошибка DLL при импорте, а .exe установщик не запускается… У кого-нибудь заработал?


    1. BarakAdama
      18.07.2017 21:18

      Создайте, пожалуйста, issue, и мы посмотрим в ближайшее время.


    1. Gewissta
      18.07.2017 22:24
      +1

      У меня все нормально. Уже гонял на задачках.

      (C:\Anaconda3) C:\Users\Gewissta>pip install catboost
      Collecting catboost
      Downloading catboost-0.1.1.2-cp36-none-win_amd64.whl (2.3MB)
      100% |--------------------------------| 2.3MB 276kB/s
      Requirement already satisfied: pandas in c:\anaconda3\lib\site-packages (from catboost)
      Requirement already satisfied: six in c:\anaconda3\lib\site-packages (from catboost)
      Requirement already satisfied: numpy in c:\anaconda3\lib\site-packages (from catboost)
      Requirement already satisfied: python-dateutil>=2 in c:\anaconda3\lib\site-packages (from pandas->catboost)
      Requirement already satisfied: pytz>=2011k in c:\anaconda3\lib\site-packages (from pandas->catboost)
      Installing collected packages: catboost
      Successfully installed catboost-0.1.1.2


      1. paveltro
        20.07.2017 09:37

        Я так же через pip установил, но при импорте ошибка DLL


  1. xaoc80
    18.07.2017 17:45

    Библиотека написана на python? Есть ли интерфейс на с++?


    1. paveltro
      18.07.2017 17:55

      Судя по исходникам, сама библиотека на C


      1. grossws
        18.07.2017 17:59

        На плюсах, если что. Неужели так сложно заглянуть в репозиторий (например, https://github.com/catboost/catboost/tree/master/catboost/libs/algo) и посмотреть глазами?


        1. xaoc80
          18.07.2017 18:09

          Да, с телефона сложно. Увидел и сразу решил задать вопрос, пока автор недалеко. Не забавы ради, честно.


          1. xaoc80
            18.07.2017 18:12

            Сорри, думал вопрос мне


  1. erwins22
    18.07.2017 19:10
    +1

    Есть ли в алгоритме не стандартные ходы по сравнению с остальными? и какие.


    1. BarakAdama
      18.07.2017 21:19
      +2

      CatBoost — это целый набор нестандартных ходов, за счет них он дает такие хорошие результаты. Одна из идей – мы придумали новый подход для борьбы с переобучением. Про него можно подробно почитать в статье, которую мы выложили здесь https://arxiv.org/abs/1706.09516


      1. Alexey_mosc
        19.07.2017 09:54

        Почитал статью. Интересно. Уменьшаете смещение остатков какими-то умными способами. Звучит разумно.

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


        1. atikhonov
          19.07.2017 10:43

          По описанию можно, но вот в реалиях:
          1. под Windows не компилируется (под Linux и macos получилось)
          2. Пример под caret некорректный (в примере в сетку выведены пять параметров, реально можно только три). Проброс параметров не удался.
          3. Также в примере титаника есть NA, которые по умолчанию в Caret не заменяется, в примере нет метода импутации
          4. Оптимизируемая метрика через сaret только точность, попытки привязать логлосс, как встроенный, так и самописный не увенчались успехом


          1. Alexey_mosc
            19.07.2017 11:26

            Жаль! С каретом подружить очень бы хотелось!

            А вот еще вопрос — скорее к авторам — есть ли встроенная функция MAE? В XGBoost ее не было, а писать производные было весьма не тривиально.

            В GBM такая ф-ия потерь есть по умолчанию.


            1. atikhonov
              19.07.2017 11:41
              +1

              есть, и даже для оптимизации, судя по этому


              1. Alexey_mosc
                19.07.2017 11:58

                Здорово. Надо покурить код функции. Всегда хотел попробовать бустинг на процессах с тяжелыми хвостами, используя L1.

                Спасибо за ссылку.


  1. stranger777
    18.07.2017 21:45
    -1

    Вот поэтому, в том числе, я пару дней назад с лёгким сердцем перешёл на Яндекс.Браузер. Сначала я думал, что это переодетый и чуть подпиленный хром. Но это, по счастью, полноценная разработка на его базе.
    Спасибо, Яндекс.
    И вот только что ваш ИИ подобрал мне «Сплинов» и «Выхода нет» :)
    Не всё и не всегда гладко у вас, но такие моменты, как эти, радуют.


    1. Simplevolk
      19.07.2017 08:39
      +2

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


      1. akzhan
        20.07.2017 16:34
        -2

        слушаю Apple Music, и все отлично :)


      1. slav1k
        21.07.2017 08:56

        Вот только стоит разок сходить налево послушать, что там нынче в тренде — А! Вам нравится поп! И здравствуй Ёлка, Бьянка, Тимати и русский рэп. На неделю, как минимум… )

        И практически нет возможности сказать этому ИИ, что вот этого и этого — не надо.

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


  1. mbrdancer
    18.07.2017 22:26

    Где можно посмотреть, кто у вас работает над этой моделью? И кто в консультантах? Конечно, если это не секрет.
    Вообще серьезная заявка на победу — потягаться с lgbm и xgb.
    Очень вдохновляет.


    1. BarakAdama
      18.07.2017 22:49

      https://github.com/catboost/catboost/blob/master/AUTHORS


  1. speller
    19.07.2017 02:27
    -12

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


    1. Levhav
      19.07.2017 05:24
      +11

      Если ваш сайт недостаточно хорош по мнению яндекса это не повод выплёскивать свой гнев в статье про выход нового опенсорс продукта.


  1. tumbler
    19.07.2017 10:17
    +3

    Использует ли catboost все ядра машины, или в один поток работает?
    Как насчет ускорения частей на GPU?
    И почему дока не на домене .yandex? :-)


    1. atikhonov
      19.07.2017 10:49

      есть параметр thread_count (до 8, хотя в примерах — 12)) — The number of threads to use when applying the model.
      Allows you to optimize the speed of execution. This parameter doesn't affect results.


  1. bredd_owen
    19.07.2017 11:14

    Яндекс, спасибо!

    Правильно ли я понял, что алгоритм сам приводит текстовые данные к цифровому виду?
    Если да, что как алгоритм решает, например, что категории облаков («кучевые», «слоистые», «перисто-кучевые») лучше представить в виде One-hot, а, к примеру, категориям «сильный ветер», «слабый ветер» нужно присвоить категориальные признаки?


    1. bredd_owen
      19.07.2017 12:32

      Ошибся, не категориальные, ранговые


    1. BarakAdama
      19.07.2017 14:15

      Да, категориальные данные приводятся к цифровому виду внутри алгоритма, при этом по умолчанию по ним считается набор статистик, а если хочется использовать one-hot, то это нужно указать при помощи специального флага. Обычно лучше всего работают именно статистики, но иногда, в первую очередь если категорий мало, то one-hot тоже может быть полезен.


  1. tony1483
    19.07.2017 11:49

    Поэтому в этой ситуации каждому товару просто присваивают порядковый id (к примеру, в соответствии с программой учета в магазине). Порядок этих чисел ничего не значит, однако алгоритм будет этот порядок использовать и делать из него ложные выводы.

    но ведь у того же lgbm можно пометить categorical features в датаcете и это уже не проблема. Вопрос: в документации к тестам этого не указано, хотел бы уточнить: lgbm тренировался с обозначенными categorical features?


    1. BarakAdama
      19.07.2017 14:17
      +2

      В LGBM обработка категориальных признаков примитивная – они превращаются в one-hot encoding. На практике лучше всего работает другая предобработка – подсчет счетчиков. Например, это можно видеть по побеждающим на Kaggle решениям. Кроме того, именно такие способы используются в продакшне. Поэтому мы сделали сравнение с такой предобработкой, а не с one-hot encoding-ом.


      1. gltrinix
        20.07.2017 06:22
        +5

        Прошу прощения, что не в тему, а можно англоязычное название «подсчета счетчиков»? Я только one-hot пользуюсь и хочу почитать про второй вид предобработки.


  1. OlehYashchuk
    19.07.2017 11:49

    Метод catboost.caret не работает под оболочкой caret. Проверьте, пожалуйста, пример на странице https://tech.yandex.com/catboost/doc/dg/concepts/r-usages-examples-docpage/


    1. BarakAdama
      19.07.2017 14:11

      Создайте, пожалуйста, issue на github https://github.com/catboost/catboost/issues


      1. OlehYashchuk
        19.07.2017 19:03

        Создал issue и получил ответ. Метод catboost.caret работает при изминении синтаксиса вызова функции train.
        Возможно пример по ссылке устаревший.


  1. CodeViking
    19.07.2017 13:32

    Благодарю за труд. Скажите, возможно ли применение в JavaScript? (Я в машинном обучении новичок, и мой вопрос может быть глупым).

    Насколько уместно и эффективно, и возможно ли вообще применение CatBost для задач администрирования и модерирования сайтов и приложений?

    Спасибо.


    1. BarakAdama
      19.07.2017 14:18

      Поддержка JavaScript в ближайшем будущем не планируется, однако мы будем очень рады, если будут контрибьютеры, которые ее реализуют. Что касается задач администрирования и модерирования – пробуйте, делитесь опытом.


  1. j4ever
    19.07.2017 13:48
    -5

    fsdfsd


  1. Ingref
    19.07.2017 14:31
    -4

    Скачал бинарник отсюда — http://storage.mds.yandex.net/get-devtools-opensource/250854/catboost-0.1.1.exe
    При запуске catboost-0.1.1.exe на Windows 7 (32 bit) выдаёт ошибку:
    image


  1. erwins22
    19.07.2017 14:43

    прочитал внимательно «ни один кот при разработке не пострадал» — тестируют обычно на кошках…


    1. pavelkolodin
      25.07.2017 16:29
      -1

      Чё?


  1. ginx
    19.07.2017 16:37
    +1

    Пример из документации впечатляет. Люблю когда всё просто и понятно. Надо будет протестировать подробнее. Хотелось бы узнать, планируется ли поддержка работы библиотеки на мобильных устройствах, on-device? Возможно, по типу TensorFlow / Core ML, или в связке с ними? Ваше мнение о целесообразности такого подхода в целом?


  1. ginx
    19.07.2017 16:48
    +3

    Вижу, что поддерживается. Exporting the model to Apple CoreML. Круто! Отличная работа!


  1. Femistoklov
    20.07.2017 04:27
    +1

    С ее помощью можно эффективно обучать модели на разнородных данных, в том числе таких, которые трудно представить в виде чисел (например, виды облаков или категории товаров).
    Так чем же CatBoost отличается от других открытых аналогов?
    И CatBoost разработан нами так, чтобы одинаково хорошо работать «из коробки» как с числовыми признаками, так и с категориальными.
    В итоге в статье ни слова о том, как же обрабатываются категориальные признаки.


    1. BarakAdama
      25.07.2017 13:50

      https://tech.yandex.com/catboost/doc/dg/concepts/algorithm-main-stages_cat-to-numberic-docpage/


  1. Bone
    21.07.2017 15:36

    А вот такой пример: у меня есть названия книг, которые читают пользователи и есть уровень их дохода. Как мне с помощью catboost предсказать уровень дохода для произвольного набора книг?


    1. comratvlad
      24.07.2017 11:21
      +2

      Как-то мягко говоря недостаточно признаков для предсказания дохода. Бездомный Василий может читать по вечерам Достоевского, и я могу, Абрамович тоже, а уровень доходов у нас троих совсем разный, и тут не в Достоевском дело. Но если если представить, что это чисто учебная задача, то можно, например, взять за признаки не книги, а темы, которых в них затрагиваются, тогда это будет как раз категориальным признаком, с которым, как утверждается в статье, catboost хорошо справляется.


  1. Skaron
    24.07.2017 15:02

    Какой score у Вас получался при загрузке предсказаний по титанику в kaggle?


    1. erwins22
      24.07.2017 15:04

      лучше сразу с полным кодом на питоне.


      1. Skaron
        24.07.2017 17:14
        +1

        Боюсь, что не до конца поняла Вас.
        Код уже есть, титаник используется в одном из туториалов CatBoots'a — жми
        Только не указано, какой в итоге результат получили.
        Я хотела использовать его для проверки того, что все правильно установилось. А референса не оказалось.


  1. massimus
    24.07.2017 21:39

    ранжирования ленты рекомендаций Яндекс.Дзен

    А его на старых данных подрессировали сначала? Что-то сыплет пачками политоту и дамские сайты, в том числе ранее неоднократно, рррр заблокированные.

    А ещё было бы недурно в интерфейсе Дзена только что заблокированное сразу скрывать из подгруженной пачки документов, а то листаешь: хоба, я ж тебя только что блокировал!


    1. bonifaci
      24.07.2017 22:04

      Блокировки запоминаются, если вы не чистите куки в браузере или работаете всегда под одним и тем же логином. Может, ранее вы блокировали какой-то источник, не будучи авторизованным?

      Предложение про удаление постов из заблокированного источника интересное, отнесу ребятам :)


      1. massimus
        24.07.2017 22:16

        Вроде всегда в Дзен под основным аккаунтом лезу, а в телефоне и вовсе ни разу не перелогинивался, картина идентичная. Кук не чистил с сотворения мира. Разве что айпишка скачет не пойми где (и то та же погода всегда знает, где я на самом деле), а по остальным признакам я всегда я.

        На статью, кстати, из Дзена пришёл. Пойду дальше тренировать :)


  1. Abyasov
    24.07.2017 22:06
    +2

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


    Ну и второй вопрос — что делать с сильно разряженными датасетами? Бытует мнение, что на них деревья работают хуже линейных моделей. В xgb есть возможность указать тип элементарных алгоритмов. Но у вас, подозреваю, все заточено под деревья. Есть какое-то решение на этот счёт? Или catboost изначально проектировался с учётом таких задач?


    1. BarakAdama
      25.07.2017 13:51
      +2

      Подсчитываемые статистики описаны в документации https://tech.yandex.com/catboost/doc/dg/concepts/algorithm-main-stages_cat-to-numberic-docpage/

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


  1. NickKolok
    25.07.2017 14:37

    Извините, если вопрос покажется глупым, к машинному обучению только присматриваюсь — но можно ли использовать это для классификации фотографий? И если нет, то что тогда посоветуете?

    P.S. Лучи добра Яндексу за опенсорс!


    1. Abyasov
      25.07.2017 20:24
      +2

      Традиционно для фотографий лучше нейросети работают. Здесь же градиентный бустинг над решающими деревьями.


    1. alex4321
      25.07.2017 21:38
      +1

      Свёрточные нейронные сети (например — вариации на тему Resnet/VGG (возможно, будет смысл использовать предобученные на imagenet-е сетки))


  1. despair
    25.07.2017 21:24
    +1

    Решил ради интереса воспользоваться CatBoost в качестве замены xgboost для линейной регрессии. Натравил на тот же самый датасет со своими данными.
    Однако вопреки ожиданиям получил совершенно ужасный результат, много хуже всех прочих методов регрессии. Вероятно что-то делаю не так… интересно, с кем /где можно было бы проконсультироваться по этому поводу и задать конкретные вопросы?


    1. erwins22
      26.07.2017 18:02

      ошибка большая на тестовой или на обучающей выборке?


      1. despair
        26.07.2017 20:09

        И там и там. Результат вообще неадекватный я бы сказал) Вот бы можно было кому-то прислать конкретный датасет и код, чтобы указали на проблему)


        1. Bookin
          27.07.2017 09:43
          +1

          Возможно стоит на github открыть `issues` и выложить пример, там уже люди глянут, потестят, помогут


  1. KiloLeo
    26.07.2017 23:33

    Простите, потыкался по примерам и tutorial, не понял — есть ли примеры применения catboost для прогнозирования временных рядов? Рыночных индексов, сезонности продаж, погоды? Не ругайте, если проглядел, лучше ткните в нужное место.