相似度算法

杰卡德相似度(Jaccard Similarity)

杰卡德相似度,即给定两个集合 A,B,A 与 B 交集的大小 和 A 与 B 并集的大小相除的结果。结果系数越大,表示相似度越高。

在图当中,用两个点各自的邻居构成的集合作为 A 和 B(均不包含这两个点),并进行运算。即用它们的共同邻居数除以它们所有邻居数:

杰卡德相似度的 [命令] 为 : algo(jaccard)

杰卡德相似度的 [配置] 如下:

名称 类型 规范 描述
ids1 []int > 0, 必填 第一个点的 ID,填写多个 ID 可进行批量计算
ids2 []int >0 第二个点的 ID,填写多个 ID 可进行批量计算。填写本项时将 ids1 与 ids2 两两配对进行计算,不填写本项时将 ids1 与图集中所有不同的点两两配对进行计算
limit int >0, 必填 设置ids2时:需要返回的结果的条数,-1表示返回所有结果;
不设置ids2时:为 ids1 中每个点返回与其最相似的 N 个点,-1表示为 ids1 中每个点返回所有与其有相似度的点
order string ASC,DESC 对返回结果进行排序,不设置则不排序;仅在设置ids2时有效

示例 1:计算 集合(id=1,2,3) 与 集合(id=4,5,6) 任意两点之间的的杰卡德相似度,对结果进行降序排列,返回全部结果。

algo(jaccard).params({ ids1: [1,2,3], ids2: [4,5,6], limit: -1, order: 'DESC' });

示例 2:对于 集合(id=1,2,3) 中的每一个点,计算出与该点最相似的 4 个点

algo(jaccard).params({ ids1: [1,2,3], limit: 4 });

在 Ultipa-Manager 中示例 2 的结果如下图所示:

余弦相似度(Cosine Similarity)

余弦相似度,两个点的N个不同属性组成两个 N 维向量,计算这两个 N 维向量的夹角的余弦值来表示他们的相似度。在 Ultipa 服务当中,结果在 0 到 1 之间,结果越大,表示相似性越高。

余弦相似度的 [命令] 为:algo(cosine_similarity)

余弦相似度的 [配置] 为:

名称 类型 规范 描述
node_id1 int > 0, 必填 node1 的 ID
node_id2 int > 0, 必填 node2 的 ID
node_property_names []string node 的属性名,逗号隔开,必填 参与计算余弦相似度的属性名称列表,填写至少两个属性,属性类型为数值

示例:通过属性,salary 和 age 计算点(id=12)和点(id=21)的余弦相似度

algo(cosine_similarity).params({
  node_id1: 12,
  node_id2: 21,
  node_property_names: ["salary", "age"]
});

在 Ultipa-Manager 的运行结果如图所示: