谱聚类的案例

article/2025/10/9 0:06:40

1. 政治博客数据集(见附件Pol_Blogs_CSV文件)

数据集网址一: Political blogs

数据集网址二: http://www.casos.cs.cmu.edu/computational_tools/datasets/external/polblogs/index11.php 

政治博客数据是由Adamic和Glance于2005年收集并分析的. 该数据集包含了2004年美国总统选举前不久的1000多个网络日志的快照, 其中节点是网络日志, 边是超链接. 节点被标记为自由派或保守派, 这可以被视为两个定义明确的社区. 请尝试使用随机分块模型对这一数据集进行建模, 使用谱聚类算法对该数据集进行社区聚类, 并对所建模型及聚类结果给出合理的解释.

4】案例代码

#调用包
import networkx as nx
import numpy as np
import matplotlib.pyplot as plt
import pandas as pd
from collections import Counter
from sklearn.mixture import GaussianMixture
#忽视警告
import warnings
warnings.filterwarnings("ignore")#调用表格信息对应的gml格式的文件
G=nx.read_gml("Pol_Blogs.gml")
#求社区数目
a = nx.get_node_attributes(G,'value')
#求节点总数和社区数
b = len(set(a))
c = len(set(a.values()))
print("节点总数",b)
print("社区数",c)#存放节点属性值为0与1的总数
cout =Counter(a.values())
a0=cout[0]
a1=cout[1]
print("0与1的节点数",a0,a1)
A=np.array([a0,a1])
print(A)#遍历所有边,求0-0,0-1,1-0,1-1四种类型边的数量
edge00=edge11=edge01=edge10=0
for i in G.edges:
#边的两点node1 , node2 = i
#查两点的属性值,以确认边的类型,然后矩阵中加一c1 = a[node1]c2 = a[node2]if c1 == c2 ==0:edge00= edge00 +1elif c1 == c2 ==1 :edge11 =1 +edge11elif c1==0 and c2 ==1:edge01 = 1+edge01else:edge10 = 1+edge10
print("四种类型的边分为为",edge00,edge11,edge01,edge10)
#社区内部的连接概率
#社区属性为0内的连接概率
p00 = edge00/(a0*(a0-1))
#社区属性为1内的连接概率
p11 = edge11/(a1*(a1-1))
#社区间连接概率
#社区属性从0到1的连接概率
p01 = edge01/(a0*a1)
#社区属性从1到0的连接概率
p10 = edge10/(a1*a0)#构建概率矩阵
P =np.array([[p00,p01],[p10,p11]])
print("概率矩阵")
print(P)#随机块模型
model = nx.stochastic_block_model(sizes=A,p=P,seed=100,directed=True)
nx.draw(model,with_labels=True)
plt.show()#求拉普拉斯矩阵
L = nx.directed_laplacian_matrix(model).A
#求拉普拉斯矩阵的特征值e和特征向量v
lam, V = np.linalg.eig(L)
#选取k列作为特征矩阵
X=V[:, :2]
#将特征矩阵归一化
X = (X-X.mean(axis=0)/X.std(axis=0))
#使用GMM模型
gmm=GaussianMixture(n_components=2)
gmm.fit(X)
#获取点对应的标签
lables = gmm.predict(X)
#设定颜色以区分社区
colors = ["r"if lable==0else"b"for lable in lables]
nx.draw_networkx(model,pos=X,node_color=colors)
plt.show()

 

输出结果:

初始数据(不带标签):

 

利用随机分块得到的模型

 

谱聚类后

 

其他输出:

 

分析:

由图可以很明显的发现,政客博客存在两个社区,符合现实中政客存在的保守派和自由派两类人群。同时也说明,政客的派系会影响到其社交,相同派系的人联系亲密度要远高于派系间的亲密度,符合现实情况。


http://chatgpt.dhexx.cn/article/VeYRUtPN.shtml

相关文章

谱聚类算法 matlab

1、谱聚类算法步骤公式 (1)整理数据集,使数据集中数据在0-1之间。假设数据集m行n列。 (2)求邻接矩阵W。元素值为每一点到其他点之间距离,即权重。 (3)求相似度矩阵S,相…

谱聚类(Spectral Clustering)详解

原文地址为: 谱聚类(Spectral Clustering)详解 谱聚类(Spectral Clustering)详解 谱聚类(Spectral Clustering, SC)是一种基于图论的聚类方法——将带权无向图划分为两个或两个以上的最优子图,使子图内部尽量相似,而子图间距离尽量距离较远&…

从拉普拉斯矩阵说到谱聚类

从拉普拉斯矩阵说到谱聚类 0 引言 11月1日上午,机器学习班 第7次课,邹讲聚类(PPT),其中的谱聚类引起了自己的兴趣,邹从最基本的概念:单位向量、两个向量的正交、方阵的特征值和特征向量&#xf…

聚类--谱聚类

前言:关于谱聚类,已经有很多厉害的老师和大牛写过教程博客等,也有很不错的tutorial文章可供参考。此博文仅记述个人的一些总结、思考、疑问,算是对现有谱聚类学习资源的一个小补充。 1. 谱聚类简述 说到聚类,可能最先…

MATLAB 谱聚类

k-means 可以说是思想最简单的聚类了,但是它在应对非凸数据时却显得手足无措,例如如下的数据分类: 各类之间虽然间隔较远,但是非凸,这时候就需要引入谱聚类了(以下为谱聚类效果)。 本文参考 [1]Ulrike von Luxburg. A…

谱聚类算法详解

谱聚类(Spectral Clustering)算法简单易行,其聚类性能优于传统的K-means算法。谱聚类将数据的划分转化为对图的分割,是一种基于图论的聚类方法,其直观理解为根据图内点的相似度将图分为多个子图,使子图内部…

谱聚类算法简单理解

一、算法思想 谱聚类是基于图论的知识所演化出的算法,在聚类中广泛使用。主要思想是将所有的数据看成空间中的点,这些点之间可以用边连接起来,距离较远的两点之间边的权重值较低,距离较近的两点间边的权重值较高,然后…

了解聚类是什么。聚类方法:k-means、核聚类、层次聚类、谱聚类

聚类 1.什么是聚类2.聚类方法2.1 划分式聚类方法k-meansk-meansbi-kmeans 基于密度的方法DBSCANOPTICS算法 层次化聚类算法核聚类支持向量聚类谱聚类引言优缺点步骤 参考文档:参考 1.什么是聚类 定义 聚类(Clustering) 是按照某个特定标准(如距离)把一个数据集分割成不同的类…

【聚类】谱聚类解读、代码示例

【聚类】谱聚类详解、代码示例 文章目录 【聚类】谱聚类详解、代码示例1. 介绍2. 方法解读2.1 先验知识2.1.1 无向权重图2.1.2 拉普拉斯矩阵 2.2 构建图(第一步)2.2.1 ϵ \epsilon ϵ 邻近法2.2.2 k 近邻法2.2.3 全连接法 2.3 切图(第二步&a…

谱聚类(Spectral Clustering)原理及Python实现

谱聚类原理及Python实现 图模型 无向带权图模型 G<V,E> G < V , E > &#xff0c;每一条边上的权重 wij w i j 为两个顶点的相似度&#xff0c;从而可以定义相似度矩阵 W W ,此外还可以定义度矩阵D" role="presentation" style="position: …

谱聚类算法(Spectral Clustering)

谱聚类算法(Spectral Clustering) 谱聚类(Spectral Clustering, SC)是一种基于图论的聚类方法——将带权无向图划分为两个或两个以上的最优子图&#xff0c;使子图内部尽量相似&#xff0c;而子图间距离尽量距离较远&#xff0c;以达到常见的聚类的目的。其中的最优是指最优目标…

谱聚类(spectral clustering)及其实现详解

Preface 开了很多题&#xff0c;手稿都是写好一直思考如何放到CSDN上来&#xff0c;一方面由于公司技术隐私&#xff0c;一方面由于面向对象不同&#xff0c;要大改&#xff0c;所以一直没贴出完整&#xff0c;希望日后可以把开的题都补充全。 先把大纲列出来&#xff1a; 一…

谱聚类算法

1. 算法思想 将所有的数据看成空间中的点&#xff0c;这些点之间可以用边连接起来。距离较远的点之间边的权重低&#xff0c;距离较近的点间边的权重高。然后对原图进行切图&#xff0c;使得不同子图间边的权重之和尽可能低&#xff0c;子图内边的权重之和尽可能高&#xff0c…

谱聚类(Spectral Clustering)算法介绍

一. 前言 本来想写关于聚类系列算法的介绍,但是聚类系列的其它几个算法原理比较简单,网上有大量的教程可以查阅。这里主要是介绍一下谱聚类算法,做一个学习笔记,同时也希望对想要了解该算法的朋友有一个帮助。关于聚类的其他系列算法,这里推荐一个写的很不错的博客。 谱…

聚类系列-谱聚类(spectral clustering)

聚类讲到此&#xff0c;也是我聚类系列的最后一篇博客了&#xff0c;最后一篇的话我们就来讲一下谱聚类。 谱聚类&#xff08;spectral clustering&#xff09;是一种基于图论的聚类方法&#xff0c;主要思想是把所有的数据看做空间中的点&#xff0c;这些点之间可以用边连接起…

谱聚类(spectral clustering)

1. 谱聚类概述 谱聚类是从图论中演化出来的算法&#xff0c;后来在聚类中得到了广泛的应用。它的主要思想是把所有的数据看做空间中的点&#xff0c;这些点之间可以用边连接起来。距离较远的两个点之间的边权重值较低&#xff0c;而距离较近的两个点之间的边权重值较高&#x…

谱聚类

谱聚类&#xff08;spectral clustering&#xff09;原理总结&#xff1a; 谱聚类&#xff08;spectral clustering&#xff09;是广泛使用的聚类算法&#xff0c;比起传统的K-Means算法&#xff0c;谱聚类对数据分布的适应性更强&#xff0c;聚类效果也很优秀&#xff0c;同时…

【机器学习】谱聚类(Spectral Clustering)

疑问 谱聚类的概念 谱聚类是一种针对图结构的聚类方法&#xff0c;将每个点都看作是一个图结构上的点&#xff0c;所以&#xff0c;判断两个点是否属于同一类的依据就是&#xff0c;两个点在图结构上是否有边相连&#xff0c;可以是直接相连也可以是间接相连。本质上就是一个图…

介绍谱聚类(spectral clustering)

文章目录 1、谱聚类概览2、谱聚类构图3、拉普拉斯矩阵4、切图聚类4.1RatioCut4.2Ncut5、总结流程 1、谱聚类概览 谱聚类演化于图论&#xff0c;后由于其表现出优秀的性能被广泛应用于聚类中&#xff0c;对比其他无监督聚类&#xff08;如kmeans&#xff09;&#xff0c;spectr…

聚类算法之谱聚类

谱聚类 1. 基本原理 它的主要思想&#xff1a;把所有数据看成空间中的点&#xff0c;这些点之间可以用变连接起来&#xff0c;距离较远的两个点之间的边权重较低&#xff0c;而距离较近的两个点之间的权重较高&#xff0c;通过对所有数据点组成的图进行切图&#xff0c;让切图…