Pull to refresh
134
0
Сергей Николенко @snikolenko

User

Send message
В нашем детстве попугаи выражались нецензурно. :)
Честно говоря, всё равно не понял — заменить 0 на -1 я, конечно, совершенно не возражаю, если будет нужно. :) Просто мне кажется, что из того, что у меня для каких-то α и , не следует, что (разумная функция от y и α), как ни определяй.

Ну да ладно.
Простите, что я медленный, но можете дать ссылку?
Я совершенно не против, просто не понял пока что — мне нужно, чтобы

для заданных . Почему это то же самое, что вы написали? Мне казалось, что такой трюк только с линейной регрессией работает…
И что будет?..
Я имел в виду примеры «для приложений в бизнесе»; по первой ссылке очень интересный пример про процессы Дирихле. Кстати, меня во всех примерах очень смущает код вроде
; observe draws from the DP mixture
[observe (normal (get-mean (get-class 1)) (get-std (get-class 1))) 10]
[observe (normal (get-mean (get-class 2)) (get-std (get-class 2))) 11]
[observe (normal (get-mean (get-class 3)) (get-std (get-class 3))) 12]

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

Уступать вручную написанному они, конечно, всегда будут, от универсального решения никто не ожидает иного, просто надо бы, чтобы не на порядки.
Было бы хорошо увидеть конкретные примеры…

Хотя, конечно, даже стандартных библиотек очень не хватает. Я вот недавно столкнулся: нужна была самая обычная логистическая регрессия, но так, чтобы можно было в response variable давать не 0/1, а любую целевую вероятность от 0 до 1; т.е. функция правдоподобия та же самая, просто степени в ней теперь дробные. И нигде в питоне не нашёл! :) Ни sklearn.linear_model.LogisticRegression, ни sklearn.linear_model.SGDClassifier с loss='log' такого не умеют. До сих пор, кстати, не знаю, что делать, пока что чешу левой рукой за правым ухом, запуская glmnet в R через pyper…
Не пугайте заранее, Here I Stand — гениальная штука, её даже просто держать в коллекции приятно. :)

Кстати, время партий указано странно.
«Каркассон» (от 2 до 5 человек, 8+, 15—30 минут)
15-30 минут – это если строго вдвоём и в быстром темпе, а вчетвером за 15 минут только разложиться можно и пару ходов сделать, реальное время партии около часа.
«Маленький мир» (от 2 до 5 игроков, 8+, 40—80 минут)
С 3 и особенно 4 игроками трудно представить, как Small World может меньше полутора-двух часов занимать, там даже просто сделать ходы не так легко за полтора часа, а основная суть ведь в дипломатии, как всегда.
«На том стою» (от 2 до 6 игроков, 18+, 8—12 часов)
А здесь наоборот, слишком пессимистично. Вернее будет сказать «первую партию вы не доиграете», и это нормально; мы, например, за восемь часов сыграли три хода из девяти в первый раз. Но время партии между опытными игроками падает до 4-6 часов.

В общем, сложилось впечатление, что в этом посте Here I Stand играет роль «плохой альтернативы, которую не надо брать»; это как-то неправильно…
Каждый пункт можно наоборот написать, и всё равно будет звучать правдоподобно. :) Например:
Отправка текстовых сообщений давно является самой популярной функцией этого супергаджета. И эта возможность первой была «принята на вооружение» всеми парами мира. Мы отправляем друг другу впечатления о событиях, отчёты о прошедшем дне, фотографии и интимные сообщения. Информационный обмен между партнёрами за последние годы вырос многократно. Для многих людей мобильная переписка является очень удобным способом общения. Но в то же время, при личной встрече парам зачастую уже не о чем поговорить.
Какой смысл в этом? Зачем писать какие-то смски (ужасно неудобный способ) или даже сообщения в соцсетях (более удобный), если дело не срочное и от собеседника ничего не надо прямо сейчас? Специально, чтобы потом было не о чем поговорить? :) Разговаривать-то друг с другом всё равно надо, так лучше иметь что рассказать, чем потом отмалчиваться и портить отношения.
perplexity с ростом числа тем будет, скорее всего, монотонно меняться, это же как правдоподобие фактически

тут нужен метод model selection вроде BIC/AIC скорее
Лично я обычно на глаз подбираю. :)

Вообще существует отдельное большое направление, связанное с непараметрическими байесовскими методами. Ключевые слова — Dirichlet processes, например, Chinese restaurant process. Там получается модель (в том числе и LDA получается), которая сама подбирает число тем. Надо будет как-нибудь реализовать и попробовать это физически.
Мне кажется, вам хотели сказать, что знаменатель у конверсии — это как раз общее число зашедшего/позвонившего народа, и его просто так повышать смысла нету. А вы, наоборот, уменьшили знаменатель, но сумели увеличить при этом числитель, который и является конечной целью.
(3) я всё время работаю в области машинного обучения, и за эти пять лет ни разу пока не встретил другого проекта с большим графом без циклов, но с expectation propagation… :) вот логистическую регрессию да, часто делаю, а такие сложные модели встречаются штучно, и к каждой новый подход всё равно нужен получается…
(2) — именно! чтобы понять, что сломалось, надо понимать, как оно работает; я всеми руками за то, чтобы больше инкапсулировать в библиотеки, но в данном случае всё-таки надо понимать, как работает, потому что пользователь не просто пользуется готовым, а, по замыслу, создаёт новые модели.

Infer.Net я когда-то как раз пробовал; честно говоря, мне не очень понравилось. :) То есть модель закодировалась и даже как-то работала, но ужасно медленно и не то чтобы суперинтуитивно, хотя мы делали как раз в точности то, для чего Infer.Net предназначен — расширение рейтинг-системы TrueSkill. Правда, это было лет пять назад уже, плюс накладывались проблемы с Mono/.NET — опять то, о чём я говорю: хорошая библиотека должна быть написана на си, компилироваться под конкретную архитектуру и дальше давать уже обёртки в разные языки; библиотека под .NET не имеет шансов. :)

Люди используют python вместо C++ потому, что время на разработку сильно сокращается. Вот в моём примере выше с Infer.Net мы пробовали-пробовали, как-то оно всё то работало, то не работало, то работало очень медленно. Так прошли несколько недель… а потом мы плюнули, посидели денёк, вывели формулы для сообщений и закодировали их сами. Этот опыт дал нам большой плюс к пониманию того, как работает наша модель — и этот бонус тут же пригодился, потому что там были кое-какие экстремальные случаи, на которых Infer.Net ломался, и было непонятно, почему. Время разработки на этом только сэкономилось.

Плюс неверно было бы говорить, что мы бы один раз «освоили Infer.Net», а потом всё время «за час долетали»:
(1) понимать, как работает, всё равно было бы необходимо, иначе даже error messages не поймёшь;
(2) поскольку нет единой стандартной библиотеки, с большой вероятностью в следующий раз лучше было бы использовать не Infer.Net, а что-нибудь другое, и всё началось бы сначала.

Уже написанные — ну, например, на python есть фактически стандартные библиотеки scikit-learn и statsmodels. На C++ уже сложнее, есть mlpack, работающий с armadillo, а больше я и не знаю. Понятно, что на R есть всё, но это отдельное удовольствие. И есть стандартные библиотеки для отдельных алгоритмов вроде libsvm, которые как раз работают как я сказал — есть одна библиотека и к ней обёртки для разных языков. Но всё как-то не очень унифицировано пока, а для более сложных моделей так и вовсе ничего стандартного нету.
Я, если честно, ничего не понял. Слышал про вероятностное программирование, но когда слышал, тоже ничего не понял. :)

Понятно, что MCMC работает почти везде, и, наверное, можно написать единую реализацию, которая делает MCMC на широком классе моделей; это само по себе интересно и применимо, конечно. Верно ли я понял, что «вероятностное программирование» — это именно такая реализация?

Если да, то применять MCMC к линейной регрессии — это очень странная идея, разве нет? Там есть замкнутые формулы; для логистической не совсем замкнутые, но всё равно на порядки быстрее MCMC должно быть, по идее.

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

Сорри, что такую ретроградскую позицию занял. :) Вероятно, я чего-то недопонял насчёт того, что на самом деле делают эти языки под капотом. В частности, я действительно не совсем понял, как он понимает, как надо делать вывод. Например, на простом фактор-графе без циклов будет ли он делать всё-таки message passing, как было бы логично? И если да, то как он поймёт, надо ли делать expectation propagation и если надо, то чем приближать?..

В общем, мне кажется, что общая реализация MCMC в максимальной доступной общности — это круто, особенно если она хорошо сделана со всеми известными штуками, которые все самому написать сложно (параллелизацией, например). Но если это всё, то не надо, наверное, таких громких слов про «новое программирование». :)

А что было бы супер-полезно — это хорошая стандартная библиотека базовых алгоритмов машобуча, как lapack/blas для линейной алгебры. То есть всё уже написано, конечно, но есть пока что ситуация «14 competing standards» в каком-то смысле, особенно если на разных языках посмотреть; а базовая библиотека должна быть единой и над ней уже должны быть обёртки для языков, как над lapack'ом.
Михаил, спасибо за приглашение! Вряд ли я смогу о рекомендательных системах что-то радикально новое рассказать Яндексу, но вообще пообщаться и установить связи было бы хорошо. Я часто бываю в Москве, пару раз в месяц уж точно, так что, думаю, всё должно получиться.
Слежу за вашими вопросами и восхищаюсь — вы уже задали кучу правильных вопросов, которые приводят к целым большим направлениям в исследованиях рекомендательных систем.

Например, ваш вопрос выше насчёт «покажи мне новое» приводит к тому, что иногда нам нужно не просто выдать топ-рекомендации, оптимизируя, грубо говоря, суммарный ожидаемый рейтинг, а оптимизировать ещё и что-нибудь другое. Для этого вводят различные метрики разнообразия (diversity, novelty, serendipity и т.д.) [Vargas, 2011; Castells et al., 2011].

А ваш вопрос насчёт «с утра или вечером» приводит к рекомендательным системам, учитывающим контекст (context-aware recommender systems, CARS) [Adomavicius, Tuzhilin, 2010].

Задавайте больше вопросов. :)
Жизнь хабра тоже развивается по спирали. :) Когда-то я писал вводный цикл о рекомендательных системах с примерно тем же по сути содержанием.

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

И совсем уж на правах рекламы — в других статьях того же блога Surfingbird я писал о вероятностных графических моделях, примерно так же «на пальцах»:
Да, про сопряжённые априорные из этого текста не должно было быть понятно. :)
Про них надо отдельно говорить при случае, начиная с монетки.
Рината, конечно, а что с ним не так? Ему же не, пардон за чёрный юмор, серое вещество машиной оторвало, как Финеасу Гейджу? Якобы «утерянные» навыки восстанавливаются обычно за считанные недели.

Information

Rating
Does not participate
Location
Санкт-Петербург и область, Россия
Works in
Date of birth
Registered
Activity