Java聚类算法处理相似性和不相似性



我正在一个Java项目中工作,我需要对几个引擎匹配用户查询。每个引擎都有一个方法similarity(Object a, Object b),如果对象确实匹配,则返回:+1;-1如果对象确实不匹配;

示例:用户搜索"龙珠"。

  • 引擎1返回"龙珠","龙珠GT","龙珠Z",并声称他们是不同的结果(相似性=-1),无论他们的名字看起来多么相似。这个引擎是精确的,所以它有一个高的"重量"值。引擎2返回100个不同的结果。其中一些与DBZ有关,另一些与DBGT有关,等等。引擎声称它们都"非常相似"(相似度在0.5和1之间)。
  • 系统查询其他多个引擎(10+)

我正在寻找一种方法来构建集群的这个系统。我需要确保相似度接近-1的值可能会在不同的集群中结束,即使许多其他值与它们非常相似。

是否有一个著名的聚类算法来解决这个问题?是否有可用的Java实现?我可以在支持库的帮助下自己构建它吗?我擅长Java(15年以上的经验),但我对集群完全陌生。

谢谢!

明显的方法是使用"1 -相似性"作为距离函数,因此它将从0到2。然后加起来。

或者你可以用1 + similarity,取这些值的乘积,…Or, Or, Or,…

但是由于你显然更信任第一个分数,你可能还想增加它的影响。这没有数学上的解决方案,你必须根据你的数据和偏好来选择权重。如果你有训练数据,你可以为你的方法优化权重,如果它们不能很好地工作或相关,你甚至可能想要丢弃一些排名器。

最新更新