计算两个不同尺度阵列之间的相似性

时间:2014-08-12 16:44:31

标签: similarity recommendation-engine

在创建基于内容的推荐器时,我有几个二进制测量,结合整数测量值,我希望比较两个矢量。

例如,考虑以下两个用户和特征t1 - t5,其中的特征可以是,例如:

  • meets_requirement1
  • meets_requirement2
  • meets_requirement3
  • years_experience,
  • years_college

... [ t1 t2 t3 t4 t5]

User1   0    1    1   18    4
User2   1    1    1   15    2
User2   1    1    0    4    8

数据(显然)不是跨行的高斯。如何计算这些用户之间的相似度分数?我是否需要首先将特征标准化?

我正在寻找如下结果(在Python中,只是为了显示结果。我不需要它在Python中。):

a = array([[0, 1, 1, 18, 4],
[1, 1, 1, 15, 2],
[1, 1, 0, 4, 8]])

print squareform(1 - pdist(a, metric='cosine')) 
print squareform(1 - pdist(a, metric='correlation'))
print squareform(1 / (1 +  pdist(a, metric='euclidean')))

产生输出:

[[ 0.     0.994  0.627]
 [ 0.994  0.     0.566]
 [ 0.627  0.566  0.   ]]

[[ 0.     0.991  0.384]
 [ 0.991  0.     0.273]
 [ 0.384  0.273  0.   ]]

[[ 0.     0.211  0.064]
 [ 0.211  0.     0.074]
 [ 0.064  0.074  0.   ]]

但我想确定我并没有过分强调t4& t5值。

1 个答案:

答案 0 :(得分:1)

您可以为您的应用使用指标。至少这些数据并不代表特定的数据。

更重要的是规范化。你需要定义,多少年,例如,更多的经验等同于大学的多少年等等(这些是你需要定义的规范化系数。)

考虑以下三个用户:

UserA   1    1    1   10    5
UserB   1    1    0   10    5
UserC   1    1    1   10    4

谁与UserAUserBUserC更相似?它显然取决于一些语义知识,而不仅仅取决于数字。

如果一个用户有两倍的经验,他的两倍好吗? (这个问题与指标有关。但它可能不是那么重要。)

请注意,correlationcosine实际上应用了规范化。但这不适合具有不同语义的元素。 correlation会将两个向量移动到相等的平均值,并将它们缩放为具有相等的色散。但是这样你可以混合使用 years 和布尔实体。