Вопрос

Мне нужно отсортировать базу продуктов на рейтингах пользователей.

Предположим, у нас есть 3 продукта {а,беременный,в} И у нас есть обратные данные пользователя об этих продуктах. Не важно, какой пользователь возвращает нам (этот вопрос не о корреляционной фильтрации, если вы знакомы с ним - интересы пользователей здесь не так)

Каждая из этих линий ниже - это обратная связь от пользователей, когда они пытались сравнить 3 продукта:

150 очков - b 0 баллов (Этот пользователь только что рассказал нам, что он думает о 2 продуктах A и B и по сравнению с A и B, хотя, если он даст 150 пунктов, то B стоит 0 баллов)

150 очков - C 20 очков

C 200 баллов - 10 очков (Несмотря на предыдущий этот пользователь считает, что C лучше, чем а)

200 очков - B 40 очков - C 100 баллов

150 очков - B 50 баллов

150 очков - B 20 очков

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

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

Любая помощь или советы ценится.

/********************************************************************************/

Вы не можете просто добавить очки и рассчитать среднее значение точек продукта, потому что важно, как он получил свои очки. а получил 800 очков против беременный - тогда в Получить 10 очков против а как это:

A 200 - B 0

A 200 - B 0

A 200 - B 0

A 200 - B 0

C 10 - 0 (это означает, что C лучше а)

Так определенно а лучше, чем беременный Но с небольшими 10 очками в Получил лучшее звание от а

/********************************************************************************/

Это было полезно?

Решение

У вас есть некоторые проблемы. Добавьте рейтинг C 0 - B 20 И у тебя есть круг, где C <B <A <C.

И, конечно, ваш заказ не только не транзит ( от <b <c не следует <c ), это также не полное (могут быть элементы, которые вы не можете решить, что лучше, потому что голосование пользователя не было сделано даже через другие элементы.

Что вы получаете, это Отключен, направлен, конечный график. Анкет (Используйте направление краев, чтобы сказать, какой элемент (узел лучше).

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

Может быть, теория заказа по математике может помочь вам: ищите Теория порядка, частичный порядок, Hasse Diagram.

Чтобы сделать это более практичным:

Используйте двухмерный массив с строкой и столбцом на элемент. В ячейке (A, B) вычислите сумму рейтингов. Начиная с определенного элемента A, следуйте всем позиционированным (> 0) соединениям, пока вы не достигнете узеля, который не имеет положительных подключений, либо вернетесь к узел, который вы уже посетили. Эти узлы - ваши решения.

Другие советы

А Бейсейская оценка система Может быть, ваш лучший выбор - он учитывает голоса и относительное количество голосов, которые имеет предмет, чтобы дать ему взвешенную оценку.

Я думаю, что вам нужно рассказать о том, как каждый человек проголосовал за каждый продукт - например: человек 1 голосовал: 100 за A, 50 за B и 0 за C Person 2 проголосовали 0 за 200 за B и 80 за C

Это должно быть переведено в:
человек 1 проголосовал 3 за A, 2 за B и -1 за c
человек 2 проголосовал -1 за A, 3 за B и 2 за c

где я использую:
3 за самый высокий голос
2 для второго по величине
1 для самого низкого
И -1, если они проголосовали 0 (указывают на то, что им не нравилось/не приняли товар) продукт)

В любом случае моя первоначальная мысль об этом

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top