Алгоритмы помощи людям в выборе (например, война с котятами) - PullRequest
12 голосов
/ 20 февраля 2009

Хорошо, я сталкиваюсь с неизбежным дополнением к своей семье и работаю над выбором имен.

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

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

Итак:

  • Как только у вас есть данные, как обрабатывать график и ранжировать имена?

С другой стороны:

  • Какие еще полезные алгоритмы можно использовать для выбора (например, стиль транспортного средства, если вы ищете новую машину)?

-Adam

Ответы [ 10 ]

6 голосов
/ 20 февраля 2009

например, мне нравится Майк лучше Сэма, Сэм лучше Джареда, Джаред лучше Майка

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

6 голосов
/ 20 февраля 2009

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

4 голосов
/ 21 февраля 2009

Посмотрите статьи по машинному обучению на тему «Ранжирование по парному сравнению / предпочтению».

Вот одна статья, с которой вы можете начать: Обучение и рейтинг парных предпочтений

4 голосов
/ 21 февраля 2009

Я не знаю, насколько масштабируем этот алгоритм, но я успешно реализовал его на нескольких сайтах, которые я разработал с рейтингом (адаптировано из Рейтинг IMDB ):

взвешенный рейтинг (WR) = (v / (v+m)) * R + (m / (v+m)) * C

Где:

  • R = среднее значение для котенка (среднее) = (голосов / число проголосовавших)
  • v = количество голосов за котенка = (голосов)
  • m = минимальное количество голосов, необходимое для включения в Топ-100 (около 25 - безопасное число)
  • C = средний голос по всем котятам = (сумма голосов) / (сумма всех проголосовавших)

Приведенный выше алгоритм работает для сайта в стиле войны с котятами, но его не адекватный алгоритм для "экспертной системы" или механизма рекомендаций.

Один подход - и я не могу гарантировать хороший - для механизма рекомендаций будет представлять различные варианты в матрице. Допустим, вы хотели выбрать юбку, вы можете представить различные свойства юбки следующим образом:

             Fashionable     Affordable     Colorful     Practical
Miniskirt        10              5              7            5
Cheer skirt      3               1              10           1
Grass skirt      2               7              2            1
Jean skirt       9               5              3            10

Теперь вы спрашиваете пользователя, какую одежду они хотят носить:

  • [X] Что-нибудь модное?
  • [] Что-нибудь доступное?
  • [] Что-нибудь красочное?
  • [X] Что-то практичное?

Введенные выше данные указывают на то, что пользователь ищет что-то модное и практичное, не заботясь о других свойствах, поэтому его достаточно легко обработать приведенными выше данными следующим образом:

             Fashionable     Practical     Total
Jean skirt       9               10         19
Miniskirt        10              5          15
Cheer skirt      3               1           4
Grass skirt      2               1           3

Этот очень простой, но эффективный подход работает до тех пор, пока вы знаете свойства каждого объекта, который вы сравниваете.

4 голосов
/ 21 февраля 2009

Это неправильная реализация: Вы делаете это неправильно . Это точно правильное применение для алгоритма Она всегда победит .

4 голосов
/ 20 февраля 2009

Я думал, что мы прошли через это, и ответ по-прежнему Джон Скит :) Все остальные данные не имеют значения.

РЕДАКТИРОВАТЬ: Поздравляю КСТАТИ:)

3 голосов
/ 21 февраля 2009

Это алгоритм, который мы использовали:

  1. Выделите один пол на одного родителя. Назначьте этого родителя первичное обозначение для этого пола.
  2. Первичному лицу разрешено, нет, поощряется , чтобы составить список возможных обозначений потомков в зависимости от того, какой прихоть или каприз поражает их воображение в любое конкретное время.
  3. Назначьте другого родителя альтернативой . Альтернатива имеет только одну способность для пола, для которого они не являются первичными, и это вето. Альтернатива может выражать предпочтение одному конкретному варианту по сравнению с другим, но на самом деле просто шутит.
  4. Вето побеждает. Оно не требует никаких оправданий или объяснений (хотя некоторые рекомендуется в тех случаях, когда родители намерены поддерживать свое состояние брачного блаженства ...).
  5. В случаях, когда потенциальным потомком является итерация n> = 2, вы можете обратиться к итерации n = 1 для получения дополнительных предложений по ранжированию. Для большинства ситуаций эту эвристику следует рассматривать как решающий голос .

В нашем случае я был основным в обоих случаях (два мальчика), а NumberOneSon был нашим решающим голосом, когда пришло время выбрать назначение для SecondSon. И тебе лучше поверить, что WifeUnit все в порядке, размахивая своим вето ....

Короче, поздравляю. Воспитание детей - это крик.

3 голосов
/ 20 февраля 2009

Какие еще полезные алгоритмы могут быть используется для выбора [...]?

  1. Поставка супружеской единицы с детскими именами книга.
  2. Ожидайте ввода от супружеской единицы относительно будущих имен детей.

  3. Отклонить оскорбительный выбор

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

Это хорошо сработало для меня, дважды. И нам даже не нужно было использовать самый простой вариант написания 11-го часа!

2 голосов
/ 21 февраля 2009

Я совершенно уверен, что Майк - правильный выбор.

2 голосов
/ 20 февраля 2009

Если вы отслеживаете выигрыши / проигрыши, вы можете предпочесть показывать вам имена с высоким соотношением выигрышей и проигрышей. В конце концов имена, которые вам нравятся, будут всплывать вверх и, скорее всего, будут сравниваться друг с другом. Возможно, вы также захотите добавить вес к именам, которые еще не сравнивались или имели очень мало сравнений.

Отсеять имена после определенного количества потерь, старайтесь не сравнивать одни и те же имена дважды, так как в любом случае это ваше мнение.

Как только вы отфильтруете «сливки урожая» из барахла, вы будете напрямую сравнивать лучшие, стиль соревнования, пока не выберете победителя. (Или просто посмотрите на них вручную)

...