You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何基于二元映射的乘积构建交叉乘积矩阵(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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 12:03:12