如何基于二元映射的乘积构建交叉乘积矩阵(R语言)
没问题,这就教你怎么基于已经构建好的二元映射来生成交叉乘积矩阵!先回顾下你已经完成的步骤:你用table()统计了U-ID和A-ID的关联,再转成了二元映射的myTab表格,接下来咱们一步步来构建交叉乘积矩阵。
步骤1:把二元映射表格转成矩阵格式
你的myTab是表格类型,先把它转换成标准的矩阵,方便后续做矩阵乘法:
# 将表格转换为矩阵 M <- as.matrix(myTab)
转换后的M是一个**用户(U-ID)×物品(A-ID)**的二元矩阵:每一行对应一个用户,每一列对应一个物品,单元格里的1表示该用户和物品存在关联,0则表示没有。
步骤2:构建交叉乘积矩阵
交叉乘积矩阵通常有两种常用的形式,你可以根据需求选择:
2.1 用户-用户(U-U)交叉乘积矩阵
这个矩阵的每个元素[i,j]代表用户i和用户j共同关联的物品数量(本质是两个用户向量的点积):
# 计算用户-用户交叉乘积矩阵 uu_cross <- M %*% t(M)
举个例子,从你的数据来看,U-ID=221关联了111和116,U-ID=222关联了111和112,两者共同关联的物品是111,所以uu_cross[1,2]的结果就是1,完全符合预期。
2.2 物品-物品(A-A)交叉乘积矩阵
这个矩阵的每个元素[i,j]代表物品i和物品j被同一用户关联的次数:
# 计算物品-物品交叉乘积矩阵 aa_cross <- t(M) %*% M
比如A-ID=111和116被U-ID=221同时关联,所以aa_cross[1,6]的结果就是1。
可选:归一化处理(比如余弦相似度)
如果你需要的是归一化后的交叉相似度(而不是原始的计数),可以基于上面的基础矩阵进一步计算,比如余弦相似度:
# 用户余弦相似度矩阵 uu_cosine <- uu_cross / sqrt(diag(uu_cross) %*% t(diag(uu_cross))) # 物品余弦相似度矩阵 aa_cosine <- aa_cross / sqrt(diag(aa_cross) %*% t(diag(aa_cross)))
内容的提问来源于stack exchange,提问作者Selrac
相关产品推荐
相关产品推荐

