You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

karateclub中MUSAE与GLEE嵌入输出列数不符预期问题咨询

Karateclub库中MUSAE与GLEE嵌入维度异常问题解析

问题描述

测试属性节点嵌入(MUSAE)和结构嵌入(GLEE)时,设置dimensions=32,但返回的特征维度不符合预期:

  • MUSAE返回(50, 128),即128个特征
  • GLEE返回(50, 33),即33个特征

测试代码:

import random
import numpy as np
import networkx as nx
from scipy.sparse import coo_matrix

from karateclub.node_embedding.attributed import MUSAE
from karateclub.node_embedding.neighbourhood import GLEE

g = nx.newman_watts_strogatz_graph(50, 10, 0.2)

X = {i: random.sample(range(150),50) for i in range(50)}

row = np.array([k for k, v in X.items() for val in v])
col = np.array([val for k, v in X.items() for val in v])
data = np.ones(50*50)
shape = (50, 150)

X = coo_matrix((data, (row, col)), shape=shape)

model = MUSAE(dimensions=32)
model.fit(g, X)
emb = model.get_embedding()
print(emb.shape)

model = GLEE(dimensions=32)
model.fit(g)
emb = model.get_embedding()
print(emb.shape)

输出:

(50, 128)
(50, 33)

原因分析与解决方案

MUSAE维度异常原因

MUSAE的dimensions参数并非最终输出的总维度。该算法会生成4种不同的嵌入表示并拼接:

  • 节点自身的结构嵌入
  • 节点自身的属性嵌入
  • 节点邻居的结构嵌入
  • 节点邻居的属性嵌入
    每种嵌入的维度均为设置的dimensions值,因此总维度为4 * dimensions(32*4=128),这是算法的设计特性,并非代码错误。

解决方案:
如果需要得到32维嵌入,可以通过降维算法(如PCA)对原始输出进行处理,示例代码见下文。

GLEE维度异常原因

GLEE的dimensions参数指定的是非平凡特征值对应的特征向量数量,算法默认会额外保留1维对应最大特征值的主成分,因此总维度为dimensions + 1(32+1=33),属于算法设计的正常行为。

解决方案:
可以手动截取嵌入矩阵的列来得到32维结果,比如去掉第一列(主成分),或者根据需求保留其他部分。

调整后的代码示例

import random
import numpy as np
import networkx as nx
from scipy.sparse import coo_matrix
from sklearn.decomposition import PCA

from karateclub.node_embedding.attributed import MUSAE
from karateclub.node_embedding.neighbourhood import GLEE

g = nx.newman_watts_strogatz_graph(50, 10, 0.2)

X = {i: random.sample(range(150),50) for i in range(50)}
row = np.array([k for k, v in X.items() for val in v])
col = np.array([val for k, v in X.items() for val in v])
data = np.ones(50*50)
shape = (50, 150)
X = coo_matrix((data, (row, col)), shape=shape)

# MUSAE:将128维降维至32维
model = MUSAE(dimensions=32)
model.fit(g, X)
emb_musae = model.get_embedding()
print("原始MUSAE维度:", emb_musae.shape)
pca = PCA(n_components=32)
emb_musae_32 = pca.fit_transform(emb_musae)
print("降维后MUSAE维度:", emb_musae_32.shape)

# GLEE:截取至32维
model = GLEE(dimensions=32)
model.fit(g)
emb_glee = model.get_embedding()
print("原始GLEE维度:", emb_glee.shape)
# 移除第一列主成分,得到32维
emb_glee_32 = emb_glee[:, 1:]
print("截取后GLEE维度:", emb_glee_32.shape)

内容的提问来源于stack exchange,提问作者Mr Felix U

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.22 15:23:26