Pull to refresh

Comments 30

Это восхитительно! После предыдущей недели вот прямо то что надо — вчера в ночь сидел и с упоением, которого не было уже давно, пробовал разные модели, строил графики ошибок на обучающей и тестовых выборках, пробовал Random forest в домашних kaggle задачах! Это было великолепно!
Столь подробная статья про бустинг и случайный лес — лучше подарка на день рождения! Благодарю.

Только это пока не бустинг, про бустинг наверняка будет отдельная статья.

Как автор грядущей статьи про бустинг, если очень хочется пораньше про него почитать, то (спойлер) за основу я возьму свой же опубликованный tutorial. Он будет сильно укорочен, но при этом расширен кодом и картинками по-свежее. За 3.5 года с его публикации изменились пакеты и их скорость, а математика и trade-off-ы никуда не делись.

Про подход LightGBM с их "ансамблем листьев" тоже хотелось бы.

Про xgboost тоже очень хорошо написано, можно пока документацию почитать. Хотя там не хватает мануала, как его тьюнить.

Интересная статья про интерпретацию принятия решения Случайном лесом: http://blog.datadive.net/interpreting-random-forests/
Нет так страшен черт, как его малюют.

Интересно только тем, кто делает домашки и следит за рейтингом


Объявляется конкурс по визуализации данных.


Строите любые картинки на данных по статьям Хабра из нашего соревнования, кидаете в слэке OpenDataScience ("а че это?" – см. ниже ) в канал #mlcourse_open (обязательно с тегом #vis_contest), радуетесь лайкам.
Побеждает тот, у кого больше плюсов


1 место (по плюсам) – 8 баллов в рейтинг
2 место – 6 баллов
3-6 место – 4 балла
7-10 место – 2 балла


Подсчет баллов будет 3 апреля в 00:00 (UTC+3), т.е. вместе с результатами 5 домашки


Если еще нет доступа к указанному слэку
Тогда заполняете заявку на вступление в ODS, указав "mlcourse_open" в графе "Откуда вы узнали об opendatascience?".
Обсуждение курса ведется в канале #mlcourse_open

Вброшу идейку: результаты можно оформлять в markdown и выкладывать на гитхаб, а ссылку на них добавлять в пост (а комменты к посту оставить для комментариев по теме поста :) ).

Немного статистики по 4 домашке.


Распределение оценок



Число посылок по дням



Доля верных ответов по вопросам



Число решений по каждой домашней работе


Немного картинок прошлого контеста по визуализации – на данных опроса перед курсом.


1 место. Чего хотят слушатели курса?




2 место.




3-4 место. Облако слов из фильмов, рекомендованных к просмотру и похожих на "Игру в имитацию"




3-4 место. Последнее – интерактивная демка Plotly.


У меня одного из статьи напрочь ушли формулы? Притом есть соответствующие

, внутри них ссылки на валидные svg с формулами. А в статье не видно…
Chrome, Ubuntu.

Это во всех статьях на хабре сейчас такое, какой-то внутренний глюк сайта. Вы можете посмотреть данную статью со всеми формулами в jupyter notebooks в нашем репозитории https://github.com/Yorko/mlcourse_open/tree/master/jupyter_notebooks
В формуле из раздела Ансамбли (вероятность) непонятно, что такое m. Во многих других загугленных источниках этот момент аналогично пропущен. Нашел вот здесь: http://pavroz.ru/files/mue6.pdf (стр. 166).

m = (n+1)/2

Просто эта формула в домашке используется, поэтому данный момент важен.
После дедлайна мы добавили бы пояснение. Это должно было простимулировать людей на «подумать», либо на «погуглить». Эти действия стимулируют к лучшему пониманию метода, а не простой подстановки чисел в формулу.
«Разминка» заняла меня на час ^^
Она не решается формулой Байеса в чистом виде? У меня как-то объемно получилось, для понимания пришлось дерево рисовать…
Картинку с протностью вероятности сложно интерпретировать. С параметром bw=1, она выгляди совершенно по другому.
image

UPD: Видеозапись лекции по мотивам этой статьи в рамках нового запуска открытого курса (сентябрь-ноябрь 2017).

А насколько корректно использовать непрерывные графики для отрисовки зависимости от количества телефонных звонков? Это же дискретная величина.

Новый запуск курса – 5 февраля 2018 г. Регистрация не требуется, но чтобы мы о вас знали, заполните форму. Главные новости будут в группе ВКонтакте, а жизнь во время курса будет теплиться в Slack OpenDataScience (вступить) в канале #mlcourse_open.

Новый запуск – 1 октября 2018 г., на английском. Подробности – тут.

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

По OOB ерунда написана, нужно исправлять. Во-первых, вероятность не с возвращением (мы же разные объекты из выборки берем, не правда ли? :) Во-вторых, это не 37%, для каждой подвыборки — это просто «валидационная» часть, которая в нее не попала (очевидно, что в зависимости от доли подвыборки эти «37% в пределе» будут существенно меняться). И, в третьих, было бы странно получить модель бэггинга, которая обучилась всего на 63% данных из всех обучающих. Перекрестная валидация как раз и обучает на всех. И, по факту, OOB — это логичное продолжение k-fold разбиения.

37% здесь — это число деревьев (моделей, не объектов), для которых отсутствует элемент в их модельной подвыборке. Если N — число моделей (не l, не объектов), то будет, действительно, вероятность с возвращением. Проверка качества обучения осуществляется на _моделях_, в выборки которых не попал этот объект (т.е. их порядка 37% и будет). OOB — это больше про тестирование моделей, а не про долю объектов.

Это sampling with replacement (с возвращением), не понятно, к чему комментарий, что мы разные объекты берем. При сэмплировнии с возвращением как раз разные объекты и берутся, в каждом вытаскивании независимо, поэтому возможны дубликаты. Bootstrapping.


Нигде не говорится, что модель бэггинга "обучается на 63% данных". Каждая базовая модель обучается на выборке с возвращением из исходной выборки, в которой в среднем 63% уникальных объектов.


Про OOB error действительно неточность. Спасибо, поправим.

В случае выборки с возвращением все так и будет: для каждого дерева 37% объектов, на которых мы не обучались (т.е. весь текст абсолютно верен). Но теперь вопрос: как мы будем проверять _весь_ ансамбль на этих 37%, если только для одной конкретной модели эти данные не попали в выборку (а для другой — частично попали)? Видимо, есть еще один хитрый ход по проверке ансамбля на out-of-bag, ведь точность конкретных моделей здесь нам примерно не нужна.

По поводу выборки с возвращением и нет — я полагаю, что это сильно от реализации зависит. Например, в части библиотек ансамбль могут называть бутстрэп, но по факту там «складной нож» (о нем бы тоже хорошо бы написать здесь — чтобы было понятно, зачем именно бутстрэп нужен). Лично мне метод «складного ножа» по части выборки видится намного более обоснованным, чем бутстрэп по всей: обучаться на повторных данных примерно бессмысленно, а повторения как раз и «скрадывают» часть (~37%) данных. Проще сразу взять 70% или 80%, но без повторений — так в CatBoost с их временными рядами вроде и делают.
По методу OOB.
Решая задачу классификации/прогнозирования, для каждого наблюдения используем только те деревья случайного леса, которые строились по бутстреп-выборкам, не содержащим данное наблюдение, и как обычно используем метод голосования или усреднения.
Допустим, у нас есть 5 наблюдений. Решаем задачу классификации – плохой или хороший клиент. Построили лес из 5 деревьев. 5 бустреп-выборок. Нас интересует наблюдение 1, у него зависимая переменная принимает значение «Хороший клиент». Допустим, наблюдение 1 отсутствует в бутстреп-выборках I и V, выпало из них. Тогда мы берем деревья, построенные по бутстреп-выборкам I и V, не содержащим наблюдение 1, предъявляем им наше наблюдение. Каждое дерево проверяет наблюдение на соответствие своим правилам классификации, вычисляет листовые вероятности классов и соответствующий класс. Например, деревья классифицировали наблюдение 1 так: «Плохой клиент», «Плохой клиент». В итоге побеждает класс «Плохой клиент». Случайный лес ошибочно относит наблюдение 1 к классу «Плохой клиент». В итоге мы подсчитываем количество таких неверно классифицированных наблюдений, делим на общее количество наблюдений и получаем ошибку классификации по методу OOB.
Теперь задача регрессии. Решаем задачу – оцениваем доход. Построили лес из 5 деревьев. 5 бустреп-выборок. Нас интересует наблюдение 1, у него зависимая переменная принимает значение 10. Наблюдение 1 отсутствует в бутстреп-выборках I и V, выпало из них. Тогда мы берем деревья, построенные по бутстреп-выборкам I и V, не содержащим наблюдение 1, предъявляем им наше наблюдение. Каждое дерево проверяет наблюдение на соответствие своим правилам прогнозирования, вычисляет среднее значение зависимой переменной. Например, деревья дали по наблюдению 1 прогнозы: 20, 30. В итоге среднее равно 25. На этот раз нас интересует квадрат остатка – разницы между фактическим значением зависимой переменной 10 и ее спрогнозированным значением 25 (результатом усреднения средних значений, вычисленных деревьями). В итоге по каждому наблюдению вычисляем квадрат остатка, суммируем и полученную сумму квадратов остатков делим на общее количество наблюдений. Получаем среднеквадратичную ошибку по методу OOB.
Only those users with full accounts are able to leave comments. Log in, please.

Information

Founded
Location
Россия
Website
ods.ai
Employees
5,001–10,000 employees
Registered