Pull to refresh

Comments 128

Лучи добра Яндексу за открытые технологии!
А данная библиотека подходит для обучения моделей анализа сетевого трафика?
Интересно как машинное обучение в этой области себя проявляет.
Да, есть одна идея, основанная на машинном обучении, если руки дойдут, опубликую обзор.

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

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

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

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

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

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

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


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

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

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


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

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

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

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

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

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


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

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

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

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

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

Создайте, пожалуйста, issue, и мы посмотрим в ближайшее время.
UFO just landed and posted this here
Я так же через pip установил, но при импорте ошибка DLL

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

В LGBM обработка категориальных признаков примитивная – они превращаются в one-hot encoding. На практике лучше всего работает другая предобработка – подсчет счетчиков. Например, это можно видеть по побеждающим на Kaggle решениям. Кроме того, именно такие способы используются в продакшне. Поэтому мы сделали сравнение с такой предобработкой, а не с one-hot encoding-ом.
Прошу прощения, что не в тему, а можно англоязычное название «подсчета счетчиков»? Я только one-hot пользуюсь и хочу почитать про второй вид предобработки.
Создайте, пожалуйста, issue на github https://github.com/catboost/catboost/issues

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

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

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

Спасибо.
Поддержка JavaScript в ближайшем будущем не планируется, однако мы будем очень рады, если будут контрибьютеры, которые ее реализуют. Что касается задач администрирования и модерирования – пробуйте, делитесь опытом.
прочитал внимательно «ни один кот при разработке не пострадал» — тестируют обычно на кошках…
Пример из документации впечатляет. Люблю когда всё просто и понятно. Надо будет протестировать подробнее. Хотелось бы узнать, планируется ли поддержка работы библиотеки на мобильных устройствах, on-device? Возможно, по типу TensorFlow / Core ML, или в связке с ними? Ваше мнение о целесообразности такого подхода в целом?
С ее помощью можно эффективно обучать модели на разнородных данных, в том числе таких, которые трудно представить в виде чисел (например, виды облаков или категории товаров).
Так чем же CatBoost отличается от других открытых аналогов?
И CatBoost разработан нами так, чтобы одинаково хорошо работать «из коробки» как с числовыми признаками, так и с категориальными.
В итоге в статье ни слова о том, как же обрабатываются категориальные признаки.
https://tech.yandex.com/catboost/doc/dg/concepts/algorithm-main-stages_cat-to-numberic-docpage/
А вот такой пример: у меня есть названия книг, которые читают пользователи и есть уровень их дохода. Как мне с помощью catboost предсказать уровень дохода для произвольного набора книг?
Как-то мягко говоря недостаточно признаков для предсказания дохода. Бездомный Василий может читать по вечерам Достоевского, и я могу, Абрамович тоже, а уровень доходов у нас троих совсем разный, и тут не в Достоевском дело. Но если если представить, что это чисто учебная задача, то можно, например, взять за признаки не книги, а темы, которых в них затрагиваются, тогда это будет как раз категориальным признаком, с которым, как утверждается в статье, catboost хорошо справляется.
Какой score у Вас получался при загрузке предсказаний по титанику в kaggle?
лучше сразу с полным кодом на питоне.
Боюсь, что не до конца поняла Вас.
Код уже есть, титаник используется в одном из туториалов CatBoots'a — жми
Только не указано, какой в итоге результат получили.
Я хотела использовать его для проверки того, что все правильно установилось. А референса не оказалось.
UFO just landed and posted this here
Блокировки запоминаются, если вы не чистите куки в браузере или работаете всегда под одним и тем же логином. Может, ранее вы блокировали какой-то источник, не будучи авторизованным?

Предложение про удаление постов из заблокированного источника интересное, отнесу ребятам :)
UFO just landed and posted this here

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


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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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