修改密码

请输入密码
请输入密码 请输入8-64长度密码 和 email 地址不相同 至少包括数字、大写字母、小写字母、半角符号中的 3 个
请输入密码
提交

修改昵称

当前昵称:
提交
搜索
v4.0
    v4.0

    余弦相似度

    概述

    余弦相似度(Cosine Similarity)是用向量空间中两个 N 维向量间夹角的余弦值来表示这两个向量的相似程度。在图上是用点的 N 个属性构成两个 N 维向量并计算余弦相似度。

    余弦相似度的取值范围是 [0,1],数值越大越相似。

    基本概念

    向量

    向量是高等数学的基本概念,低维空间中的向量是比较容易理解和表达的。下图分别展示了二维空间、三维空间中向量 A、B 和坐标轴之间的关系以及它们之间的夹角 θ

    对图中两点进行比较时,用指定的 N 个数值类属性构成两个 N 维向量。

    余弦相似度

    在二维空间中,两个向量的余弦计算公式为:

    在三维空间中,两个向量的余弦计算公式为:

    推广到 n 维空间,余弦相似度的计算公式如下:

    特殊处理

    孤点、不连通图

    计算两点的余弦相似度理论上不依赖边,无论待计算的两个节点是否为孤点或是否处于同一个连通分量内,都不影响它们余弦相似度的计算。

    自环边

    余弦相似度的计算与边无关。

    有向边

    余弦相似度的计算与边无关。

    结果和统计值

    以下面包含 4 个产品点的图为例(已忽略边),使用产品的 price、weight、width 和 height 属性构成向量:

    算法结果:分别计算 product1 与其他 3 个产品的余弦相似度,返回 node1node2similarity 三列

    node1 node2 similarity
    1 2 0.9865294135291195
    1 3 0.8788584075196542
    1 4 0.8168761502672031

    算法统计值:

    命令和参数配置

    • 命令:algo(similarity)
    • params() 参数配置项如下:
    名称 类型
    默认值
    规范 描述
    ids 或 uuids []_id 或 []_uuid / 必填 待计算的第一组节点的 ID 或 UUID
    ids2 或 uuids2 []_id 或 []_uuid / 必填 待计算的第二组节点的 ID 或 UUID
    type string cosine jaccard 或 overlap 或 cosine 或 pearson 或 euclideanDistance 或 euclidean 相似度度量标准,jaccard 代表杰卡德相似度,overlap 代表重叠相似度,cosine 或忽略代表余弦相似度,pearson 代表皮尔森相关系数,euclideanDistance 代表欧几里得距离,euclidean 代表标准化欧几里得距离
    node_schema_property []@<schema>?.<property> / 数值类的点属性,需LTE type 为 cosine 或 pearson 或 euclideanDistance 或 euclidean 时,必须指定构成向量的两个或更多个点属性,带不带 schema 均可,无该属性的点不参与计算;type 为 jaccard 或 overlap 时,不支持此参数
    limit int -1 >=-1 需要返回的结果条数,-1 或忽略表示返回所有结果
    top_limit int -1 -1 或 >=0 仅忽略 ids2 和 uuids2 时可用,每个点的选拔结果 top_list 的长度,-1 或忽略表示返回完整的 top_list

    示例:通过属性 price 和 weight 计算点 UUID = 1,2 和点 UUID = 3,4 之间的余弦相似度

    algo(similarity).params({
      uuids: [1,2],
      uuids2: [3,4],
      node_schema_property: [price, weight],
      type: "cosine"
    }) as p
    return p
    

    算法执行

    任务回写

    1. 文件回写

    配置项 各列数据
    filename node1,node2,similarity

    示例:通过属性 price、weight、width 和 height 计算点 UUID = 1 与其他每个点间的余弦相似度,将算法结果回写至名为 cs_result 的文件

    algo(similarity).params({
      uuids: [1], 
      uuids2: [2,3,4],
      node_schema_property: [price,weight,width,height]
    }).write({
      file:{ 
        filename: "cs_result"
      }
    })
    

    2. 属性回写

    算法不支持属性回写。

    3. 统计回写

    算法无统计值。

    直接返回

    别名序号
    类型 描述
    列名
    0 []perNodePair 各点对及其相似度 node1, node2, similarity

    示例:通过属性 price、weight、width 和 height 计算点 UUID = 1 与其他每个点间的余弦相似度,将算法结果定义为别名 sim 并返回

    algo(similarity).params({
      uuids: [1], 
      uuids2: [2,3,4],
      node_schema_property: [price,weight,width,height],
      type: "cosine"
    }) as similarity
    return similarity
    

    流式返回

    别名序号
    类型 描述
    列名
    0 []perNodePair 各点对及其相似度 node1, node2, similarity

    示例:通过属性 price、weight、width 和 height 计算 UUID = 1 的点与其他每个点间的余弦相似度,将算法结果定义为别名 distance 并返回 2 条结果

    algo(similarity).params({
      uuids: [1], 
      uuids2: [2,3,4],
      node_schema_property: [price,weight,width,height],
      type: "cosine"
    }).stream() as similarity 
    return similarity limit 2
    

    实时统计

    算法无统计值。

    请完成以下信息后可下载此书
    *
    公司名称不能为空
    *
    公司邮箱必须填写
    *
    你的名字必须填写
    *
    你的电话必须填写
    *
    你的电话必须填写