Контекст: я программист с некоторым (наполовину забытым) опытом в области статистики из университетских курсов. Недавно я наткнулся на http://akinator.com и провел некоторое время, пытаясь заставить его потерпеть неудачу. А кто не был? :)
Я решил выяснить, как это может работать. После поиска в Google и прочтения соответствующих сообщений в блоге и добавления некоторых моих (ограниченных) знаний в результирующий микс, я придумаю следующую модель (я уверен, что я буду использовать неправильную запись, пожалуйста, не убивайте меня за это):
Есть Предметы (S) и Вопросы (Q). Цель предсказателя состоит в том, чтобы выбрать субъект S, который имеет наибольшую апостериорную вероятность быть тем субъектом, о котором думает пользователь, с учетом вопросов и ответов, собранных до сих пор.
Пусть игра G будет набором вопросов и ответов: .
Тогда предиктор ищет .
Приоритет для предметов ( ) может быть просто числом угаданных предметов, деленным на общее количество игр.
Предполагая, что все ответы независимы, мы могли бы вычислить вероятность субъекта S для игры G следующим образом:
Мы могли бы вычислить если бы мы отслеживали, какие вопросы и ответы были даны, когда использовались, хотя и по данной теме:
Теперь определяет распределение вероятностей по субъектам, и когда нам нужно выбрать следующий вопрос, мы должны выбрать тот, для которого ожидаемое изменение энтропии этого распределения является максимальным:
Я пытался реализовать это, и это работает. Но, очевидно, что по мере увеличения числа субъектов производительность снижается из-за необходимости пересчитывать после каждого хода и вычислять обновленное распределение для выбор вопроса.P ( S | G ∨ { q j , a } )
Я подозреваю, что я просто выбрал неправильную модель, будучи ограниченным пределами моих знаний. Или, может быть, есть ошибка в математике. Пожалуйста, просветите меня: с чем я должен ознакомиться, или как изменить предиктор, чтобы он мог справиться с миллионами субъектов и тысячами вопросов?