dgl.node_label_informativeness

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

标签信息量(\(\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\) 的情况下预测 \(\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}\))中,首先均匀随机采样一个节点,然后均匀随机采样与该节点相关的一条边。这两种标签信息量的版本在如何加权高/低度节点方面有所不同。在边标签信息量中,平均是在边上进行的,因此高度节点被赋予更多的权重。在节点标签信息量中,平均是在节点上进行的,因此所有节点的权重相等。

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

Parameters:
  • graph (DGLGraph) – 图。

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

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

Returns:

节点标签信息量值。

Return type:

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