这题本质上只有两步:
sigmoid 输出概率请在仅使用numpy/pandas/scikit−learn 的前提下,实现一个单层 GraphSAGE−Mean 节点分类器。
流程如下
输入图:无向、无自环,给定邻接表 edges;节点按索引 0…N-1。
原始特征:X∈RN×d 直接读取。
一跳平均聚合: hi=∣N(i)∣+11(xi+∑j∈N(i)xj) 得到 H∈RN×d。若某节点度数为 0,则 hi=xi。
线性分类 + Sigmoid 令 y∈{0,1} 仅在 train_idx 上已知,
目标: minw21∥Hw−y∥22+λ∥w∥22,λ=0.01 闭式解: w=(HT⊤HT+λI)−1HT⊤yT
其中下标 T 表示只取训练索引行。
预测概率 pi=σ(hi⊤w),阈值 0.5 得标签。
单行JSON: {
"nodes”:[[f11,f12,...J,// Nxd原始特征 ...],
"edges":[[u1,v1],[u2,v2],...],//无向边,端点索引
"train_idx": [i1, i2,...], //已知标签节点下标
"train_y": [0/1,...], //与train_idx对应
"test_idx": [1,j2,...] //需预测节点下标
}
约束: N≤ 20, d ≤ 5, ledges| ≤ 30, |train_idx| 2 4, Itest_idx| ≤8 train_idx n test_idx = 0;两类比例 25 %-75 %
仅一行JSON: {
weights”:[w1,w2,...J,//长度d,6位小数,使用round(x,6)]j即可
"test_proba": [p1,...],//长度=Itest_idx|,6位小数,使用round(x,6)即可
"test_pred": [0/1,...]
}
1.邻接矩阵稀疏,但N、d很小,直接用NumPy逐行遍历即可。
2.理论上edges无重复;若输入出现重复也应正常处理(去重后计算)
3.为确保通过测试用例,仅允许使用numpy/pandas/scikit-learn实现。
输入
{"nodes":[[0,0],[0.2,0.1],[0.1,-0.1],[4,4],[4.2,3.9]],"edges":[[0,1],[0,2],[3,4]],"train_idx":[0,3],"train_y":[0,1],"test_idx":[1,4]}
输出
{"weights": [0.085354, 0.164463], "test_proba": [0.50419, 0.730977], "test_pred": [1, 1]}