【问题标题】:how to implement Jaccard Similarity in C#如何在 C# 中实现 Jaccard 相似度
【发布时间】:2012-08-24 14:25:17
【问题描述】:

我在计算集合(位向量)的 Jaccard 相似度时遇到了这个问题:

v1 = 10111

v2 = 10011

交叉点大小 = 3; (我们怎样才能找到它?)

联合大小 = 4,(我们怎样才能找到它?)

Jaccard 相似度 = (交集/并集) = 3/4

但我不明白我们如何找出两个向量的“交集”和“并集”。

请帮帮我。

【问题讨论】:

    标签: c# vector similarity


    【解决方案1】:

    大概你对“交集”和“联合”的定义是“在两个值中设置的位数”和“在任何一个值中设置的位数”......这是(假设你使用类似@987654324 @ 或 long 用于向量):

    int intersection = CountBits(v1 & v2);
    int union = CountBits(v1 | v2);
    

    接下来你只需要实现CountBitsThis Stack Overflow question 可以帮到你。

    您可能想要使用BitArray,而不是使用intlong。这有AndOr 方法,它们看起来 好像它们不会改变原始值,但它并不完全清楚。当然,您需要找出计算在 BitArray 中设置的位数的最佳方法 - 只需 array.Cast<bool>().Count(bit => bit) 就可以了。

    【讨论】:

    • 我在数组中保存了位,如何将其转换为向量
    • @AML:嗯,你不需要——你可以只计算两个数组中存在的位,或者任何一个中都存在的位。如果没有更多关于您如何代表任何事物的信息,很难进一步帮助您。请阅读tinyurl.com/so-hints
    猜你喜欢
    • 2018-01-02
    • 1970-01-01
    • 2017-03-27
    • 1970-01-01
    • 2022-01-04
    • 1970-01-01
    • 2021-09-01
    • 2022-07-21
    • 2011-10-05
    相关资源
    最近更新 更多