我可能误读了您的数据,但我假设 Item # 会重复,并且它们不是用户独有的。虽然,在您的示例中没有重叠。
如果我是对的并且项目是有限的,那么我将添加一列项目 x 属性(那是很多列),它将创建一个非常稀疏的矩阵,如下所示:
+--------+--------------------+--------------------+--------------------+--------------------+--------------------+--------------------+---+--------------------+--------------------+--------------------+
| | Item 1 Attribute a | Item 1 Attribute b | Item 1 Attribute c | Item 2 Attribute a | Item 2 Attribute b | Item 2 Attribute c | … | Item 9 Attribute a | Item 9 Attribute b | Item 9 Attribute c |
+--------+--------------------+--------------------+--------------------+--------------------+--------------------+--------------------+---+--------------------+--------------------+--------------------+
| User A | 0.593 | 0.7852 | 0.484 | 0.18 | 0.96 | 0.05 | … | | | |
| User B | | | | | | | … | 0.569 | 0.994 | 0.374 |
+--------+--------------------+--------------------+--------------------+--------------------+--------------------+--------------------+---+--------------------+--------------------+--------------------+
然后,给定一个新用户及其属性,您可以使用余弦相似度来查找该数据中与该新行最近的行。我认为这是您问题的关键,如果您正在做用户与用户的相似性,您希望每一行都成为用户。
你当然可以考虑用关于他们的元数据来描述用户,如果你有产品属性,你可以研究更复杂的东西,比如矩阵分解。我不是专家,但我只是想为您指出正确的方向。
当您将每一行设为用户时,您采取的很多方向将取决于此结果矩阵中出现的稀疏程度(多少空白)。另外,列太多?接下来你可以尝试降维。如果您有一个稀疏矩阵,则某些技术比其他技术效果更好。
用户太多?您可以进行集群并将每个用户分配给集群。然后,在下一步中对集群而不是单个用户执行练习。
有很多方法可以做到这一点,抱歉没有太多具体的说法。但是我认为关键是设置数据,以便每一行都是一个用户。