我的目标是根据用户的属性计算两个用户之间的相似度。例如,让我们考虑一个玩家,并考虑年龄,工资和积分作为属性。
另外,我想按重要性顺序对每个属性进行加权。在我的情况下,年龄是一个比薪水和积分更重要的属性。因此,例如,我们假设我们使用欧氏距离来计算相似度。
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)
我的方法是否正确?我还应该考虑其他算法,如余弦相似度来计算相似度吗?
答案 0 :(得分:1)
我目前正在开展一个项目,涉及计算不同实体之间的测量值,以便我熟悉您的问题。
在您的情况下,好的方面是您没有各种混合类型的功能(例如文本或分类等)。年龄,工资和积分都是数字,正如评论中已经提到的,你应该做的第一件事是规范化。它必须做"必须做"因为如果你不这样做,那么在计算距离时存在一个特征将占主导地位的危险。
您必须小心并检查数据并在必要时进行清理。例如年龄为200的坏值会使您的标准化陷入混乱,大多数按比例的年龄值将会在较低部分(接近零)结束。
你对体重和计算加权欧几里德是正确的。这些权重的和值为1(如示例中所示,0.6 + 0.2 + 0.2 = 1)。
关于使用哪个距离指标,这是一个很好的问题。有很多。例如检查https://docs.scipy.org/doc/scipy/reference/spatial.distance.html
但根据我的经验,我会选择 euclidean ,尽管您应该尝试一下并检查它对您的数据的工作原理。