基于属性计算相似度

Calculating similarity based on attributes

我的objective是根据两个用户的属性来计算他们的相似度。例如,让我们考虑一名球员并将年龄、薪水和积分视为属性。

我还想按重要性顺序为每个属性赋予权重。在我的案例中,年龄是比薪水和积分更重要的属性。因此,例如,假设我们使用欧氏距离计算相似度。

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 )

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

我目前正在从事一个涉及计算不同实体之间的测量值的项目,因此我很熟悉您的问题。

在你的情况下,好消息是你没有各种混合类型的特征(例如文本或分类等)。年龄、薪水和积分是数字,正如评论中已经提到的,您应该做的第一件事就是标准化。这是一个 "must do",因为如果你不这样做,那么在计算距离时就有一个特征将占主导地位的危险。

您必须小心并检查您的数据并在必要时进行清理。例如年龄为 200 的错误值会扰乱您的规范化,并且大多数缩放的年龄值最终会落在较低的部分(接近于零)。

关于重量和计算加权欧几里得,你是对的。这些权重的总和值为 1(如您在示例中所示 0.6+0.2+0.2 = 1 )。

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

但根据我的经验,我会选择 euclidean,尽管您应该尝试一些并检查它如何处理您的数据。