[推薦算法]基於JACCARD推薦(0,1推薦)

基於JACCARD推薦(0,1推薦)

1、什麼是jaccard?

    傑卡德相似係數(Jaccard similarity coefficient),也稱傑卡德指數(Jaccard Index),是用來衡量兩個集合相似度的一種指標。Jaccard相似指數用來度量兩個集合之間的相似性,它被定義爲兩個集合交集的元素個數除以並集的元素個數

    在我們項目中對於新聞的推薦,每個用戶對新聞的瀏覽可以看做是一個集合。這樣就可以使用jaccard算法實現用戶之間的相似度計算;
    公式如下:  

      

給定兩個n維二元向量A、B,A、B的每一維都只能是0或者1,利用Jaccard相似係數來計算二者的相似性:

1)  代表向量A與向量B都是0的維度個數;

2)  代表向量A是0而向量B是1的維度個數;

3)  代表向量A是1而向量B是0的維度個數;

4 )     代表向量A和向量B都是1的維度個數。

n維向量的每一維都會落入這4類中的某一類,因此:(目前我們的推薦只涉及到二維)

則Jaccard相似係數爲:

   在二維裏面其實就是 AB的一個交集數量/整體元素數量

  



2、jaccard舉例?
    比如我們的用戶對新聞的一個瀏覽數據如下:
   
ABCD 代表的四個用戶 ;1,2,3,4 代表的是四個新聞;1代表看過該新聞,0代表沒有看過該新聞;下面簡單計算一下相似度:

用戶A 和 用戶B 的相似度計算:  M11 就是1   M01+M10+M11 = 4  所以J(A,B) = 1/4 = 25%
用戶A 和 用戶C 的相似度計算:  M11 就是3   M01+M10+M11 = 4  所以J(A,B) = 3/4 = 75%
用戶A 和 用戶D 的相似度計算:  M11 就是2   M01+M10+M11 = 4  所以J(A,B) = 2/4 = 50%

由此可見A跟用戶的相似度排名從高到低就是   C D B ;


時間複雜度分析
1. 假設數據已經存在 A[n][m]  二維數組 n代表用戶 m代表商品    nm的值就是某個用戶是否看過某個商品  值用0,1 標示。0沒看過,1看過。
2.使用jaccard算法比較每個用戶 循環 A[n][m] ,依次比較從0到n的用戶 ; 形成數組B[n1][n2]  存放的數據代表每個用戶n1和用戶n2的相似度;  
for (int i = 0; i < USERCOUNTi++) {
      for (int j = 0; j < USERCOUNTj++) {
           if (i == j) {//自己跟自己的相似度 1 
               similarityMatrix[i][j] = 1;
       }else {
                similarityMatrix[i][j] = computeSimilarity(preference[i], preference[j]);
       }            
}            
時間複雜度爲O2

3.進行評分預測

A 遍歷用戶  for  
        
              B1相似度排序(array)    
           for (int j = 0; j < temp.lengthj++) {
                temp[j] = similarity[j];
            }
           
               B2獲取近鄰
           for (int m = temp.length - 1; m >= temp.length - KNEIGHBOURm--) {
                for(int j = 0; j < similarity.lengthj++) {
                    if (similarity[j] == temp[m] && similarity[j] != 0.0 && j!=i)
                        neighborSerial.add(new Integer(j));/*添加一個整型數據對象 用戶id-1*/
                }    
            }  
              B3遍歷商品   
                  C1遍歷近鄰  獲取評分
時間複雜度爲 O2+ O3+O3  = O2 + 2O3   最終近似爲O3
        

 
發佈了95 篇原創文章 · 獲贊 22 · 訪問量 61萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章