基于NetworkX特定有向图的A类节点相似度计算可用指标问询
针对你描述的A类节点指向B类节点、B无出边、A无入边的参考关系图,除了基础文献耦合外,还可以用以下几种相似度计算方法:
加权文献耦合
普通文献耦合仅统计共同B节点的数量,加权版本给不同B节点赋予差异化权重——比如被越少A节点指向的B,权重越高(类似TF-IDF的逆文档频率思路),能突出稀有参考节点对相似度的贡献。
计算逻辑:先统计每个B节点的入度(即有多少A指向它),权重设为1/log(1 + 入度),然后累加A1和A2共同指向的B节点的权重之和。
在NetworkX中可自行实现:遍历A节点的出邻居集合,结合B节点的入度数据计算。Jaccard系数
是文献耦合的归一化版本,消除了A节点自身参考数量差异的影响,计算共同B节点数占两个A节点所有参考B节点并集的比例。
公式:J(A1,A2) = |N(A1) ∩ N(A2)| / |N(A1) ∪ N(A2)|(N(A)为A指向的B节点集合)。
可通过NetworkX的nx.jaccard_coefficient实现,需先将有向图转换为无向二分图处理,或自行提取出邻居集合计算。余弦相似度
将每个A节点映射为B节点空间的二进制向量(某B被指向则对应维度为1,否则为0),计算两个向量的余弦夹角。
公式:cos(A1,A2) = (N(A1) · N(A2)) / (||N(A1)|| * ||N(A2)||),分子是共同B节点数,分母是两个A的参考数量的平方根乘积。
可使用NetworkX的nx.cosine_similarity,或结合numpy手动实现向量运算。重叠系数
更适合对比参考规模差异较大的A节点,计算共同B节点数占两个A节点中较小参考集合的比例。
公式:O(A1,A2) = |N(A1) ∩ N(A2)| / min(|N(A1)|, |N(A2)|)。
无现成NetworkX函数,但可通过提取出邻居集合快速实现。Dice系数
与Jaccard类似,但对共同参考节点的权重更高,公式:D(A1,A2) = 2*|N(A1) ∩ N(A2)| / (|N(A1)| + |N(A2)|),结果范围同样在0-1之间。
方法对比参考
- 若需突出稀有参考节点的价值:选加权文献耦合
- 若需消除自身参考规模的影响:选Jaccard或余弦相似度
- 若需重点关注小参考集合的重叠程度:选重叠系数
内容的提问来源于stack exchange,提问作者Red Boraley

