点击上方卡片关注我
设置星标 学习更多技能
在大数据时代,图数据无处不在,从社交网络到推荐系统,从生物网络到知识图谱,图结构数据的分析和挖掘变得越来越重要。Karateclub是一个专注于无监督图机器学习的Python库,由Benedek Rozemberczki开发。它提供了丰富的图嵌入、社区检测和图聚类算法,让研究人员和开发者能够轻松地对图数据进行分析和建模。Karateclub基于NetworkX构建,提供了统一的API接口,支持节点嵌入、图嵌入、社区检测等多种任务。
Karateclub的安装非常简单,使用pip包管理器即可完成:
pip install karateclub安装完成后,可以通过以下代码验证是否安装成功:
import karateclubprint(karateclub.__version__)如果能够正常输出版本号,说明安装成功。Karateclub依赖NetworkX、NumPy、SciPy等库,这些依赖会自动安装。
节点嵌入是将图中的节点映射到低维向量空间的技术,使得相似的节点在向量空间中距离更近。Node2Vec是一种基于随机游走的节点嵌入算法,通过控制游走策略来平衡局部和全局的网络结构。
下面的示例展示了如何使用Karateclub的Node2Vec算法对Karate Club网络进行节点嵌入:
import networkx as nxfrom karateclub import Node2Vec# 加载经典的Karate Club网络graph = nx.karate_club_graph()# 创建Node2Vec模型model = Node2Vec( dimensions=64, # 嵌入维度 walk_length=80, # 随机游走长度 walk_number=10, # 每个节点的游走次数 p=1, # 返回参数 q=1# 进出参数)# 训练模型model.fit(graph)# 获取节点嵌入embeddings = model.get_embedding()print(f'嵌入矩阵形状: {embeddings.shape}')print(f'节点0的嵌入向量: {embeddings[0][:5]}...')社区检测是识别网络中紧密连接的节点群组的过程,这些群组内部连接密集,而群组之间连接稀疏。Label Propagation是一种简单而高效的社区检测算法,通过标签传播的方式迭代地更新节点的社区归属。
import networkx as nxfrom karateclub import LabelPropagationimport matplotlib.pyplot as plt# 创建网络graph = nx.karate_club_graph()# 创建Label Propagation模型model = LabelPropagation()# 训练模型model.fit(graph)# 获取社区标签communities = model.get_memberships()print(f'检测到的社区: {communities}')print(f'社区数量: {len(set(communities.values()))}')# 可视化社区结构pos = nx.spring_layout(graph)colors = [communities[node] for node in graph.nodes()]nx.draw(graph, pos, node_color=colors, with_labels=True, cmap=plt.cm.Set3, node_size=500)plt.title('Karate Club网络社区检测结果')plt.show()图嵌入是将整个图映射到向量空间的技术,使得相似的图在向量空间中距离更近。Graph2Vec借鉴了Word2Vec的思想,将图视为文档,子图视为单词,通过Skip-gram模型学习图的表示。
import networkx as nxfrom karateclub import Graph2Vec# 创建多个图graphs = []for i in range(10):# 生成不同的随机图if i < 5: g = nx.erdos_renyi_graph(20, 0.3)else: g = nx.barabasi_albert_graph(20, 3) graphs.append(g)# 创建Graph2Vec模型model = Graph2Vec( dimensions=128, # 嵌入维度 wl_iterations=2, # Weisfeiler-Lehman迭代次数 epochs=10# 训练轮数)# 训练模型model.fit(graphs)# 获取图嵌入graph_embeddings = model.get_embedding()print(f'图嵌入矩阵形状: {graph_embeddings.shape}')print(f'第一个图的嵌入向量: {graph_embeddings[0][:5]}...')DeepWalk是最早的基于深度学习的图嵌入方法之一,它通过在图上进行随机游走生成节点序列,然后使用Skip-gram模型学习节点表示。DeepWalk能够捕捉网络的局部结构信息,在节点分类和链接预测任务中表现优异。
import networkx as nxfrom karateclub import DeepWalkfrom sklearn.cluster import KMeans# 创建网络graph = nx.karate_club_graph()# 创建DeepWalk模型model = DeepWalk( dimensions=32, walk_length=80, walk_number=10, window_size=5)# 训练模型model.fit(graph)# 获取嵌入embeddings = model.get_embedding()# 使用嵌入进行聚类kmeans = KMeans(n_clusters=2, random_state=42)clusters = kmeans.fit_predict(embeddings)print(f'聚类结果: {clusters}')Louvain算法是一种基于模块度优化的社区检测方法,它通过迭代地合并社区来最大化网络的模块度。Louvain算法具有良好的可扩展性,能够处理大规模网络,并且通常能够发现层次化的社区结构。
import networkx as nxfrom karateclub import EgoNetSplitterimport numpy as np# 创建较大的网络graph = nx.connected_caveman_graph(5, 10)# 使用EgoNetSplitter进行社区检测model = EgoNetSplitter(resolution=1.0)model.fit(graph)# 获取社区communities = model.get_memberships()print(f'节点数: {len(graph.nodes())}')print(f'检测到的社区数: {len(set(communities.values()))}')# 计算社区大小分布community_sizes = {}for node, comm in communities.items(): community_sizes[comm] = community_sizes.get(comm, 0) + 1print(f'社区大小分布: {sorted(community_sizes.values(), reverse=True)}')FeatherGraph是一种快速的图嵌入方法,它通过特征提取和降维技术生成图的表示。
import networkx as nxfrom karateclub import FeatherGraph# 创建多个图graphs = [ nx.erdos_renyi_graph(30, 0.2), nx.erdos_renyi_graph(30, 0.3), nx.barabasi_albert_graph(30, 2), nx.barabasi_albert_graph(30, 3), nx.watts_strogatz_graph(30, 4, 0.3)]# 创建FeatherGraph模型model = FeatherGraph( order=5, # 特征提取阶数 eval_points=25, # 评估点数量 theta_max=2.5# 最大theta值)# 训练模型model.fit(graphs)# 获取图嵌入embeddings = model.get_embedding()print(f'图嵌入形状: {embeddings.shape}')# 计算图之间的相似度from sklearn.metrics.pairwise import cosine_similaritysimilarity = cosine_similarity(embeddings)print(f'图0和图1的相似度: {similarity[0, 1]:.4f}')print(f'图0和图2的相似度: {similarity[0, 2]:.4f}')Karateclub是Python生态中一个专业而强大的图机器学习库,它提供了丰富的无监督学习算法,涵盖节点嵌入、图嵌入和社区检测等多个方面。通过本文的介绍,我们了解了Karateclub的安装方法、核心特性以及各种实用功能。从基础的Node2Vec节点嵌入到高级的Graph2Vec图表示学习,从简单的Label Propagation到复杂的Louvain社区检测,Karateclub都提供了简洁统一的API。它的scikit-learn风格设计让机器学习从业者能够快速上手,丰富的算法库满足了各种图分析需求。
如果在编程工具充值使用上遇到麻烦,推荐一个牛逼的中转工具!一次性搞定 Codex 、Claude Code和 gemini,内容介绍和付费兑换详见文末阅读原文。


实测 4 个爆火 Skill,一句话生成画布/知识库/任务规划/自动发布
从海外公司注册到 Stripe 收款,跑通了出海收付款全流程(实操分享)
出海建站必备:告别AI味,这两个页面设计 Skills 太牛了!