谱聚类--Ng算法的Matlab简单实现

2024-06-12 20:38

本文主要是介绍谱聚类--Ng算法的Matlab简单实现,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!


请编写一个谱聚类算法,实现“Normalized Spectral Clustering—Algorithm 3 (Ng 算法)”

结果如下


谱聚类算法核心步骤都是相同的:
•利用点对之间的相似性,构建亲和度矩阵;
•构建拉普拉斯矩阵;
•求解拉普拉斯矩阵最小的特征值对应的特征向量(通常舍弃零特征所对应的分量全相等的特征向量);
•由这些特征向量构成样本点的新特征,采用K-means等聚类方法完成最后的聚类。

采用K-means等聚类方法完成最后的聚类  意思是,对特征向量构成的矩阵T,每一行作为一个样本点,进行K均值聚类。

(1)利用点对之间的相似性,构建亲和度矩阵

构建图时,顶点的度为 simK=10,分两类kNearNum=2

[plain] view plain copy
  1. simK=10;  
  2. Wij=zeros(r,r);% weight  
  3. % calculate the weight Matrix  
  4. for k=1:r    
  5.     for n=1:r  
  6.          Wij(k,n)=exp(-norm(X(k,:)-X(n,:))^2/2/sigma);% 计算权重  
  7.     end  
  8. end  
  9.   
  10. % find the Knear  for W  
  11. Wsort=zeros(r,r);  
  12. index=zeros(r,r);  
  13. for k=1:r  
  14. %  对每一行权重排序  
  15.    [Wsort(k,:),index(k,:)]=sort(Wij(k,:));  %这句话经常不会用,记住了。     
  16. end  
  17.   
  18. W=Wij  


(2) 构建Laplace Matrix

首先需要个对角阵D,其对角元素是亲和度矩阵的每行的和,这里也就是simK*eye(r)

[html] view plain copy
  1. % D  
  2. D=simK.*eye(r);  
  3. % Laplace Matrix  
  4. L=eye(r)-D^(-0.5)*W*D^(-0.5);  
  5. L=D-W  

(3) 求解拉普拉斯矩阵最小的特征值(lamda)对应的特征向量)(通常舍弃零特征所对应的分量全相等的特征向量);

把特征向量 Vect里最小的kNearNum(聚类的个数)个用u来存储。

[html] view plain copy
  1. [Vect,lamdaMat]=eig(L);  
  2. lamda=zeros(k,1);  
  3. u=zeros(r,kNearNum);  
  4. % lamda是特征值  
  5. for k=1:r  
  6.     lamda(k)=lamdaMat(k,k);  
  7. end  
  8. % lamda  
  9. %  对lamda排序,找出最小的K个lamda对应的特征向量组成u  
  10. [sortLamda,indexLamda]=sort(lamda);   
  11. countu=0;  
  12. for k=1:kNearNum  
  13.     countu=countu+1;  
  14.     u(:,countu)=Vect(:,indexLamda(k));    
  15. end  
  16. % % T  
  17. T=zeros(r,kNearNum);% 归一化后的u  
  18. sumU=zeros(1,kNearNum);% 为了归一化u,对每列求了平方和sumU  
  19. for n=1:kNearNum  
  20.     for k=1:r  
  21.         sumU(1,n)=sumU(1,n)+u(k,n)^2;  
  22.     end  
  23. end  
  24.   
  25. for k=1:r  
  26.     for n=1:kNearNum  
  27.         T(k,n)=u(k,n)./sqrt(sumU(1,n));  
  28.     end  
  29. end  

(4)由这些特征向量构成样本点的新特征, 采用K-means等聚类方法完成最后的聚类

意思是,对特征向量构成的矩阵T,每一行作为一个样本点聚类

[html] view plain copy
A=Kmeans(T)  % key words

这篇关于谱聚类--Ng算法的Matlab简单实现的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1055284

相关文章

redis群集简单部署过程

《redis群集简单部署过程》文章介绍了Redis,一个高性能的键值存储系统,其支持多种数据结构和命令,它还讨论了Redis的服务器端架构、数据存储和获取、协议和命令、高可用性方案、缓存机制以及监控和... 目录Redis介绍1. 基本概念2. 服务器端3. 存储和获取数据4. 协议和命令5. 高可用性6.

Java深度学习库DJL实现Python的NumPy方式

《Java深度学习库DJL实现Python的NumPy方式》本文介绍了DJL库的背景和基本功能,包括NDArray的创建、数学运算、数据获取和设置等,同时,还展示了如何使用NDArray进行数据预处理... 目录1 NDArray 的背景介绍1.1 架构2 JavaDJL使用2.1 安装DJL2.2 基本操

最长公共子序列问题的深度分析与Java实现方式

《最长公共子序列问题的深度分析与Java实现方式》本文详细介绍了最长公共子序列(LCS)问题,包括其概念、暴力解法、动态规划解法,并提供了Java代码实现,暴力解法虽然简单,但在大数据处理中效率较低,... 目录最长公共子序列问题概述问题理解与示例分析暴力解法思路与示例代码动态规划解法DP 表的构建与意义动

java父子线程之间实现共享传递数据

《java父子线程之间实现共享传递数据》本文介绍了Java中父子线程间共享传递数据的几种方法,包括ThreadLocal变量、并发集合和内存队列或消息队列,并提醒注意并发安全问题... 目录通过 ThreadLocal 变量共享数据通过并发集合共享数据通过内存队列或消息队列共享数据注意并发安全问题总结在 J

SpringBoot+MyBatis-Flex配置ProxySQL的实现步骤

《SpringBoot+MyBatis-Flex配置ProxySQL的实现步骤》本文主要介绍了SpringBoot+MyBatis-Flex配置ProxySQL的实现步骤,文中通过示例代码介绍的非常详... 目录 目标 步骤 1:确保 ProxySQL 和 mysql 主从同步已正确配置ProxySQL 的

JS 实现复制到剪贴板的几种方式小结

《JS实现复制到剪贴板的几种方式小结》本文主要介绍了JS实现复制到剪贴板的几种方式小结,包括ClipboardAPI和document.execCommand这两种方法,具有一定的参考价值,感兴趣的... 目录一、Clipboard API相关属性方法二、document.execCommand优点:缺点:

nginx部署https网站的实现步骤(亲测)

《nginx部署https网站的实现步骤(亲测)》本文详细介绍了使用Nginx在保持与http服务兼容的情况下部署HTTPS,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值... 目录步骤 1:安装 Nginx步骤 2:获取 SSL 证书步骤 3:手动配置 Nginx步骤 4:测

Idea实现接口的方法上无法添加@Override注解的解决方案

《Idea实现接口的方法上无法添加@Override注解的解决方案》文章介绍了在IDEA中实现接口方法时无法添加@Override注解的问题及其解决方法,主要步骤包括更改项目结构中的Languagel... 目录Idea实现接China编程口的方法上无法添加@javascriptOverride注解错误原因解决方

轻松上手MYSQL之JSON函数实现高效数据查询与操作

《轻松上手MYSQL之JSON函数实现高效数据查询与操作》:本文主要介绍轻松上手MYSQL之JSON函数实现高效数据查询与操作的相关资料,MySQL提供了多个JSON函数,用于处理和查询JSON数... 目录一、jsON_EXTRACT 提取指定数据二、JSON_UNQUOTE 取消双引号三、JSON_KE

MySql死锁怎么排查的方法实现

《MySql死锁怎么排查的方法实现》本文主要介绍了MySql死锁怎么排查的方法实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧... 目录前言一、死锁排查方法1. 查看死锁日志方法 1:启用死锁日志输出方法 2:检查 mysql 错误