作者:桂。

时间:2017-04-13  21:19:41

链接:http://www.cnblogs.com/xingshansi/p/6706400.html

声明:欢迎被转载,不过记得注明出处哦~


前言

本文为谱聚类的第二篇,主要梳理NCut算法,关于谱聚类的更多细节信息,可以参考之前的博文:

  1)拉普拉斯矩阵(Laplace Matrix)与瑞利熵(Rayleigh quotient)

  2)谱聚类之RatioCut算法

内容主要参考刘建平Pinard博客,更多细节可以参考该作者博文,本文最后给出代码实现,全文包括:

  1)NCut原理

  2)NCut算法实现

一、NCut原理

  Ncut切图和RatioCut切图很类似,但是把Ratiocut的分母$|Ai|$换成$vol(A_i)$,由于子图样本的个数多并不一定权重就大,我们切图时基于权重也更合我们的目标,因此一般来说Ncut切图优于RatioCut切图。

$vol(A): = \sum\limits_{i \in A}d_i$

对应的,Ncut切图对指示向量h做了改进。注意到RatioCut切图的指示向量使用的是$\frac{1}{\sqrt{|A_j|}}$标示样本归属,而Ncut切图使用了子图权重$\frac{1}{\sqrt{vol(A_j)}}$来标示指示向量h,定义如下:

那么我们对于$h_i^TLh_i$有:

推导方式和RatioCut完全一致。也就是说,我们的优化目标仍然是

但是此时我们的$H^TH \neq I$而是$H^TDH = I$,推导如下:

也就是说,此时我们的优化目标最终为:

这个就是泛化瑞利熵的求解问题,之前文章分析过。这里再次给出细节分析。

令$H = D^{-1/2}F$,则优化目标转化为:

至此已经完成了NCut的理论。

画蛇添足一下吧,注意到:

事实上,连拉普拉斯矩阵都懒得构造了。

二、NCut算法实现

首先给出算法步骤:

步骤一:求解邻接矩阵W和度矩阵D

步骤二:对${D^{ - \frac{1}{2}}}W{D^{ - \frac{1}{2}}}$进行特征值分解,并取K个最大特征值对应的特征向量(K为类别数目)

步骤三:将求解的K个特征向量(并分别归一化),构成新的矩阵,对该矩阵进行Kmeans处理

Kmeans得到的类别标签,就是原数据的类别标签,至此完成NCut聚类。

给出代码实现:

sigma2 = 0.01;
%%Step1: Calculate  matrixs
for i = 1:Nfor j =1:NW(i,j) = exp(-sqrt(sum((X(i,:)-X(j,:)).^2))/2/sigma2);end
end
W = W-diag(diag(W));% adjacency matrix
D = diag(sum(W)); %degree matrix
%%Step2:Eigenvalues decomposition
K = 3;
[Q,V] = eigs(D^(-1/2)*W*D^(-1/2),K);
%%Step3:New matrix Q
Q = Q./repmat(sqrt(diag(Q'*Q)'),N,1);
[idx,ctrs] = kmeans(Q,K); 

结果图:

测试一下,按数据为3类进行谱聚类,可以看出来还是有效的,谱聚类中高斯权重涉及到$\sigma$如何取值,不过这里就不做进一步讨论了。

参考:

  • http://www.cnblogs.com/pinard/p/6221564.html

转载于:https://www.cnblogs.com/xingshansi/p/6706400.html

谱聚类(Spectral clustering)(2):NCut相关推荐

  1. 22 谱聚类 Spectral Clustering

    1 Background 本章节主要是描述的一种聚类算法,谱聚类(Spectral Clustering).对机器学习有点了解的同学对聚类算法肯定是很熟悉的,那么谱聚类和之前普通的聚类算法有什么不一样 ...

  2. 谱聚类 Spectral Clustering

    谱聚类 Spectral Clustering sklearn.cluster.SpectralClustering 谱聚类(Spectral Clustering, SC), 是一种基于图论的聚类方 ...

  3. 谱聚类(Spectral Clustering)详解

    原文地址为: 谱聚类(Spectral Clustering)详解 谱聚类(Spectral Clustering)详解 谱聚类(Spectral Clustering, SC)是一种基于图论的聚类方 ...

  4. python谱聚类算法_谱聚类Spectral clustering(SC)

    在之前的文章里,介绍了比较传统的K-Means聚类.Affinity Propagation(AP)聚类.比K-Means更快的Mini Batch K-Means聚类以及混合高斯模型Gaussian ...

  5. 谱聚类(spectral clustering)

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

  6. 聚类算法K-Means, K-Medoids, GMM, Spectral clustering,Ncut .

    聚类算法是ML中一个重要分支,一般采用unsupervised learning进行学习,本文根据常见聚类算法分类讲解K-Means, K-Medoids, GMM, Spectral cluster ...

  7. 聚类算法K-Means, K-Medoids, GMM, Spectral clustering,Ncut

    聚类算法是ML中一个重要分支,一般采用unsupervised learning进行学习,本文根据常见聚类算法分类讲解K-Means, K-Medoids, GMM, Spectral cluster ...

  8. 聚类算法K-Means K-Medoids GMM Spectral clustering,Ncut

    聚类算法是ML中一个重要分支,一般采用unsupervised learning进行学习,本文根据常见聚类算法分类讲解K-Means, K-Medoids, GMM, Spectral cluster ...

  9. python谱聚类算法_谱聚类(spectral clustering)原理总结

    谱聚类(spectral clustering)是广泛使用的聚类算法,比起传统的K-Means算法,谱聚类对数据分布的适应性更强,聚类效果也很优秀,同时聚类的计算量也小很多,更加难能可贵的是实现起来也 ...

  10. 高斯核函数初始化邻接矩阵_转:谱聚类(spectral clustering)原理总结

    转自:https://www.cnblogs.com/pinard/p/6221564.html 谱聚类(spectral clustering)是广泛使用的聚类算法,比起传统的K-Means算法,谱 ...

最新文章

  1. 激光雷达和相机感知融合简介
  2. Map集合的几种遍历方式
  3. C语言结构体赋值和有指针成员的结构体赋值
  4. 阿里P8架构师谈:Restful、SOAP、RPC、SOA、微服务之间的区别
  5. java地址自动拆分_java – Hibernate:每个月自动拆分表
  6. java线程6种状态转换,Java线程的生命周期和各种状态转换详解
  7. 关于struts2 中result type=stream
  8. win10远程桌面Android软件,Android端Win10远程桌面更新:支持Windows虚拟桌面
  9. html页面pc端显示正常,手机端页面整体偏左(兼容性处理)
  10. centos8搭建ftp虚拟用户登录
  11. [原创]windows server 2012 AD架构 试验 系列 – 17管理用户AD帐号
  12. react钩子_使用Web动画API和React钩子创建高性能动画
  13. 服务器维护中登录失败日语,Flutter从服务器中获取日语字符,解码错误
  14. 用matlab批量修改图片名称
  15. 数据库表的映射与java类映射处理
  16. FileReader的使用方法
  17. Go进阶:Go语言最热门的开源Web开发框架总结
  18. LeetCode.1005-K次取负数组和最大(Maximize Sum Of Array After K Negations)
  19. 手游神武2最新服务器,神武2手游新服开启公告 安卓IOS新服开启
  20. python爬取去哪儿网酒店信息

热门文章

  1. 【linux】ARM开发板上设置RTC时间,断电重启后,设置失效的原因分析
  2. android联动动画,利用 CollapsingToolbarLayout 完成联动的动画效果
  3. #实现互联网聊天_局域网内两台电脑如何实时语音聊天通话
  4. Java项目:车租赁管理系统(java+Gui+文档)
  5. python元组转字典_python中怎么将元组、字典转化为列表
  6. node.js和npm版本升级及升级过程中遇到的问题和解决方案
  7. 只有20%的iOS程序员能看懂:详解intrinsicContentSize 及 约束优先级/content Hugging/content Compression Resistance
  8. pod setup慢的解决方法
  9. 网络协议OSI、TCP/IP协议、Socket套接字和第三方AsyncSock的使用等解析
  10. C(第一个C程序) 和 C++ (第一个C++程序)对比碰撞