2、推荐引擎以及协同过滤算法的实现

        关于推荐引擎以及协同推荐的介绍,推荐使用IBM文档库的文章,这篇文章深入地解释推荐引擎的发展历史以及目前的应用场景,还深入介绍了协同算法的数学原理以及Mahout实现,本文只是在这篇文章的基础上记录自己学习学协同推荐算法的笔记。

一、测试数据

测试数据使用用户的购买行为记录表,具体数据如下:

用户ID 商品ID 评分
1 101 5
1 102 3
1 103 2.5
2 101 2
2 102 2.5
2 103 5
2 104 2
3 101 2.5
3 104 4
3 105 4.5
3 107 5
4 101 5
4 103 3
4 104 4.5
4 106 4
5 101 4
5 102 3
5 103 2
5 104 4
5 105 3.5
5 106 4

二、使用Excel的数据透视表工具,将行列值三列对应的数据转换成为矩阵的形式

  101 102 103 104 105 106 107
1 5 3 2.5 0 0 0 0
2 2 2.5 5 2 0 0 0
3 2.5 0 0 4 4.5 0 5
4 5 0 3 4.5 0 4 0
5 4 3 2 4 3.5 4 0


三、使用R统计工具,计算出每个用户之间的相似度

编辑函数,根据欧氏距离的公式:



计算用户之间的相似度矩阵。

EuclideanDistanceSimilarity <-  function(M) { 
    row <- nrow(M) 
    s <- matrix(0, row, row) 
    for (z1 in 1:row) { 
        for (z2 in 1:row) { 
            if (z1 < z2) { 
                num <- intersect(which(M[z1, ] != 0), which(M[z2, ] != 0))  #可计算的列 
                sum <- 0 
                for (z3 in num)  sum <- sum + (M[z1, ][z3]  - M[z2, ][z3])^2 
                 s[z2, z1] <- length(num)/(1 + sqrt(sum)) 
                if (s[z2, z1] > 1)  s[z2, z1] <- 1  #标准化 
                if (s[z2, z1] < -1) s[z2, z1] <- -1  #标准化 
             } 
        } 
    } 
    # 补全三角矩阵 
    ts <- t(s) 
    w <- which(upper.tri(ts)) 
    s[w] <- ts[w] 
    s 
}

四、使用到的R代码:

data<-read.csv("D:\\学习数据\\协同推荐\\CF_M.csv",header = F);

EuclideanDistanceSimilarity(data);


          [,1]      [,2]      [,3]      [,4]      [,5]
[1,] 0.0000000 0.6076560 0.2857143 1.0000000 1.0000000
[2,] 0.6076560 0.0000000 0.6532633 0.5568464 0.7761999
[3,] 0.2857143 0.6532633 0.0000000 0.5634581 1.0000000
[4,] 1.0000000 0.5568464 0.5634581 0.0000000 1.0000000
[5,] 1.0000000 0.7761999 1.0000000 1.0000000 0.0000000


五、使用结果,最近临矩阵

         top1 top2 
[1,]    4        5 
[2,]    5        3 
[3,]    5        2 
[4,]    1        5 
[5,]    1        3 

六、推荐矩阵(以用户ID为1的用户推荐):

        101  102  103  104  105  106  107 
   4      0      0      0     4.5    0.0     4     0 
   5      0      0      0     4.0    3.5     4     0


因此,知道了算法的具体显示,即可使用各种程序对协同过滤的数据进行计算了。

你可能感兴趣的:(算法,IBM,文档,引擎)