2010-10-30 24 views
3

例如,如果是巧克力,冰淇淋,甜甜圈,...的選擇,爲他們的優先順序。什麼是一些好方法來計算差異或關閉2用戶選擇的分數?

如果用戶選擇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位的這些差異。

回答

2

你可以

  1. 計算序列之間的編輯距離;
  2. 減去序列長度的編輯距離;
  3. 除以序列
  4. 乘以它的長度通過百

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

編輯距離基本上是在序列中的兩個變換序列中的一個所需的操作數。因此算法是Levenshtein distance algorithm


實例:

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 
3

分配每個字母項的整數值從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

計算它的最直接的方法是Levenshtein distance,這是將一個字符串轉換爲另一個字符串時必須進行的更改次數。

Levenshtein距離爲任務的缺點是它不能衡量產品本身之間的親密關係。即你不會知道AJ如何彼此靠近。例如,用戶1可能喜歡甜甜圈,並且用戶2可能喜歡包子,並且您知道大多數喜歡第一的人也喜歡第二。從這些信息可以推斷出用戶1通過沒有相同的元素來做出接近用戶2的選擇的選擇。
如果您遇到這種情況,你將不得不使用兩種之一:統計方法來選擇或recommendation engines之間推斷的相關性。

相關問題