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

6 篇文章 0 订阅
1 篇文章 0 订阅

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

一、测试数据

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

用户ID商品ID评分
11015
11023
11032.5
21012
21022.5
21035
21042
31012.5
31044
31054.5
31075
41015
41033
41044.5
41064
51014
51023
51032
51044
51053.5
51064

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

 101102103104105106107
1532.50000
222.552000
32.50044.505
45034.5040
543243.540


三、使用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


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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值