【问题标题】:How do I use Cosine similarity for this use case?我如何在这个用例中使用余弦相似度?
【发布时间】:2014-11-29 14:33:27
【问题描述】:

如果我有一个查询向量 A 和一个项目向量 B,如果有人可以指导我如何对向量进行加权/标准化(相同的策略),那就太好了。 向量 A 将具有以下组件(property1(二进制)、property2(二进制)、property 3(范围为 0 到 50 的 int)、property4(范围为(0 到 10 的 int)

向量 B 具有相同的属性

我知道使用余弦相似度的这两个向量之间的角度会给我两个向量之间的距离。我想根据相似性创建推荐。

但我不清楚在这种情况下如何规范化属性和/或向量,因为它是 binary+binary_int range +int range。另外,如果我想赋予一个属性比另一个更高的权重,我该怎么做。我有什么选择。

我在网上找到文档的余弦相似度示例,但在这种情况下,向量 A 和 B 不是文档,所以在这种情况下我没有使用 TF-idf。

请指教,

谢谢

【问题讨论】:

    标签: statistics data-mining recommendation-engine cosine-similarity


    【解决方案1】:

    如果您想对 td/idf 使用两个向量之间的传统余弦相似度,那么每个项都是向量中的一个维度。即你需要形成两个新的Vector A'和B',并执行这两者之间的相似性。

    这些向量对每个术语都有一个维度,您有 65 个术语:

    property 1: true and false
    property 2: true and false
    property 3: 0 through 50
    property 4: 0 through 10
    

    所以 A' 和 B' 将是长度为 65 的向量,每个元素将是 0 或 1:

    A'(0) = 1 if A(0) = true, and 0 otherwise
    A'(1) = 1 if A(0) = false, and 0 otherwise
    etc.
    

    显然,您可以看到这是低效的。您实际上不需要计算 A' 或 B' 来使用 td/idf 的余弦相似度;你可以假装你计算了它们并对 A 和 B 执行计算。注意 length(A') = length(B') = sqrt(4) 因为 A' 和 B' 中正好有 4 个。

    td/idf 可能不是您最好的选择,如果您想处理属性 3 和 4 之间的相似性。也就是说,对于 td/idf,属性 3 的值 40 与属性 3 的值不同41 并且与属性 3 的值 12 不同。但是,41 不被认为与 40 比 12“更远”;它们都是不同的术语。

    因此,如果您希望属性 3 和 4 包含一个距离(1 非常接近 2,而 50 距离 2 很远),那么您必须定义一个距离度量。如果您想衡量布尔值的权重大于或小于属性 3 和 4,您还必须定义不同的距离度量。如果这些是您想做的事情,请忘记余弦,只需提出一个值即可。

    这是一个例子:

    distance = abs(A.property1 - B.property1) * 5 + 
               abs(A.property2 - B.property2) * 5 + 
               abs(A.property3 - B.property3) / 51 * 1 +
               abs(A.property4 - B.property4) / 10 * 2
    

    然后相似度=(所有距离的最大值)-距离;

    或者,如果您愿意,相似度 = 1 / 距离。

    你真的可以随心所欲地定义它。如果您需要相似度在 0 和 1 之间,则通过除以可能的最大距离进行归一化。

    【讨论】:

    • 您好伊恩,非常感谢您提供的信息丰富的回复。我知道上面描述的方法一是非常低效的,因为我们将为简单的整数值创建多维向量。我确实同意关于计算距离度量和适当权衡属性的第二种建议方法。不过,我有几个问题:(a)我们在上述情况下计算的曼哈顿距离是吗? (b) 如果我理解这一点,上例中的 (5,5,1,2) 是赋予属性的权重(即属性 1 * 2 的权重高于 3 和 4?)
    • (c) 当我们将属性 3 和 4 除以 51 和 10 时,我们是否将它们归一化以使其值介于 0 和 1 之间,不确定这一步.....
    • 我可以使用here 中描述的最小-最大归一化技术来归一化属性 3 和 4,以便我在 0 和 1 之间获得这些值。然后将属性乘以某个权重常数其次是余弦相似度?
    猜你喜欢
    • 2019-12-11
    • 2020-08-12
    • 2011-01-01
    • 2016-08-14
    • 2022-07-07
    • 2017-12-12
    • 2013-05-24
    • 1970-01-01
    相关资源
    最近更新 更多