修改密码

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

修改昵称

当前昵称:
提交

v4.0
搜索
中文EN
v4.0

    特征向量中心性

    概述

    特征向量中心性(Eigenvector Centrality)算法度量的是节点影响的传递。来自高分值节点的关系对节点分值贡献大于来自低分值节点的关系,节点有高分值意味着它连接到许多高分值节点。特征向量中心性强调节点所处的周围环境,例如在疾病传播中,特征向量中心性较大的节点距离传染源更近的可能性更大,需要格外防范。

    Google 著名的 PageRank 算法是特征向量中心性算法的一个变种,用来进行网页排名。

    特征向量中心性的取值范围是 [0,1],数值越大中心性越大。

    基本概念

    特征值和特征向量

    特征值和特征向量是矩阵理论的重要概念之一。A 为 n 阶矩阵,若常数 λ 和 n 维非 0 向量 x 满足 Ax = λx,那么称数 λA特征值(Eigenvalue), xA 的对应于特征值 λ特征向量(Eigenvector)。

    n 阶矩阵的特征值可通过特征方程 |A - λE| = 0 求解,其中 E 为 n 阶单位矩阵,特征方程的 n 个根(可能有重根)即为 n 个特征值 λ1λ2、... 、λn。对于每个特征值,相应的特征向量可以通过求解特征方程 (A – λE)x = 0 得到,特征向量可以有无穷个。在这些特征值中,绝对值最大的特征值称为主特征值,主特征值对应的特征向量即为主特征向量,它包含矩阵最多的信息。

    上面的例子中,矩阵 A 的特征值有 5 个,与绝对值最大的特征值 λ1 对应的特征向量 x1 就是主特征向量。

    特征向量中心性

    图上节点间通过边互相影响的关系可以用矩阵表示,矩阵的特征向量所度量的节点中心性,就是特征向量中心性。

    幂迭代法

    求解矩阵特征值和特征向量的常用方法是特征多项式计算法,但在实践中,该计算相当耗费资源且无法计算大型矩阵。Ultipa 的特征向量中心性算法使用幂迭代法求解矩阵的主特征向量,此方法在保证精度的同时也极大提高计算效率。

    幂迭代法的计算过程很简单。对于 n 阶矩阵 A,任意选取一个 n 维初始向量 v(0),并按照以下规律进行迭代,继续构造向量:

    • v(1) = Av(0)
    • v(2) = Av(1) = A2v(0)
    • ...
    • v(k) = Av(k-1) = Akv(0)

    当 k 足够大时,v(k) 即可视为 A 的特征向量。幂迭代法的收敛性理论上是可以推导证明的,在此不赘述。

    此方法存在的问题是,v(k) 中的非 0 元素值会随着 k 的增大而大幅增大,为避免计算过程中数据溢出,每步迭代时,算法对 v(k) 中每个元素的绝对值进行 L2 范数归一化处理。

    Ultipa 的特征向量中心性算法规定迭代的收敛偏差 tolerance 为归一化后的向量 v(k) 所有元素绝对值的和的变化,当该变化值小于规定的收敛偏差时,迭代结束,若迭代轮数达到限制,迭代也会结束。

    特殊处理

    孤点、不连通图

    由于没有连接其他节点的边,孤点的特征向量中心性完全取决于其自环边。

    自环边

    自环边的权重值只会被计算一次。

    有向边

    对于每个节点,特征向量中心性算法只考虑其入边,即接收到的来自邻居节点的影响。入边为 0 的节点的特征向量中心性分值无限趋近于 0。

    结果和统计值

    以下面包含 7 个节点的网页间链接关系图为例,所有边的权重为 1,运行特征向量中心性算法,最多迭代 20 次,收敛偏差为 0.01:

    算法结果:为每个点计算特征向量中心性,根据算法执行方式,返回 _idrank 两列或 _uuidrank 两列

    _uuid _id rank
    1 web1 0.57355899
    2 web2 0.57355601
    3 web3 0.45988801
    5 web5 0.25517300
    4 web4 0.25516701
    6 web6 0.018536000
    7 web7 0.0000060000002

    算法统计值:

    命令及配置项

    • 命令:algo(eigenvector_centrality)
    • params() 参数配置项如下:
    名称 类型
    默认值
    规范
    描述
    max_loop_num int 20 >=1 算法最大迭代轮数
    tolerance float 0.001 (0,1) 收敛偏差,即归一化后的向量所有元素绝对值的和的变化,若变化值小于收敛偏差,则算法结束
    edge_weight_property @<schema>?.<property> / 数值类的边属性,需LTE 边权重所在的一个或多个属性名称,带不带 schema 均可,无该属性的边不参与计算;忽略表示不加权
    limit int -1 >=-1 需要返回的结果条数,-1 或忽略表示返回所有结果
    order string / ASC/DESC,大小写不敏感 对返回结果进行排序;忽略表示不排序

    示例:计算所有点的特征向量中心性,最多迭代 20 次,收敛偏差为 0.01

    algo(eigenvector_centrality).params({
      max_loop_num: 20,
      tolerance: 0.01
      }) as centrality
    return centrality
    

    算法执行

    任务回写

    1. 文件回写

    配置项 各列数据
    filename _id,rank

    示例:计算所有点的特征向量中心性,最多迭代 20 次,收敛偏差为 0.01,将算法结果回写至名为 rank 的文件

    algo(eigenvector_centrality).params({
      max_loop_num: 20,
      tolerance: 0.01
      }).write({
        file: {
          filename: "rank"
        }
    })
    

    2. 属性回写

    配置项 回写内容 类型 数据类型
    property rank 点属性 float

    示例:计算所有点的特征向量中心性,最多迭代 20 次,收敛偏差为 0.01,将算法结果回写至名为 ec 的点属性

    algo(eigenvector_centrality).params({
      max_loop_num: 20,
      tolerance: 0.01
      }).write({
        db: {
          property: "ec"
        }
    })
    

    3. 统计回写

    算法无统计值。

    直接返回

    别名序号 类型 描述 列名
    0 []perNode 点及其特征向量中心性 _uuid, rank

    示例:计算所有点的特征向量中心性,最多迭代 20 次,收敛偏差为 0.01,边权重位于 @link.score 属性上,将算法结果定义为别名 ec 并返回

    algo(eigenvector_centrality).params({
      max_loop_num: 20,
      tolerance: 0.01,
      edge_weight_propery: @link.score
      }) as ec 
    return ec
    

    流式返回

    别名序号 类型 描述 列名
    0 []perNode 点及其特征向量中心性 _uuid, rank

    示例:计算所有点的特征向量中心性,最多迭代 20 次,收敛偏差为 0.01,分别统计分值大于 0.5 和小于等于 0.5 的节点数量

    algo(eigenvector_centrality).params({
      max_loop_num: 20,
      tolerance: 0.01
      }).stream() as results
    WITH CASE
    when results.rank > 0.5 then "attention"
    when results.rank <= 0.5 then "normal"
    END as cat
    group by cat
    return table(cat, count(cat))
    

    实时统计

    算法无统计值。

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