我正在尝试实现简单的推荐系统,并且我正在尝试了解实现目标的不同方法。
我的数据集包含用户和他们购买的商品。我有关于用户购买了哪些物品的信息以及这些物品的标题形式的描述。
起初我虽然可以使用基于用户的协同过滤方法,但我被困在了这个问题上。我不太确定如何计算布尔数据的相似性。
例如,当我有这样的数据时
1 2 3 4
A 0 1 0 1
B 0 1 0 1
C 1 0 1 1
D 0 1 0 0
E 0 0 1 1
我想为用户E推荐项目,那么在这种情况下我应该如何计算相似度?例如,我从 python 中的 scikit learn 模块中选择了余弦相似度。但我不太确定应该将什么视为输入。根据我的阅读,它应该只是计算相似度的两个用户共有的项目向量。
例如,如果我想计算用户E和C之间的相似性,我的输入应该是什么?因为如果我只输入它们共同的值,那是没有意义的,对吧?因为输入将是 [1, 1] 和 [1, 1] 并且相似度为 1。
然后我尝试像这样输入整个向量:
from sklearn.metrics.pairwise import cosine_similarity
from numpy import array, reshape
c = array([1, 0, 1, 1])
e = array([0, 0, 1, 1])
result = cosine_similarity(c.reshape(1, -1), e.reshape(1, -1))
>>> result is 0.81649658
我认为这种方法更有意义,但根据我对此类推荐的了解,我不确定它是否可以接受。