创建大多数“平均”余弦相似度观察

数据挖掘 推荐系统 相似
2021-10-11 10:44:38

对于推荐系统,我使用余弦相似度来计算项目之间的相似度。但是,对于具有少量数据的项目,我想将它们归为一般的“平均”类别(一般不是数学意义上的)。为了实现这一点,我目前正在尝试创建一个综合观察来表示道路中间点。

因此,例如,如果这些是我的观察结果(行是观察结果,列是特征):

[[0, 0, 0, 1, 1, 1, 0, 1, 0],
 [1, 0, 1, 0, 0, 0, 1, 0, 0],
 [1, 1, 1, 1, 0, 1, 0, 1, 1],
 [0, 0, 1, 0, 0, 1, 0, 1, 0]]

一种我只需在观察中取所有特征的实际平均值的策略将生成一个合成数据点,如下所示,然后我会在进行相似度计算之前将其附加到矩阵中。

[ 0.5 ,  0.25,  0.75,  0.5 ,  0.25,  0.75,  0.25,  0.75,  0.25]

虽然这可能适用于某些相似度指标(例如 L1 距离),但我确信余弦相似度有更好的方法。不过,目前,我无法通过高维空间中线条之间的角度来推理。

有任何想法吗?

2个回答

你正在做正确的事情。从技术上讲,这种平均导致计算一组 N 个点的欧几里得空间中的质心。质心与余弦相似性(归一化向量之间角度的余弦)效果很好,例如Rocchio 算法

正如@Debasis 所写,您所做的是正确的。不要担心相对值,因为余弦相似度关注的是角度,而不是向量的长度。

请注意,您实际计算的平均值是子集中具有该特征的观察值的比例。如果子集足够大,您可以将它们解释为概率。