Free SKILL.md scraped from GitHub. Clone the repo or copy the file directly into your Claude Code skills directory.
npx versuz@latest install hiyenwong-ai-collection-collection-skills-evolvable-graph-diffusion-otgit clone https://github.com/hiyenwong/ai_collection.gitcp ai_collection/SKILL.MD ~/.claude/skills/hiyenwong-ai-collection-collection-skills-evolvable-graph-diffusion-ot/SKILL.md---
name: evolvable-graph-diffusion-ot
description: 可进化图扩散最优传输脑连接组建模方法(EDT-PA)。结合结构-功能连接对齐和高阶依赖建模,用于脑疾病分类。触发词:脑连接组、最优传输、optimal transport、结构-功能对齐、高阶依赖、brain connectome、EDT-PA。
user-invocable: true
---
# Evolvable Graph Diffusion Optimal Transport for Brain Connectome
## 核心方法论
EDT-PA (Evolvable Graph Diffusion Optimal Transport with Pattern-Specific Alignment) 是一种创新的脑连接组建模框架:
1. **高阶结构依赖** - 使用可进化建模块动态捕获脑区高阶关系
2. **模式特定对齐** - 使用最优传输对齐结构连接(SC)和功能连接(FC)
3. **KAN 节点聚合** - Kolmogorov-Arnold 网络实现灵活的非线性交互建模
4. **疾病分类** - 识别疾病特异性连接模式
### 核心创新
- 打破"SC 是 FC 固定支架"的假设
- 几何感知的结构-功能对齐
- 捕获脑区高阶依赖关系
## Python 代码示例
### 1. 最优传输对齐模块
```python
import torch
import torch.nn as nn
import numpy as np
class OptimalTransportAlignment(nn.Module):
"""
最优传输对齐模块 - 将结构连接和功能连接在几何感知的方式下对齐
"""
def __init__(self, n_regions, regularization=0.1):
super().__init__()
self.n_regions = n_regions
self.regularization = regularization
# 可学习的传输成本矩阵
self.cost_matrix = nn.Parameter(
torch.eye(n_regions) + torch.randn(n_regions, n_regions) * 0.01
)
def compute_transport_plan(self, source_dist, target_dist, cost=None):
"""使用 Sinkhorn 算法计算最优传输计划"""
if cost is None:
cost = self.cost_matrix.detach().numpy()
K = np.exp(-cost / self.regularization)
u = np.ones(self.n_regions) / self.n_regions
v = np.ones(self.n_regions) / self.n_regions
for _ in range(100):
u = source_dist / (K @ v + 1e-10)
v = target_dist / (K.T @ u + 1e-10)
transport_plan = np.diag(u) @ K @ np.diag(v)
return torch.from_numpy(transport_plan).float()
def align_sc_fc(self, sc_matrix, fc_matrix):
"""对齐结构连接和功能连接"""
sc_dist = sc_matrix.sum(dim=1)
sc_dist = sc_dist / sc_dist.sum()
fc_dist = fc_matrix.sum(dim=1)
fc_dist = fc_dist / fc_dist.sum()
transport_plan = self.compute_transport_plan(sc_dist.numpy(), fc_dist.numpy())
aligned_matrix = transport_plan @ fc_matrix @ transport_plan.T
transport_cost = torch.sum(transport_plan * self.cost_matrix)
return aligned_matrix, transport_cost
```
### 2. 可进化图扩散模块
```python
class EvolvableDiffusionBlock(nn.Module):
"""可进化图扩散模块 - 动态捕获脑区高阶依赖"""
def __init__(self, n_features, n_heads=4, evolution_steps=3):
super().__init__()
self.n_features = n_features
self.evolution_steps = evolution_steps
self.attention = nn.MultiheadAttention(embed_dim=n_features, num_heads=n_heads, batch_first=True)
self.evolution_weights = nn.ParameterList([
nn.Parameter(torch.randn(n_features, n_features) * 0.01)
for _ in range(evolution_steps)
])
self.layer_norm = nn.LayerNorm(n_features)
def forward(self, x, adjacency):
h = x
for weight in self.evolution_weights:
diffused = torch.bmm(adjacency, h)
transformed = torch.matmul(diffused, weight)
attn_out, _ = self.attention(h, h, h)
h = self.layer_norm(h + transformed + attn_out)
return h
```
### 3. KAN 节点聚合模块
```python
class KANLayer(nn.Module):
"""Kolmogorov-Arnold Network 层 - 使用样条函数实现灵活的非线性变换"""
def __init__(self, in_features, out_features, grid_size=10):
super().__init__()
self.grid_size = grid_size
grid = torch.linspace(-1, 1, grid_size + 1)
self.register_buffer('grid', grid)
self.spline_weight = nn.Parameter(torch.randn(out_features, in_features, grid_size + 3) * 0.1)
self.base_weight = nn.Parameter(torch.randn(out_features, in_features) * 0.1)
def b_splines(self, x):
"""计算 B-样条基函数"""
x = x.unsqueeze(-1)
grid = self.grid.unsqueeze(0).expand(x.shape[1], -1).unsqueeze(0)
distances = torch.abs(x - grid)
basis = torch.exp(-distances * 5)
return basis
def forward(self, x):
base_out = torch.matmul(x, self.base_weight.T)
basis = self.b_splines(x)
spline_out = torch.einsum('bif,oif->bo', basis, self.spline_weight)
return base_out + spline_out
class KANNodeAggregation(nn.Module):
"""使用 KAN 进行节点聚合"""
def __init__(self, n_features, hidden_dim=64, n_classes=2):
super().__init__()
self.kan1 = KANLayer(n_features, hidden_dim)
self.kan2 = KANLayer(hidden_dim, hidden_dim)
self.kan3 = KANLayer(hidden_dim, n_classes)
self.activation = nn.GELU()
def forward(self, node_features):
x = node_features.mean(dim=1)
x = self.activation(self.kan1(x))
x = self.activation(self.kan2(x))
x = self.kan3(x)
return x
```
### 4. 完整 EDT-PA 模型
```python
class EDT_PA(nn.Module):
"""Evolvable Graph Diffusion Optimal Transport with Pattern-Specific Alignment"""
def __init__(self, n_regions, n_features, hidden_dim=64, n_classes=2):
super().__init__()
self.n_regions = n_regions
self.sc_encoder = nn.Linear(n_regions, n_features)
self.fc_encoder = nn.Linear(n_regions, n_features)
self.ot_alignment = OptimalTransportAlignment(n_regions)
self.diffusion_block = EvolvableDiffusionBlock(n_features)
self.kan_aggregation = KANNodeAggregation(n_features * 2, hidden_dim, n_classes)
def forward(self, sc_matrix, fc_matrix):
batch_size = sc_matrix.shape[0]
# 1. 对齐 SC 和 FC
aligned_fc = []
transport_costs = []
for i in range(batch_size):
aligned, cost = self.ot_alignment.align_sc_fc(sc_matrix[i], fc_matrix[i])
aligned_fc.append(aligned)
transport_costs.append(cost)
aligned_fc = torch.stack(aligned_fc)
transport_cost = torch.stack(transport_costs).mean()
# 2. 特征编码
sc_features = self.sc_encoder(sc_matrix)
fc_features = self.fc_encoder(aligned_fc)
# 3. 融合特征
combined_features = torch.cat([sc_features, fc_features], dim=-1)
# 4. 图扩散
adjacency = 0.5 * (sc_matrix + aligned_fc)
adjacency = adjacency / (adjacency.sum(dim=-1, keepdim=True) + 1e-10)
evolved_features = self.diffusion_block(combined_features, adjacency)
# 5. KAN 聚合分类
logits = self.kan_aggregation(evolved_features)
return logits, transport_cost
```
## 应用场景
1. **脑疾病分类** - MDD(抑郁症)、AD(阿尔茨海默病)诊断
2. **结构-功能关系研究** - 理解 SC-FC 对应关系
3. **生物标志物发现** - 识别疾病特异性脑网络模式
4. **多模态融合** - 整合 DTI、fMRI 等多源数据
## 关键参数
- **正则化系数**: 最优传输熵正则化(0.05-0.2)
- **进化步数**: 扩散迭代次数(2-5)
- **样条阶数**: KAN 的样条阶数(3-5)
## Activation Keywords
- 脑连接组
- 最优传输
- optimal transport
- 结构-功能对齐
- 高阶依赖
- brain connectome
- EDT-PA
- KAN网络
- Sinkhorn算法
- 疾病分类
## Tools Used
- pytorch
- numpy
- scipy
## Instructions for Agents
1. 理解最优传输对齐:使用Sinkhorn算法对齐SC和FC
2. 掌握可进化图扩散:动态捕获脑区高阶依赖
3. 实现KAN节点聚合:使用B-样条函数进行非线性变换
4. 计算传输成本:量化SC-FC对齐的代价
5. 注意正则化系数对传输计划的影响
## Examples
```python
# 使用示例
from evolvable_graph_diffusion_ot import EDT_PA, OptimalTransportAlignment
# 1. 创建模型
model = EDT_PA(
n_regions=100,
n_features=64,
hidden_dim=128,
n_classes=2
)
# 2. 前向传播
logits, transport_cost = model(sc_matrix, fc_matrix)
print(f"传输成本: {transport_cost.item():.4f}")
# 3. 最优传输对齐
ot_align = OptimalTransportAlignment(n_regions=100, regularization=0.1)
aligned_fc, cost = ot_align.align_sc_fc(sc_matrix, fc_matrix)
```
## 参考文献
- Paper: arXiv:2509.16238