谱聚类Python代码详解
谱聚类算法步骤
整体来说,谱聚类算法要做的就是先求出相似性矩阵,然后对该矩阵归一化运算,之后求前个特征向量,最后运用K-means算法分类。 实际上,谱聚类要做的事情其实就是将高维度的数据,以特征向量的形式简洁表达,属于一种降维的过程。本来高维度用k-means不好分的点,在经过线性变换以及降维之后,十分容易求解。谱聚类的步骤如下:
1. 按照式计算相似性矩阵
2. 使用KNN计算邻接矩阵A,同时度矩阵D可以通过对A的每一行进行求和得到D = np.sum(A, axis=1)
3. 拉普拉斯矩阵
4.标准化
5. 对标准化的进行特征值分解,得到特征向量
6. 对进行k-means聚类。
谱聚类Python代码
1. 相似度矩阵
def euclidDistance(x1, x2, sqrt_flag=False):res = np.sum((x1-x2)**2)if sqrt_flag:res = np.sqrt(res)return resdef calEuclidDistanceMatrix(X):X = np.array(X)S = np.zeros((len(X), len(X)))for i in range(len(X)):for j in range(i+1, len(X)):S[i][j] = 1.0 * euclidDistance(X[i], X[j])S[j][i] = S[i][j]return S
对于输入数据,其相似度矩阵S为 ,S 的第 行()表示第 个元素与其他所有元素的相似度。
2. 邻接矩阵
构建邻接矩阵 A 的方法有三类:ϵ-邻近法,K邻近法(KNN)和全连接法。目前最常用就是KNN和全连接法。
def myKNN(S, k, sigma=1.0):N = len(S)A = np.zeros((N,N))for i in range(N):dist_with_index = zip(S[i], range(N))dist_with_index = sorted(dist_with_index, key=lambda x:x[0])neighbours_id = [dist_with_index[m][1] for m in range(k+1)] # xi's k nearest neighboursfor j in neighbours_id: # xj is xi's neighbourA[i][j] = np.exp(-S[i][j]/2/sigma/sigma)A[j][i] = A[i][j] # mutuallyreturn A
3. 标准化的拉普拉斯矩阵
def calLaplacianMatrix(adjacentMatrix):# compute the Degree Matrix: D=sum(A)degreeMatrix = np.sum(adjacentMatrix, axis=1)# compute the Laplacian Matrix: L=D-AlaplacianMatrix = np.diag(degreeMatrix) - adjacentMatrix# normailze# D^(-1/2) L D^(-1/2)sqrtDegreeMatrix = np.diag(1.0 / (degreeMatrix ** (0.5)))return np.dot(np.dot(sqrtDegreeMatrix, laplacianMatrix), sqrtDegreeMatrix)
拉普拉斯矩阵是半正定对称矩阵有如下性质:
- 对称矩阵一定n个线性无关的特征向量
- 半正定矩阵的特征值一定非负
- 对阵矩阵的特征向量相互正交,即所有特征向量构成的矩阵为正交矩阵
4. 特征值分解
lam, H = np.linalg.eig(Laplacian) # H'shape is n*n
5. K-means
from sklearn.cluster import KMeans
def spKmeans(H):sp_kmeans = KMeans(n_clusters=2).fit(H)return sp_kmeans.labels_
参考:https://blog.csdn.net/songbinxu/article/details/80838865
https://www.zhihu.com/question/54504471
谱聚类Python代码详解相关推荐
- 基于模糊C均值聚类(FCM)的图像分割原理+python代码详解
一.模糊 "模糊":一个元素可以不同程度的属于某几个子集,也就是说元素对于集合的隶属度可以在[0,1]上取连续值. 二.步骤 2.1步骤 翻译一下: S1:初始化参数:加权指数m, ...
- 谱聚类(Spectral Clustering)详解
原文地址为: 谱聚类(Spectral Clustering)详解 谱聚类(Spectral Clustering)详解 谱聚类(Spectral Clustering, SC)是一种基于图论的聚类方 ...
- 【2023年第十一届泰迪杯数据挖掘挑战赛】B题:产品订单的数据分析与需求预测 建模及python代码详解 问题一
相关链接 [2023年第十一届泰迪杯数据挖掘挑战赛]B题:产品订单的数据分析与需求预测 建模及python代码详解 问题一 [2023年第十一届泰迪杯数据挖掘挑战赛]B题:产品订单的数据分析与需求预测 ...
- 【2023年第十一届泰迪杯数据挖掘挑战赛】C题:泰迪内推平台招聘与求职双向推荐系统构建 建模及python代码详解 问题一
相关链接 [2023年第十一届泰迪杯数据挖掘挑战赛]C题泰迪内推平台招聘与求职双向推荐系统构建 建模及python代码详解 问题一 [2023年第十一届泰迪杯数据挖掘挑战赛]C题泰迪内推平台招聘与求职 ...
- 【2023年第十一届泰迪杯数据挖掘挑战赛】B题:产品订单的数据分析与需求预测 建模及python代码详解 问题二
相关链接 [2023年第十一届泰迪杯数据挖掘挑战赛]B题:产品订单的数据分析与需求预测 建模及python代码详解 问题一 [2023年第十一届泰迪杯数据挖掘挑战赛]B题:产品订单的数据分析与需求预测 ...
- 【论文必用】模糊C均值聚类的简单介绍、复现及Python代码详解、聚类可视化图的绘制过程详解!
详解模糊C均值聚类 一.聚类 二.模糊C均值聚类 三.模糊C均值聚类的Python实现 四.参考链接 一.聚类 聚类的定义: 将物理或抽象对象的集合分成由类似的对象组成的多个类的过程被称为聚类.由聚类 ...
- 谱聚类python代码_Python 谱聚类算法从零开始
谱聚类算法是一种常用的无监督机器学习算法,其性能优于其他聚类方法. 此外,谱聚类实现起来非常简单,并且可以通过标准线性代数方法有效地求解. 在谱聚类算法中,根据数据点之间的相似性而不是k-均值中的绝对 ...
- 转:完整的最简单的谱聚类python代码
http://blog.csdn.net/waleking/article/details/7584084 针对karate_club数据集,做了谱聚类.由于是2-way clustering,比较简 ...
- 美国队长的工资 python代码-详解用Python练习画个美队盾牌
0 环境 Python版本:3.6.6 操作系统:Mac OS Mojave 10.14.2 1 引言 最近我媳妇每天晚上吃饭时候也拿手机看,上厕所也在看. 看着看着还会笑?WTF?你在干嘛呢? 没错 ...
最新文章
- 腾讯云的Ubuntu 18.04的镜像地址
- 企业创新管理的八大误区
- 【剑指offer】最长不含重复字符的子字符串
- 在geth客户端调用已部署的智能合约
- 【Linux网络编程】IP地址分类和介绍
- 嵌入式系统开发怎样快速度入门
- ORA-03114乌龙处理
- Android studio之编译出现 Error:null value in entry: outputDirectory=null
- CentOS6.4安装包初识
- oracle中获取列的值,oracle - Oracle-SQL从具有特定列和值的所有表中获取数据 - SO中文参考 - www.soinside.com...
- mybatis执行的核心步骤
- 【数据结构和算法笔记】用c语言实现栈
- gettype php,gettype
- link标签 rel=“ alternate“ 应用解析
- 向数据库中存取图片(BITMAP)
- Android Hook技术详解
- frida hook 出现 Process terminated
- BIOS的两种引导模式
- 孙陶然:创新是最好的生存之道
- mysql怎么截取时分秒_mysql获取表中日期的年月日时分秒