【问题标题】:Calculate Similarities between two arrays of different scales计算两个不同比例的数组之间的相似度
【发布时间】:2014-08-12 16:44:31
【问题描述】:

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

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

  • 满足要求1
  • 满足要求2
  • 满足要求3
  • 年经验,
  • 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 值。

【问题讨论】:

    标签: similarity recommendation-engine


    【解决方案1】:

    您可能可以将任一metric 用于您的应用程序。至少数据并没有表明是特定的。

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

    考虑以下三个用户:

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

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-08-22
      • 2012-03-11
      • 2021-11-18
      • 2015-08-04
      • 2018-08-09
      • 2015-07-21
      相关资源
      最近更新 更多