C# 在c语言中实现jaccard相似性

C# 在c语言中实现jaccard相似性,c#,similarity,C#,Similarity,我试图理解两个double类型的数组之间的Jaccard相似性,它们的值大于零,小于一 到目前为止,我已经搜索了很多网站,但我发现这两个数组的大小应该相同数组1中元素的数量应该等于数组2中元素的数量。但是我在两个数组中有不同数量的元素。有没有办法实现jaccard相似性?jaccard相似性是两个集合的交集大小除以并集大小的一个索引。在您的情况下,您必须编写代码来找出两个数组中出现了多少个元素,然后将其除以两个数组的大小之和。使用C的LINQ… 假设您有一个名为A和另一个名为B的双精度数组。这将

我试图理解两个double类型的数组之间的Jaccard相似性,它们的值大于零,小于一


到目前为止,我已经搜索了很多网站,但我发现这两个数组的大小应该相同数组1中元素的数量应该等于数组2中元素的数量。但是我在两个数组中有不同数量的元素。有没有办法实现jaccard相似性?

jaccard相似性是两个集合的交集大小除以并集大小的一个索引。在您的情况下,您必须编写代码来找出两个数组中出现了多少个元素,然后将其除以两个数组的大小之和。

使用C的LINQ… 假设您有一个名为A和另一个名为B的双精度数组。这将为您提供Jaccard索引:

var CommonNumbers = from a in A.AsEnumerable<double>()
                    join b in B.AsEnumerable<double>() on a equals b
                    select a;
double JaccardIndex = (((double) CommonNumbers.Count()) /
                       ((double) (A.Count() + B.Count())));

第一条语句获取出现在两个数组中的数字列表。第二个计算索引,即两个数组中出现的交叉点的大小除以一个数组的并集大小,或者说计数加上另一个数组的计数。

很抱歉,上面的答案被标记为正确答案。如果集合完全相同,@AgapwIesu answer中的Jaccard相似系数最大为0.5。至少,您需要乘以分子x2来规范化它,如下所示:

var CommonNumbers = from a in A.AsEnumerable<double>()
                    join b in B.AsEnumerable<double>() on a equals b
                    select a;
double JaccardIndex = 2*(((double) CommonNumbers.Count()) /
                       ((double) (A.Count() + B.Count())));

你在搜索什么网站??我只是在谷歌上搜索了Jaccard相似度和前两个结果,它们都解释了集合不必大小相同,因为我正在搜索的东西是错误的。谢谢你的网站:你能再解释一下吗?这样我也可以实现它。这方面我是新手。谢谢你的帮助:我不知道你在用什么编程语言,或者我可以用C语言中的LINQ来简化它。所以假设你有两个数字数组,称它们为A和B。A有100个项目,B有200个项目。循环A,然后针对每个项目查看B,查看项目/编号是否也出现在那里。你可以在A和B中找到50个项目。Jaccard索引是50/300或1/6或0.1666,其中300是A的大小加上B的大小。这有帮助吗?@GuillermoMunoz它被标记为C,甚至在标题中重复…实际上不应该在那里…但它绝对是C。我想看看LINQ的答案,如果你能用这个更新你的答案,那就太好了。@chancea-我对stackoverflow这个东西还不熟悉,所以当我回去回答他的评论时,我错过了看标签或标题。抱歉。@chancea-我已经添加了另一个答案,其中只有使用LINQ的代码中的答案。我喜欢LINQ——强大但可读——它使代码变得如此简单。希望这能有所帮助。我很想再次收到你的来信。你能解释一下我如何计算数组/linq中每个元素的Jaccards索引吗?你告诉我的方法只给了我一个索引。有没有办法找到数组/linq中每个元素的相似性?我不确定你的意思-两个双数之间的相似性。您的意思是十进制表示法中数字之间的相似性,还是二进制表示法中的二进制相似性?@AqeelAbbas如果您有新问题,请单击“提问”按钮提问。如果此问题有助于提供上下文,请包含指向此问题的链接。人们通常不赞成在评论中提出新问题。@chancea实际上,我正在根据元数据以及图像的视觉内容对图像进行排序。我根据图片的元数据和视觉内容给它们打分。现在我要做的是找到基于图片元数据的分数和基于图片内容的分数之间的相似性。我的老师让我用杰卡德的相似性。这就是为什么我把这个贴在这里。我可能不擅长描述我的问题,但我尽了最大努力来描述它。@GuillermoMunoz请阅读我的上述评论,我想我会更好地理解我在寻找什么。
private static double JaccardIndex(IEnumerable<double> A, IEnumerable<double> B)
{
    return (double)A.Intersect(B).Count() / (double)A.Union(B).Count();
}
List<int> A = new List<int>() { 1, 1, 1, 1 };
List<int> B = new List<int>() { 1, 1, 1, 1 };
Console.WriteLine(A.Union(B).Count()); // = 1, not 4
Console.WriteLine(A.Intersect(B).Count()); // = 1, not 4