dastapov: (Default)
[personal profile] dastapov
Я тут пытаюсь расширить горизонты своего незнания и у меня есть чайниковый вопрос: вот, допустим, я взял наивный байесовский классификатор (или какие-то вариации на его тему) и начал им что-то там классифицировать.

Пока у меня с десяток классов - все, естественно, идет неплохо. А если я захочу, чтобы у меня было 100500 классов, то, естественно, классификатор у меня получится МЕЕЕЕДЛЕННЫЙ. А я хочу быстрый :)

Соотвественно, вопрос - куда бежать, если у меня 100500 классов, и 100-500 фич?

(Это я читаю про то, как работает akinator.com)

UPD: вот мой же вопрос на stats.stackoverflow.com со всем связанным матаном.

UPD: http://habrahabr.ru/blogs/artificial_intelligence/84364/ читал и использовал как один из основных источников информации

(no subject)

Date: 2011-01-07 09:47 pm (UTC)
From: [identity profile] n0mad-0.livejournal.com
э, а в чем сложность? тут же не квадратичный рост по числу классов - тебе не нужно каждый с каждым сравнивать, а лишь для каждого посчитать апостериорную вероятность, а потом отсортировать?

(no subject)

Date: 2011-01-07 10:21 pm (UTC)
From: [identity profile] http://users.livejournal.com/_adept_/
А вот если еще начать выбирать вопросы (как делает акинатор), то апостериорную вероятность придеться по многу раз обновлять-пересчитывать, и тут-то и наступает опа.

(no subject)

Date: 2011-01-07 09:51 pm (UTC)
spamsink: (Default)
From: [personal profile] spamsink
Где про это читать?

(no subject)

Date: 2011-01-07 10:25 pm (UTC)
From: [identity profile] http://users.livejournal.com/_adept_/
Я добавил в пост ссылку на вопрос на stackexchange с "матаном".

Можно (и нужно) еще читать http://habrahabr.ru/blogs/artificial_intelligence/84364 , где та же математика, но подробнее все расписано.
Edited Date: 2011-01-07 10:31 pm (UTC)

(no subject)

Date: 2011-01-07 09:58 pm (UTC)
From: [identity profile] aamonster.livejournal.com
Вариации на тему quadtree?
(можно ещё использовать сеть Кохонена, поиск главных компонент или ещё как уменьшить размерность пространства параметров - чтобы quadtree строить не по 100 фичам, а по 2-5)

Таким образом резко уменьшаем число проверяемых классов и радуемся.

(no subject)

Date: 2011-01-07 09:58 pm (UTC)
From: [identity profile] aamonster.livejournal.com
Да, всё - от балды, т.к. реально с такой задачкой не сталкивался (классов у меня всегда мало).

(no subject)

Date: 2011-01-07 10:01 pm (UTC)
From: [identity profile] aamonster.livejournal.com
Тьфу, чёрт, вспомнил почти стандартный подход: кластеризуем классы (можно иерархически), затем первый классификатор ищет ближайшие кластеры, второй уже работает по кластеру и ищет ближайшие классы в нём. Если иерархически (на 100500 объектов имеет смысл) - то больше двух проходов.

Собственно, вариации на тему quadtree - по сути, тот же подход, просто кластеры тупо выбираем.

(no subject)

Date: 2011-01-09 04:56 pm (UTC)
From: [identity profile] http://users.livejournal.com/_adept_/
А применительно к описаной прикладной задаче как предполагается группировать "то, что угадываем" в кластеры?

Я как-то не вижу подходящего решения. Подумаю еще.

(no subject)

Date: 2011-01-07 10:02 pm (UTC)
From: [identity profile] n0mad-0.livejournal.com
100-500 фич это не так уж и много. в классификации текстов/изображений больше встречается.

(no subject)

Date: 2011-01-07 10:08 pm (UTC)
From: [identity profile] aamonster.livejournal.com
1. http://lurkmore.ru/100500
2. 100500 не фич, а классов. Совершенно другой расклад (попроще, по ходу).

(no subject)

Date: 2011-01-07 10:14 pm (UTC)
From: [identity profile] n0mad-0.livejournal.com
а. ты намекаешь, что в "100500 классов, и 100-500 фич" имелось в виду 100500 и фич и классов? =)

ну ок. тогда еще random projections в копилку dimension reduction methods.

(no subject)

Date: 2011-01-07 10:17 pm (UTC)
From: [identity profile] http://users.livejournal.com/_adept_/
Не, фич именно 100-500. Ну, максимум, тысячи их :)

(no subject)

Date: 2011-01-07 10:25 pm (UTC)
From: [identity profile] aamonster.livejournal.com
Я изначально текст понял "классов до %уя, а фич от 100 до 500". (100500 == до %уя). Хотя, кажется, тут и того и другого до %уя (если задачку акинатора решать наивным байесовским классификатором - то так оно и будет... но такой классификатор - едва ли не худшее, что можно придумать для такой задачки. В конце концов, для каждого объекта определены не все фичи, а лишь те, по которым мы задаём вопросы - и значение у них всегда 0 или 1)

И вообще, игра "животные" (см. http://en.wikipedia.org/wiki/Timeline_of_computer_viruses_and_worms ) - это 1975 год. Без всяких байесовских классификаторов. Примитивно, я сам такое в детстве на бейсике писал. И имеет смысл идти не от байесовского классификатора, а от дерева решений для такой игры - вводя в неё возможность неверных ответов и использования "лишних" вопросов для уточнения.

(no subject)

Date: 2011-01-07 10:41 pm (UTC)
From: [identity profile] http://users.livejournal.com/_adept_/
Не, ну дерево - это вобще как-то стремно, его ж задолбаешься обновлять.

(no subject)

Date: 2011-01-07 11:20 pm (UTC)
From: [identity profile] aamonster.livejournal.com
Как раз обновлять проблем нет (в игре "животные" обновление сводилось к добавлению одного нового внутреннего узла).
Вопрос не в обновлении, а в прощении ошибок - раз, в балансировке дерева (чтобы не вырастали мегадлинные цепочки вопросов) - два. Ну, наверное, ещё что-то.

И вообще, где дерево - там и лес ;-)

(no subject)

Date: 2011-01-09 04:57 pm (UTC)
From: [identity profile] http://users.livejournal.com/_adept_/
Мегадлинные - это пол-беды. Вот то, что там половина вопросов будет выглядеть совершенно не к месту - это точно беда.

(no subject)

Date: 2011-01-09 08:00 pm (UTC)
From: [identity profile] aamonster.livejournal.com
_Будет выглядеть_ - неважно. Влияет только на длину цепочки.
А вот сокращение длины цепочки - интересная задача.
Я тут подумал - нарисовались забавные намётки решения:
1. Держим не одно дерево, а целый лес.
2. Вопросам ответам присваиваем показатель ценности - грубо говоря, количество информации, полученной нами при движении вниз по дереву.
Навскидку за основу берём энтропию: если для данного узла дерева с вероятностью p ответ "да" и q - ответ "нет", то веткам добавляем -log(p) и -log(q) к их ценности.
3. С определённой вероятностью (зависящей текущей набранной "ценности" и от сбалансированности остатка дерева) бросаем поиск по текущему дереву и перескакиваем на другое.
4. С определённой вероятностью бросаем поиск по текущему дереву, тупо добавляя в него вопрос из другого.

Только я не настоящий сварщик - в смысле, это ни разу не моя специализация, я всё больше по анализу изображений.

(no subject)

Date: 2011-01-09 08:06 pm (UTC)
From: [identity profile] aamonster.livejournal.com
Да, "вопрос не к месту" характерен тем, что для него p<<q или q<<p. Так что ещё один вариант случайных действий - с некоторой вероятностью (не 100%, т.к. потом может выясниться, что вопрос нормальный, и набирать по нему статичтику есть смысл) скипнуть такой вопрос, сразу перейдя к ветке с бОльшей вероятностью. Возможно, кстати, хватит и такого варианта - получим некое странное дерево, где каждый узел имеет не двух детей, а N подузлов, у каждого из которых по два ребёнка. Т.е. чередуются уровни случайных переходов (один вариант из N выбираем случайно, определяя вероятности по сбалансированности поддеревьев) и переходов по да/нет.

(no subject)

Date: 2011-01-07 10:22 pm (UTC)
From: [identity profile] n0mad-0.livejournal.com
можно я порекламирую презенташку шаристого коллеги на эту тему?

http://www.machinelearning.ru/wiki/images/7/78/BayesML-2010-Yangel-Akinator.pdf

(no subject)

Date: 2011-01-07 10:31 pm (UTC)
From: [identity profile] http://users.livejournal.com/_adept_/
А я с коллегой уже общался в email, как выясняется, и получил от него "приборы и материалы", которые лягли в основу этой презентации :)

Собственно, мне интересно, как развить вот этот результат, т.к. он таки действительно работает за O ( персон * вопросов * вариантов ответов ), что очень быстро превращается в О(дофига).

(no subject)

Date: 2011-01-08 10:51 am (UTC)
From: [identity profile] major-m.livejournal.com
Вы скорее всего оперируете матрицей размера O(C, Q), где C --- число персон, а Q --- число запросов. Я думаю, что число ответов ограничено константой, и не беру их в расчет. Давайте назовем ее базой.

Если Вы хотите использовать именно NBC, то Вам скорее всего потребуются отсечения. Если я верно все понял, Вы можете рассчитывать на однозначность ответов. Т.е. если персонаж Вася хороший, то P( хороший, да, Вася)=p, а P(хороший, нет, Вася) можно принять равным нулю.
Также можно выбрать для каждого персонажа набор релевантных вопросов, а все остальное занулить, соответственно распределение вероятностей нужно будет отнормировать. Получается что-то вроде сужения координат.

Правда это мои теоретические догадки :)

(no subject)

Date: 2011-01-09 04:58 pm (UTC)
From: [identity profile] http://users.livejournal.com/_adept_/
Я попробовал реализовать такой вариант параллельно с существующим и сравнивать результаты их работы - и такое упрощение часто и крупно лажает.

На самом деле ведь почти на любой вопрос кто-то отвечает "да", кто-то - "нет", а кто-то - "может быть"

(no subject)

Date: 2011-01-07 10:39 pm (UTC)
From: [identity profile] insa.livejournal.com
А что за задача?

(no subject)

Date: 2011-01-07 10:45 pm (UTC)
From: [identity profile] http://users.livejournal.com/_adept_/
Ну, в посте же ссылки на akinator.com и stackexchange и Хабрахабр - там задача и описана и показана.

(no subject)

Date: 2011-01-07 10:48 pm (UTC)
From: [identity profile] kzn.livejournal.com
А почему бы не использовать дерево принятия решений? При поверхностном прочтении вполне подходит.

(no subject)

Date: 2011-01-07 11:10 pm (UTC)
From: [identity profile] http://users.livejournal.com/_adept_/
При таких количествах дерево будет фигово работать: во-первых, оно будет глубокое; во-вторых один "не такой" ответ - и все, шансов нету; в-третьих при добавлении новых subject-ов его надо будет мучительно перестраивать.

(no subject)

Date: 2011-01-07 10:55 pm (UTC)
spamsink: (Default)
From: [personal profile] spamsink
В обсуждении на хабрахабре вспомнили 20q.net, которому уже много лет (и карманные игрушки есть, довольно неплохие для детей), и который работает почти так же, как и акинатор, но с одним существенным отличием: акинатор первый, кто кроме Байеса еще смотрит на типичные паттерны ответов (все "да", все "нет", все "не знаю", "да-нет-да-нет", и т.п.) и ловит их.

(no subject)

Date: 2011-01-07 11:09 pm (UTC)
From: [identity profile] http://users.livejournal.com/_adept_/
Хм. А откуда такая уверенность, что они их как-то специально обрабатывает?

Я вижу, что там просто забиты "Someone who click on No all the time" и т.п. в качестве вариантов ответов, и всё.

(no subject)

Date: 2011-01-07 11:35 pm (UTC)
spamsink: (Default)
From: [personal profile] spamsink
Когда все ответы одинаковые, это еще можно подвести под модель, а когда да-нет-да-нет?

Хм, странно. Зигзагообразную оследовательность "да-возможно-не знаю-скорее, нет-нет-скорее, нет-..." поймал: Someone who clicked on all the options in order (I just wanted to see what would happen... I'm bored, okay?!)

а "да-нет-да-нет" - не поймал. Может быть, правда, я сам где-то сбился.

Edited Date: 2011-01-07 11:39 pm (UTC)

(no subject)

Date: 2011-01-08 08:00 am (UTC)
From: [identity profile] fregimus.livejournal.com
В зависимости от того, как метризуется пространство классов, можно попробовать GBM (Gradient Boosting Machine) или Random Forests. Я бы начал эксперименты с первого типа, если пространство классов имеет метрику низкой размерности, и со второго, если размерность велика.

(no subject)

Date: 2011-01-09 04:59 pm (UTC)
From: [identity profile] http://users.livejournal.com/_adept_/
Спасибо большое, я ни про первое, ни про второе раньше не слышал. Буду читать.

(no subject)

Date: 2011-01-08 08:23 am (UTC)
arech: (Default)
From: [personal profile] arech
Спасибо за поднятую тему, очень любопытно было ознакомиться. Удивительно, насколько изначально простые идеи могут давать сильные результаты :)

Машинное обучение тоже сейчас интенсивно копаю, т.к. надеюсь применить к одной своей задачке, но у меня там сначала data mining и потом exploiting, поэтому смотрю разные эволюционные методы, где это воедино слито. Жутко интересно это всё таки :)

Кстати, в качестве небольшого (офф?)топика - а вы не знаете ли хорошей поисковой системы по всяким (около-)научным публикациям и сайтам? Если гугель спрашивать в чистом виде, то очень утомляет продираться сквозь тыщи спамерских или барыжно-спрингеровских сайтов, когда нередко всё то же лежит в открытом доступе на сайте какого-нить нижне-оклахомского едушника и не отсвечивает за 101 страницей SERP'a... Пока остановился на своём варианте custom search, но вопрос его полноты, конечно, не простой. Может знаете более хорошие варианты?

(no subject)

Date: 2011-01-08 10:44 am (UTC)
arech: (Default)
From: [personal profile] arech
Да, но там есть очень далеко не всё.

(no subject)

Date: 2011-01-08 08:58 am (UTC)
From: [identity profile] balmerdx.livejournal.com
В общем случае тебе ничто не поможет - слишком велика размерность задачи. Но наверняка для твоего конкретного случая можно либо уменьшить количество параметров, либо использовать алгоритм который ошибается на сложных данных, но достаточно редко.

(no subject)

Date: 2011-01-08 09:01 am (UTC)
From: [identity profile] balmerdx.livejournal.com
Да!, но вообще если у тебя всеголишь 100000 объектов и целых 100 параметров для классификации, то скорее всего у тебя просто слишком много параметров.

(no subject)

Date: 2011-01-09 05:00 pm (UTC)
From: [identity profile] http://users.livejournal.com/_adept_/
Много? Почему это 100 для 100К - это много?

(no subject)

Date: 2011-01-09 10:38 pm (UTC)
From: [identity profile] balmerdx.livejournal.com
Потому что два в сотой степени это огого как много. Даже 1.5^100 это восемнадцатизначное число. То есть либо твои параметры не имеют никакого отношения к этим объектам, либо имеют но ооочень слабое. Максимум, что мне кажется логичным - это если часть параметров имеют отношение к одним объектам, а часть параметров к другим объектам. Тут тебе кластеризация поможет, как говорили выше. Либо более тщательно задачу опиши.

(no subject)

Date: 2011-01-14 06:44 pm (UTC)
From: [identity profile] kirovjenya.livejournal.com
Весь инет уже полон рекламой "Взламываем за 15$". Оперативно мошенники сработали.

Feature Selection

Date: 2013-01-15 10:39 am (UTC)
From: [identity profile] denis bazhenov (from livejournal.com)
Довольно очевидный подход состоит в том чтобы уменьшить количество классифицируемых признаков. Количество классов уменьшить нельзя, а вот классифицируемых признаков, можно. Некоторые методы уже приводили тут, еще один довольно простой метод – Feature Selection http://bazhenov.me/blog/2012/12/10/feature-selection.html

Profile

dastapov: (Default)
Dmitry Astapov

May 2022

M T W T F S S
       1
2345678
9101112131415
161718 19202122
23242526272829
3031     

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags