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

时间:2016-11-10 17:14:41

标签: java cluster-analysis

我正在开发一个Java项目,我需要将用户查询与多个引擎相匹配。 每个引擎都有一个方法相似性(对象a,对象b),它返回:如果对象肯定匹配,则返回+1; -1如果对象肯定不匹配;当存在不确定性时,任何浮动在中间。

示例:用户搜索“龙珠”。

  • 引擎1返回“龙珠”,“龙珠GT”,“龙珠Z”,它声称它们是不同的结果(相似度= -1),无论它们的名字有多相似。该引擎是准确的,因此它具有很高的“重量”值。
  • 引擎2返回100个不同的结果。其中一些涉及DBZ,另一些涉及DBGT等。引擎声称它们都“非常相似”(0.5和1之间的相似性)。
  • 系统查询其他几个引擎(10 +)

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

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

谢谢!

1 个答案:

答案 0 :(得分:0)

显而易见的方法是使用" 1 - 相似性"作为距离函数,因此将从0变为2.然后将它们相加。

或者您可以使用1 + similarity并获取这些值的乘积,...或者,或者,或......

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