我的目标是根据两个用户的属性来计算它们之间的相似度。例如,让我们考虑一个球员,并考虑年龄,工资,和分数作为属性。
另外,我还想按重要性的顺序对每个属性进行加权。在我看来,年龄比薪水和分数更重要。例如,假设我们用欧几里得距离来计算相似性。
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之间的相似性,我可以这样做。
( (20-24)^2 + (60-50)^2 + (85-100)^2 )
现在我们也要加权,所以在欧几里得距离越小,两个物体的相似性就越接近。如前所述,年龄是最重要的,因此我们将按以下方式分配权重
( 0.60*(20-24)^2 + 0.20*(60-50)^2 + 0.20*(85-100)^2 )
我的方法正确吗?另外,我是否应该考虑其他算法,例如余弦相似来计算相似度?
发布于 2016-11-04 15:02:17
我目前正在进行一个项目,该项目涉及计算不同实体之间的度量,因此我熟悉您的问题。
在你的例子中,好的事情是你没有各种各样的混合类型的特性(例如文本或分类等等)。年龄、薪水和分数都是数字,正如评论中已经提到的,你应该做的第一件事就是正常化。这是一个“必须做”,因为如果你不这样做,那么有一个危险,一个特点将占主导地位时,计算距离。
你必须小心,检查你的数据,并在必要时进行清理。例如,当年龄为200岁时,坏值会破坏您的标准化,而大多数缩放的年龄值将在较低的部分(接近于零)结束。
关于权重和加权欧几里德的计算,你是对的。这些权重的和值为1(如在示例0.6+0.2+0.2 =1中所示)。
关于使用何种距离度量,这是一个很好的问题。有一群人。例如检查https://docs.scipy.org/doc/scipy/reference/spatial.distance.html
但是根据我的经验,我会选择,欧几里德,尽管你应该很少尝试,并且检查它是如何工作在你的数据上的。
https://stackoverflow.com/questions/40383029
复制相似问题