Какие есть хорошие способы подсчета баллов для определения разницы или выбора 2 пользователей? - PullRequest
3 голосов
/ 30 октября 2010

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

Если пользователь 1 выбирает

A B C D E F G H I J

и пользователь 2 выбирает

J A B C I G F E D H

Какие есть хорошие способы подсчета баллов от 0 до 100, чтобы определить, насколько близки их выборы? Это должно иметь смысл, например, если большинство ответов одинаковы, но различаются только 1 или 2 ответа, оценка не может быть слишком низкой. Или, если большинство ответов просто «сдвинуты на 1 позицию», то мы не можем считать их «совершенно разными» и дать 0 баллов за эти различия только на 1 позицию.

Ответы [ 3 ]

3 голосов
/ 30 октября 2010

Назначьте каждому элементу буквы целочисленное значение, начиная с 1 A = 1, B = 2, C = 3, D = 4, E = 5, F = 6 (остановка на F для простоты). Затем рассмотрите порядок элементов.поместите, используйте это как кратное число. Так, если число является первым элементом, его множитель равен 1, если его 6-й элемент, то множитель равен 6. Определите максимальный результат, который вы можете получить (в основном, когда все в последовательном порядке)

item  a  b  c  d  e  f 
order 1 2 3 4 5 6 
value 1 2 3 4 5 6 
score 1 4 9 16 25 36 Sum = 91, Score = 100% (MAX)

item a b d c e f    
order 1 2 3 4 5 6        
value 1 2 4 3 5 6    
score 1 4 12 12 25 36 Sum =  90 Score = 99%

=======================

order 1 2 3 4 5 6    
item  f  d  b  c  e  a    
value 6 4 2 3 5 1    
score 6 8 6 12 25 6 Sum =  63 Score =  69%



order 1 2 3 4 5 6    
item  d  f  b  c  e  a    
value 4 6 2 3 5 1    
score 4 12 6 12 25 6 Sum =  65 Score =  71%

очевидно, это очень грубая реализация, которую я только что придумалс.Это может не работать для всего.Примеры 3 и 4 поменялись местами на одну позицию, но при этом оценка на 2% ниже (по сравнению с примерами 1 и 2, которые на 1% ниже).Это просто мысль.Я не эксперт по алгоритмам.Возможно, вы могли бы использовать окончательное число и сделать что-то еще для лучшего численного сравнения.

2 голосов
/ 30 октября 2010

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

Недостатком расстояния Левенштейна для вашей задачи является то, что оно не измеряет близость между самими продуктами.Т.е. вы не будете знать, как A и J близки друг к другу.Например, пользователь 1 может любить пончики, а пользователь 2 может любить булочки, и вы знаете, что большинству людей, которым нравится первое, также нравится второе.Из этой информации вы можете сделать вывод, что пользователь 1 делает выбор, близкий к выбору пользователя 2, поскольку они не имеют одинаковых элементов.
Если это ваш случай, вам придется использовать один из двух: статистические методы для определения корреляции между вариантами выбора или рекомендации двигателей .

2 голосов
/ 30 октября 2010

Вы могли бы

  1. Рассчитать расстояние редактирования между последовательностями;
  2. Вычесть расстояние редактирования из длины последовательности;
  3. Разделите это на длину последовательности
  4. Умножьте это на сто

Score = 100 * (SequenceLength - Levenshtein( Sequence1, Sequence2 ) ) / SequenceLength

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


Примеры:

Weights
  insert: 1
  delete: 1
  substitute: 1

Seq 1: ABCDEFGHIJ
Seq 2: JABCIGFEDH

Score = 100 * (10-7) / 10 = 30

Seq 1: ABCDEFGHIJ
Seq 2: ABDCFGHIEJ

Score = 100 * (10-3) / 10 = 70
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...