根据属性计算相似度

时间:2016-11-02 14:53:41

标签: algorithm similarity euclidean-distance cosine-similarity

我的目标是根据用户的属性计算两个用户之间的相似度。例如,让我们考虑一个玩家,并考虑年龄,工资和积分作为属性。

另外,我想按重要性顺序对每个属性进行加权。在我的情况下,年龄是一个比薪水和积分更重要的属性。因此,例如,我们假设我们使用欧氏距离来计算相似度。

Given user 1 who is age 20, salary 50, points scored 100

Given user 2 who is age 24, salary 60, points scored 85

Given user 3 who is age 19, salary 62, points scored 80

要计算用户1和用户2之间的相似性,我可以

  

sqrt of((20-24)^ 2 +(60-50)^ 2 +(85-100)^ 2)

现在我们还要在欧几里德距离中添加权重,数字越小,两个对象在相似性方面越接近。如前所述,因为年龄是最重要的,所以我们将按如下方式分配权重

  

sqrt of(0.60 *(20-24)^ 2 + 0.20 *(60-50)^ 2 + 0.20 *(85-100)^ 2)

我的方法是否正确?我还应该考虑其他算法,如余弦相似度来计算相似度吗?

1 个答案:

答案 0 :(得分:1)

我目前正在开展一个项目,涉及计算不同实体之间的测量值,以便我熟悉您的问题。

在您的情况下,好的方面是您没有各种混合类型的功能(例如文本或分类等)。年龄,工资和积分都是数字,正如评论中已经提到的,你应该做的第一件事是规范化。它必须做"必须做"因为如果你不这样做,那么在计算距离时存在一个特征将占主导地位的危险。

您必须小心并检查数据并在必要时进行清理。例如年龄为200的坏值会使您的标准化陷入混乱,大多数按比例的年龄值将会在较低部分(接近零)结束。

你对体重和计算加权欧几里德是正确的。这些权重的和值为1(如示例中所示,0.6 + 0.2 + 0.2 = 1)。

关于使用哪个距离指标,这是一个很好的问题。有很多。例如检查https://docs.scipy.org/doc/scipy/reference/spatial.distance.html

但根据我的经验,我会选择 euclidean ,尽管您应该尝试一下并检查它对您的数据的工作原理。