返回目录
公开知识笔记 · 不进入目录

KNN图构建

公开知识笔记

KNN图构建

一句话理解:当对象之间没有天然连边时,先计算相似度,再让每个对象连接最相似的K个邻居,就得到KNN图。

1. 为什么副作用需要“造一张图”

药物分子天然有化学键,而“恶心”和“头痛”之间没有直接可见的边。若想用图神经网络处理副作用,就必须规定哪些副作用应该互相传递信息。

A3Net采用频率轮廓:对每个副作用,收集它在所有训练药物上的频率,形成向量。两个副作用在不同药物上若呈现相似模式,就认为它们相似。

不要与最终向量混淆:这里的频率轮廓是从训练频率矩阵取出的一列原始标签,用来决定“哪些副作用连边”。它不是模型学习出的副作用表示。KNN先规定信息可沿哪些边传播;随后GAT才以MedDRA初始特征为输入,结合这些边学习最终副作用向量。

2. 构图步骤

设副作用ii的频率轮廓为sis_i:

  1. 计算sis_i与其他副作用的相似度;
  2. 对相似度排序;
  3. 选择最相似的K个;
  4. 在ii与这些邻居之间连边;
  5. 决定是否对称化、是否保留边权和自环。

K控制图的稀疏程度:K太小,信息难传播;K太大,不相似的节点也会被连上,产生过度平滑和噪声。

3. KNN与K-means不是一回事

  • KNN图中的K:每个节点连几个邻居;
  • K-means中的K:数据分成几个簇。

两者只是在名称中都含K,目标完全不同。

4. 最重要的评估规范:只用训练数据构图

若使用完整频率矩阵计算相似度,测试折的真实频率可能偷偷进入图结构,造成信息泄漏。正确流程是:

先划分训练/测试→遮蔽测试标签→用训练矩阵构图\text{先划分训练/测试}\rightarrow\text{遮蔽测试标签}\rightarrow\text{用训练矩阵构图}

A3Net公开脚本在每折中用遮蔽后的训练矩阵构建副作用图,这一点是正确的。自己复现时也必须保持顺序。

5. Cold start时还要再问一步

若测试对象是整种新药,该药物整行频率都应从构图依据中移除。否则模型虽然没直接看目标标签,却可能从该药物的其他副作用频率间接获得信息。

6. A3Net中的参数不一致

论文与warm-start脚本使用K=10K=10,但cold-start脚本默认参数是K=5K=5。这会改变副作用图的边,因此复现论文结果时应显式记录并比较两个设置,不能只依赖脚本默认值。

相关概念

相关论文

  • A3Net精读笔记(A3Net)