dgl.node_label_informativeness

dgl.node_label_informativeness(graph, y, eps=1e-08)[源码]

标签信息度 (\(\mathrm{LI}\)) 是在 Characterizing Graph Datasets for Node Classification: Homophily-Heterophily Dichotomy and Beyond 中提出的标记图的一个特性

标签信息度表示通过了解节点的邻居的标签,我们可以获得多少关于该节点标签的信息。形式上,假设我们采样一条边 \((\xi,\eta) \in E\)。节点 \(\xi\) 和 \(\eta\) 的类别标签是随机变量 \(y_\xi\) 和 \(y_\eta\)。我们想度量标签 \(y_\eta\) 为预测 \(y_\xi\) 提供了多少知识。熵 \(H(y_\xi)\) 度量在不知道 \(y_\eta\) 的情况下预测节点 :math:`xi` 标签的‘难度’。给定 \(y_\eta\),这个值降低到条件熵 \(H(y_\xi|y_\eta)\)。换句话说,\(y_\eta\) 揭示了 \(I(y_\xi,y_\eta) = H(y_\xi) - H(y_\xi|y_\eta)\) 关于标签的信息。为了使所得度量在不同数据集之间可比,标签信息度定义为 \(y_{\xi}\) 和 \(y_{\eta}\) 的归一化互信息

\[\mathrm{LI} = \frac{I(y_\xi,y_\eta)}{H(y_\xi)}\]

根据用于采样边 \((\xi, \eta)\) 的分布,可以获得标签信息度的几种变体。其中两个特别直观:在边标签信息度 (\(\mathrm{LI}_{edge}\)) 中,边是均匀随机采样的;在节点标签信息度 (\(\mathrm{LI}_{node}\)) 中,首先均匀随机采样一个节点,然后均匀随机采样一条与该节点相连的边。这两种版本的标签信息度在对高/低度节点的加权方式上有所不同。在边标签信息度中,平均是在边上进行的,因此高度节点被赋予更高的权重。在节点标签信息度中,平均是在节点上进行的,因此所有节点的权重相等。

此函数计算节点标签信息度。

参数:
  • graph (DGLGraph) – 图。

  • y (torch.Tensor) – 节点标签,一个形状为 (|V|) 的张量。

  • eps (float, optional) – 一个用于数值稳定的小常数。(默认值: 1e-8)

返回值:

节点标签信息度值。

返回类型:

float

示例

>>> import dgl
>>> import torch
>>> graph = dgl.graph(([0, 1, 2, 2, 3, 4], [1, 2, 0, 3, 4, 5]))
>>> y = torch.tensor([0, 0, 0, 0, 1, 1])
>>> dgl.node_label_informativeness(graph, y)
0.3381872773170471