我对一些对象执行两两比较并估计相似性
Item-1,Item-2,Similarity
11, 16, 0.9
11, 18, 0.5
11, 21, 0.9
12, 19, 0.8
12,22, 0.9
12, 24, 0.3
我现在希望基于阈值创建集群,例如,阈值为0.8,我希望创建如下列表:
{11,16, 21}
{12,19,22}
with threshold > 0.8
在LINQ中有办法做到这一点吗?我找到了几种从列表生成对的方法,但是我需要反向操作。
假设您有一个这样的对的集合,其属性为Item1
, Item2
和Similarity
,其中前两个是整数,第二个是双精度。
var threshold = 0.8f;
var sets = pairs.Where(p => p.Similarity > threshold)
.GroupBy(p => p.Item1, p => p.Item2)
.Select(g => new [] { g.Key }.Union(g));
您可以使用
获取所请求的组 items.Where(i => i.Similarity >= .8).GroupBy(i => i.Item1)
然后是group.Key
+ group.Select(i => i.Item2)