作者:桂。

时间: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:N
for j =1:N
W(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$如何取值,不过这里就不做进一步讨论了。

参考:

谱聚类(Spectral clustering)(2):NCut的更多相关文章

  1. 【聚类算法】谱聚类(Spectral Clustering)

    目录: 1.问题描述 2.问题转化 3.划分准则 4.总结 1.问题描述 谱聚类(Spectral Clustering, SC)是一种基于图论的聚类方法——将带权无向图划分为两个或两个以上的最优子图 ...

  2. 谱聚类(Spectral Clustering)详解

    谱聚类(Spectral Clustering)详解 谱聚类(Spectral Clustering, SC)是一种基于图论的聚类方法——将带权无向图划分为两个或两个以上的最优子图,使子图内部尽量相似 ...

  3. 谱聚类 Spectral Clustering

    转自:http://www.cnblogs.com/wentingtu/archive/2011/12/22/2297426.html 如果说 K-means 和 GMM 这些聚类的方法是古代流行的算 ...

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

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

  5. 谱聚类算法(Spectral Clustering)优化与扩展

    谱聚类(Spectral Clustering, SC)在前面的博文中已经详述,是一种基于图论的聚类方法,简单形象且理论基础充分,在社交网络中广泛应用.本文将讲述进一步扩展其应用场景:首先是User- ...

  6. 谱聚类算法(Spectral Clustering)

        谱聚类(Spectral Clustering, SC)是一种基于图论的聚类方法--将带权无向图划分为两个或两个以上的最优子图,使子图内部尽量相似,而子图间距离尽量距离较远,以达到常见的聚类的 ...

  7. Spectral Clustering

    谱聚类算法(Spectral Clustering)优化与扩展   谱聚类(Spectral Clustering, SC)在前面的博文中已经详述,是一种基于图论的聚类方法,简单形象且理论基础充分,在 ...

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

    原文请戳:http://blog.csdn.net/abcjennifer/article/details/8170687 聚类算法是ML中一个重要分支,一般采用unsupervised learni ...

  9. 谱聚类(Spectral clustering)分析(1)

    作者:桂. 时间:2017-04-13  19:14:48 链接:http://www.cnblogs.com/xingshansi/p/6702174.html 声明:本文大部分内容来自:刘建平Pi ...

  10. 谱聚类(Spectral clustering)(1):RatioCut

    作者:桂. 时间:2017-04-13  19:14:48 链接:http://www.cnblogs.com/xingshansi/p/6702174.html 声明:本文大部分内容来自:刘建平Pi ...

随机推荐

  1. 循环神经网络(RNN)模型与前向反向传播算法

    在前面我们讲到了DNN,以及DNN的特例CNN的模型和前向反向传播算法,这些算法都是前向反馈的,模型的输出和模型本身没有关联关系.今天我们就讨论另一类输出和模型间有反馈的神经网络:循环神经网络(Rec ...

  2. 读书笔记 effective c++ Item 31 把文件之间的编译依赖降到最低

    1. 牵一发而动全身 现在开始进入你的C++程序,你对你的类实现做了一个很小的改动.注意,不是接口,只是实现:一个私有的stuff.然后你需要rebuild你的程序,计算着这个build应该几秒钟就足 ...

  3. 用C++11实现C++17的apply(动态数组用作函数参数)

    标题有点错误,apply是用tuple做参数,调用一个函数.这个标题是为了能更好的适配搜索关键字. 动态数组用作函数参数更适合嵌入了脚本环境的C++程序,比如lua或javascript(js). 若 ...

  4. 【原创】Ionic单页应用跳转外链,构造路由返回的解决办法及代码

    在开发广汽菲克微信企业号的填单审批webApp的时候出现了一个问题: 单据是带有附件的,而且存在各种不同的格式,需要后台处理后给前台链接地址,点击预览,微信浏览器的特性就是只能存在一个浏览器窗口, 这 ...

  5. 1592: [Usaco2008 Feb]Making the Grade 路面修整

    1592: [Usaco2008 Feb]Making the Grade 路面修整 Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 428  Solv ...

  6. SignalR的一点点东西

    JS部分 $.connection.hub.start().done(function () { alert(ok); }).fail(function (error) { alert(error); ...

  7. BFS-基础简单的算法

    前言 有时候,当你并不了解很多高级算法的时候,搜索不失为一种解决问题的好方法,而且很多高级算法有或多或少的会用到搜索或者搜索的思想.可见,搜索是一个基础并且必须要掌握的算法. 在这篇文章中,会对BFS ...

  8. MyEclipse10的正确破解方法

    无法转载,故给出原文链接,以供需要者. MyEclipse10的正确破解方法

  9. [译]Selenium Python文档:七、WebDriver API接口

    由于API文档格式不太适合cnblog博客,暂且翻译一部分,且暂未校对 注意:这不是官方文档,官方 API文档在这里. 本章包含Selenium WebDriver的所有接口 推荐import风格 本 ...

  10. c#中遍历各种数据集合的方法

    1.遍历枚举类型 补:typeof()方法中只能传具体的类名.类型名称(int32...),不可以是变量名称.类似的方法有GetType(),GteType()方法继承自object,所以c#中任何对 ...