company_banner

Яндекс открывает технологию машинного обучения CatBoost

    Сегодня Яндекс выложил в 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. Выкладывая библиотеку в открытый доступ, мы хотим внести свой вклад в развитие машинного обучения. Надеемся, что сообщество специалистов оценит технологию и примет участие в ее развитии.
    Яндекс 486,81
    Как мы делаем Яндекс
    Поделиться публикацией
    Комментарии 128
    • +36
      • +19
        Лучи добра Яндексу за открытые технологии!
        • +2
          del
          • 0
            А данная библиотека подходит для обучения моделей анализа сетевого трафика?
            Интересно как машинное обучение в этой области себя проявляет.
            • +3
              Вы можете проверить :)
              • 0
                Да, есть одна идея, основанная на машинном обучении, если руки дойдут, опубликую обзор.
            • –52

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

              • +2
                Кстати, а как он по скорости обучения. Конечно очень хорошо, что на отдельных задач он превосходит lgb и xgb, но если взять lgb и xgb — многим нравится как раз первый несмотря на чуть худший score, ввиду на порядок быстрой обучаемости
                • +3
                  Если говорить про скорость обучения, то здесь мы пока отстаем от аналогов. Но мы сейчас активно занимаемся именно ускорением обучения и каждую неделю выкатываем обновления алгоритма, иногда это приводит к ускорению в разы. Поэтому полноценное сравнение обучения по скорости делать рано. При этом если говорить о скорости обучения у разных алгоритмов, то надо понимать, что у lgb и xgb от подбора параметров сильно меняется результат. Вообще нет смысла использовать эти алгоритмы без подбора параметров. А CatBoost гораздо более устойчив к подбору параметров, уже с первого раза получается хороший результат. Это экономит огромное количество времени при обучении моделей.
                  • +1
                    Интересно узнать как вы оптимизировали подбор параметров. Есть ли статья на эту тему?
                    • +5
                      Устойчивость к подбору параметров – это свойство, характерное как для CatBoost, так и для Матрикснета, на основе которого этот алгоритм был разработан. Такое свойство получилось благодаря тому, что при развитии алгоритма мы экспериментировали на большом наборе разных датасетов и старались выбирать конфигурации, которые работают хорошо сразу на всем.

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

                        Ясное дело!
                        • +1
                          Было бы очень интересно!
                          • –2
                            эмпирика вообщем, протестирую…
                        • +1

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

                          • 0
                            Недавно как раз завершилось соревнование http://mlbootcamp.ru/round/12/sandbox/ (вполне Kaggle-подобное). Использовали там комбинацию CatBoost и LGBM, что принесло нам 7 место.
                      • +2
                        Отличная работа! Молодцы! А третий питон будет? :)
                        • +4
                          Уже поддерживаем.
                          • 0
                            Супер! Спасибо!
                            • 0
                              А под каким алиасом вы советуете импортировать библиотеку?
                              import catboost as…? :)
                              • +2
                                cb
                                • +1
                                  Спасибо! А то на канале ODS идёт обсуждение :)
                                  • –1
                                    И в большом чужом коде с массой алиасов можно легко получить конфликт. Как RIP — самая употребимая аббревиатура. Я бы алиасил по смыслу c учётом расположения клавиш: Gradient Boosting, bng а если тест разных, то ybn(g) — такое занято с меньшей вероятностью и по коду вспомнить будет легче при чтении.
                          • +16

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

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

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


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

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

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


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

                                        • –1
                                          Считать не изучение английского идиотизмом — идиотизм.
                                          PS. Хотя если вы его изучили то да надо каждому указывать как он не прав раз не делает так как вы.
                                • +1
                                  Java интерфейс будет?
                                  • +1
                                    Я бы еще сравнил со Spark Gradient Boosted Trees, там тоже есть поддержка категориальных переменных.
                                    • 0
                                      Зная Яндекс, разве что на плюсах только )
                                      Для рисерча с самыми передовыми штуками от скалы все-таки приходится отказываться
                                      • 0
                                        Может быть, но тот же XGBoost поддерживает «Python, R, Java, Scala, C++ and more. Runs on single machine, Hadoop, Spark, Flink and DataFlow». поддерживает параллельные расчета на Spark
                                    • 0
                                      А какое количество значений внутри категорий может быть, чтобы обучить модель за приемлемое время на достаточно мощном локальном компьютере? С условием если данных достаточно для этого.
                                      • 0
                                        Для метода CatBoost ограничения на количество значений внутри категорий нет. Однако при обучении на обработку категориальных фичей тратится как дополнительное процессорное время, так и память.
                                        На больших данных, если возникает проблема с недостатком памяти, алгоритму можно при помощи специального параметра указать, сколько памяти у вас есть, и алгоритм за счет небольшого замедления в обучении уместится в такую память.

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

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

                                      • +2
                                        Открыл документацию, из примеров ссылка на репозиторий, открыл репозиторий CatBoost… и что же вижу там?) Примеры из книги Андреас Мюллер, Сара Гвидо Введение в машинное обучение с помощью Python. Руководство для специалистов по работе с данными. Вступление в статью, описание инструментов уж больно похоже на описываемое в книге и используемую библиотеку scikit-learn…
                                        • +3
                                          >> Например, если вам нужен точный прогноз погоды, где учитывается огромное количество факторов.
                                          Видимо, тут имеется в виду сервис Яндекс.Погода. Без обид ребята, но прогноз погоды работает далеко от категории «точно». Порой даже постфактум Яндекс.Погода показывает неверные данные. Хотя, полагаю все дело в самой погоде — она такая непредсказуемая.
                                          • +4
                                            Мы будем вам очень благодарны, если пришлете нам описания таких случаев: https://yandex.ru/support/weather/faq.html.
                                            • +1
                                              Два раза подряд в один день (к обеду и к вечеру) Яндекс.Погода (приложение на телефоне) говорила мне, что в ближайшие два часа осадков не предвидится.
                                              Оба раза спустя пять минут после этого начинался ливень, который шёл около часа-двух, то есть, не мелкий пятиминутный дождик.

                                              Яндекс.Погода, кстати, реагировала на это — каждый раз спустя десять минут после начала дождя рисовала этот ливень.
                                              Я тоже отреагировал — снёс приложение с телефона :)
                                              Хотя поначалу очень интересно было смотреть на карте как движется дождь по Москве.
                                              • 0
                                                100% прогноза не бывает ни у кого, но то, что описали Вы, очень похоже на какой-то баг. Расскажите, пожалуйста, поддержке, если будет возможность.
                                                • 0
                                                  А поддержку нельзя попросить прочитать уже рассказанное здесь?
                                                  • 0
                                                    Для починки багов почти всегда нужны детали. Где, когда, при каких обстоятельствах. Поэтому важно в первую очередь наладить переписку. Иначе как понять причину и исправить проблему?
                                                    • 0
                                                      Уверен, у поддержки есть учётка и она может сама обратиться с вопросом в личку.
                                                      • +1
                                                        Нет, аккаунтов у них нет. Более того, обращения отправленные через само приложение зачастую содержит полезную техническую информацию, которую пользователь своими руками не соберет.
                                                    • +1
                                                      Почитать они, конечно, могут, но в обратную связь можно системно все случаи отсылать. Здесь собирать их не продуктивно как-то.
                                            • –30
                                              Друг спрашивает, а можно её научить биткойны с эфирами майнить? Оч нужно, заранее спасибо
                                              • 0
                                                Казалось бы — какое отношение машинное обучение (читай — вывод алгоритма по обучающей выборке) имеет к биткоинам и эффирам (читай — реализациям уже известных алгоритмов)?
                                                • –3
                                                  Мне кажется, юмор к жизни имеет прямое отношение, хорошего вам дня)
                                                • +1
                                                  Лол.
                                                • +4
                                                  Спасибо Яндексу за это!!!
                                                  • 0
                                                    И вот результаты (чем меньше, тем лучше):


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

                                                    Также не ясно, как был проведен тюнинг: с кроссвалидацией или без нее.
                                                    • +1
                                                      Подробное описание эксперимента есть в репозитории с бенчмарками: https://github.com/catboost/benchmarks/blob/master/comparison_description.pdf
                                                      • +1

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

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

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

                                                      • 0
                                                        Создайте, пожалуйста, issue, и мы посмотрим в ближайшее время.
                                                        • +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
                                                          • 0
                                                            Я так же через pip установил, но при импорте ошибка DLL
                                                        • 0

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

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

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

                                                              • 0

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

                                                                • 0

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

                                                          • +1
                                                            Есть ли в алгоритме не стандартные ходы по сравнению с остальными? и какие.
                                                            • +2
                                                              CatBoost — это целый набор нестандартных ходов, за счет них он дает такие хорошие результаты. Одна из идей – мы придумали новый подход для борьбы с переобучением. Про него можно подробно почитать в статье, которую мы выложили здесь https://arxiv.org/abs/1706.09516
                                                              • 0
                                                                Почитал статью. Интересно. Уменьшаете смещение остатков какими-то умными способами. Звучит разумно.

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

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

                                                                    В GBM такая ф-ия потерь есть по умолчанию.
                                                                    • +1
                                                                      есть, и даже для оптимизации, судя по этому
                                                                      • 0
                                                                        Здорово. Надо покурить код функции. Всегда хотел попробовать бустинг на процессах с тяжелыми хвостами, используя L1.

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

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

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

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

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

                                                                • 0
                                                                  Где можно посмотреть, кто у вас работает над этой моделью? И кто в консультантах? Конечно, если это не секрет.
                                                                  Вообще серьезная заявка на победу — потягаться с lgbm и xgb.
                                                                  Очень вдохновляет.
                                                                  • 0
                                                                    https://github.com/catboost/catboost/blob/master/AUTHORS
                                                                  • –12
                                                                    Ваш волшебный алгоритм улучшения результатов поиска не умеет работать с интернет-магазинами автозапчастей, нещадно выбрасывая предложения цен из результатов поиска как «некачественные страницы». Мы уже несколько месяцев с этим пытаемся бороться, но, как видно, у вас есть задачи поважнее. Скорее бы яндекс уже потерял долю поискового рынка настолько, чтобы не приходилось затачивать свой сайт под два поисковиска, каждый из которых тянет одеяло на себя. Одна головная боль, от которой статьи о высоких материях не спасают.
                                                                    • +11
                                                                      Если ваш сайт недостаточно хорош по мнению яндекса это не повод выплёскивать свой гнев в статье про выход нового опенсорс продукта.
                                                                    • +3

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

                                                                      • 0
                                                                        есть параметр 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.
                                                                      • 0
                                                                        Яндекс, спасибо!

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

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

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

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

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

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

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

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

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

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

                                                                                Спасибо.
                                                                                • 0
                                                                                  Поддержка JavaScript в ближайшем будущем не планируется, однако мы будем очень рады, если будут контрибьютеры, которые ее реализуют. Что касается задач администрирования и модерирования – пробуйте, делитесь опытом.
                                                                                • –5
                                                                                  fsdfsd
                                                                                  • –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
                                                                                    • 0
                                                                                      прочитал внимательно «ни один кот при разработке не пострадал» — тестируют обычно на кошках…
                                                                                    • +1
                                                                                      Пример из документации впечатляет. Люблю когда всё просто и понятно. Надо будет протестировать подробнее. Хотелось бы узнать, планируется ли поддержка работы библиотеки на мобильных устройствах, on-device? Возможно, по типу TensorFlow / Core ML, или в связке с ними? Ваше мнение о целесообразности такого подхода в целом?
                                                                                      • +3
                                                                                        Вижу, что поддерживается. Exporting the model to Apple CoreML. Круто! Отличная работа!
                                                                                        • +1
                                                                                          С ее помощью можно эффективно обучать модели на разнородных данных, в том числе таких, которые трудно представить в виде чисел (например, виды облаков или категории товаров).
                                                                                          Так чем же CatBoost отличается от других открытых аналогов?
                                                                                          И CatBoost разработан нами так, чтобы одинаково хорошо работать «из коробки» как с числовыми признаками, так и с категориальными.
                                                                                          В итоге в статье ни слова о том, как же обрабатываются категориальные признаки.
                                                                                          • 0
                                                                                            https://tech.yandex.com/catboost/doc/dg/concepts/algorithm-main-stages_cat-to-numberic-docpage/
                                                                                          • 0
                                                                                            А вот такой пример: у меня есть названия книг, которые читают пользователи и есть уровень их дохода. Как мне с помощью catboost предсказать уровень дохода для произвольного набора книг?
                                                                                            • +2
                                                                                              Как-то мягко говоря недостаточно признаков для предсказания дохода. Бездомный Василий может читать по вечерам Достоевского, и я могу, Абрамович тоже, а уровень доходов у нас троих совсем разный, и тут не в Достоевском дело. Но если если представить, что это чисто учебная задача, то можно, например, взять за признаки не книги, а темы, которых в них затрагиваются, тогда это будет как раз категориальным признаком, с которым, как утверждается в статье, catboost хорошо справляется.
                                                                                            • 0
                                                                                              Какой score у Вас получался при загрузке предсказаний по титанику в kaggle?
                                                                                              • 0
                                                                                                лучше сразу с полным кодом на питоне.
                                                                                                • +1
                                                                                                  Боюсь, что не до конца поняла Вас.
                                                                                                  Код уже есть, титаник используется в одном из туториалов CatBoots'a — жми
                                                                                                  Только не указано, какой в итоге результат получили.
                                                                                                  Я хотела использовать его для проверки того, что все правильно установилось. А референса не оказалось.
                                                                                              • 0
                                                                                                ранжирования ленты рекомендаций Яндекс.Дзен

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

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

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

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

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


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

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

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

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

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

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

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

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

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

                                                                                                            • +1
                                                                                                              Возможно стоит на github открыть `issues` и выложить пример, там уже люди глянут, потестят, помогут
                                                                                                        • 0
                                                                                                          Простите, потыкался по примерам и tutorial, не понял — есть ли примеры применения catboost для прогнозирования временных рядов? Рыночных индексов, сезонности продаж, погоды? Не ругайте, если проглядел, лучше ткните в нужное место.
                                                                                                          • 0
                                                                                                            Есть много вариантов как готовить, триплеты, скользящие окна, исторические данные с шагом сезонных/суточный и т.п. колебаний.

                                                                                                            Тут надо понимать одну простую вещь, чтобы получить неплохое предсказание, системе вовсе не обязательно знать, что такое время и куда оно движется, это и для людей вопрос сложный. Так что можно действовать в таком порядке:
                                                                                                            1. По максимум выжать из анализа просто россыпи измерений, отсеять возможные временные инварианты, условно, у кошки как было в моде 4 ноги 50 лет назад, так и осталось, нам не нужно время, чтобы опознать кошку. Так и для нахождения закономерностей на подборке измерений, во многих случаях не так важно, как они упорядочены.
                                                                                                            2. Чуть более учитывающий время когортный подход. Взяли, например, все компании, которые сегодня на бирже пошли вниз и все компании, которые пошли вверх, дальше наблюдаем на интервале большем, чем использованный для начального разделения, дальше продолжаем разбивать, строя деревья.
                                                                                                            3. Следущий простой вариант — таймер как фича, условно нарезали сутки/месяц/год на 256/1024/10500 фрагментов, загнали как линейный признак, смотрим где выстрелит. Дальше, чтобы слишком уже мелко не резать — спектральный анализ/разбор, и мы опять можем работать с мелкими деталями, имея крупные фичи.
                                                                                                            4. Ловля микропаттернов, наличие каждого во временном окне отмечаем как фичу есть/нет и получаем удобные для заправки в деревья решений матрицы.

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

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

                                                                                                            Надеюсь, что мой ответ был полезен.
                                                                                                            • 0
                                                                                                              На практике можно с изучения этого материала начать, достаточно хорошо объяснено куда именно втыкать деревья: http://lig-membres.imag.fr/bisson/cours/M2INFO-AIW-ML/Cours3-Classification-Trees.pdf
                                                                                                              • 0
                                                                                                                Спасибо, пока что-то тяжело воспринимается. Всё-таки временные ряды и процессы имеют свою специфику, «если сейчас парит, то будет гроза», «ласточки летают низко к дождю» — нужна именно временная связь параметров, а не просто «россыпь измерений» высоты полёта ласточек и миллиметров осадков.
                                                                                                                • 0
                                                                                                                  Смысл в том, чтобы отделить закономерности характерные для россыпи от циклических закономерностей и реакциями системы на редкие события.
                                                                                                                  Мне из свежака неплохая модель пригодная для экстракции фич попалась:
                                                                                                                  https://www.cs.virginia.edu/~stankovic/psfiles/maper.pdf
                                                                                                          • 0
                                                                                                            Спасибо! Но есть пару вопросов:

                                                                                                            1. Возможно я не так понял описание алгоритма, но кодирование категорий в цифры происходит вне зависимости от прошлых деревьев или прошлых сплитов текущего дерева. Я правильно понял?

                                                                                                            2. У вас довольно слабый априори. Вы добавляете только одно псевдоиспытание. При классификации априори получается всегда мультимодальным бета-распределением. У вас на практике получилось, что такой априори лучше всего работает?

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

                                                                                                            Самое читаемое
                                                                                                            Интересные публикации