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

结果如下

谱聚类算法核心步骤都是相同的:

•利用点对之间的相似性,构建亲和度矩阵;

•构建拉普拉斯矩阵;

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

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

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

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

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

simK=10;
Wij=zeros(r,r);% weight
% calculate the weight Matrix
for k=1:r
for n=1:r
Wij(k,n)=exp(-norm(X(k,:)-X(n,:))^2/2/sigma);% 计算权重
end
end % find the Knear for W
Wsort=zeros(r,r);
index=zeros(r,r);
for k=1:r
% 对每一行权重排序
[Wsort(k,:),index(k,:)]=sort(Wij(k,:)); %这句话经常不会用,记住了。
end W=Wij

(2) 构建Laplace Matrix

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

% D
D=simK.*eye(r);
% Laplace Matrix
L=eye(r)-D^(-0.5)*W*D^(-0.5);
% L=D-W

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

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

[Vect,lamdaMat]=eig(L);
lamda=zeros(k,1);
u=zeros(r,kNearNum);
% lamda是特征值
for k=1:r
lamda(k)=lamdaMat(k,k);
end
% lamda
% 对lamda排序,找出最小的K个lamda对应的特征向量组成u
[sortLamda,indexLamda]=sort(lamda);
countu=0;
for k=1:kNearNum
countu=countu+1;
u(:,countu)=Vect(:,indexLamda(k));
end
% % T
T=zeros(r,kNearNum);% 归一化后的u
sumU=zeros(1,kNearNum);% 为了归一化u,对每列求了平方和sumU
for n=1:kNearNum
for k=1:r
sumU(1,n)=sumU(1,n)+u(k,n)^2;
end
end for k=1:r
for n=1:kNearNum
T(k,n)=u(k,n)./sqrt(sumU(1,n));
end
end

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

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

A=Kmeans(T)  % key words

Kmeans详见下面链接

谱聚类Ng算法的Matlab简单实现的更多相关文章

  1. [zz]谱聚类

    了凡春秋USTC 谱聚类 http://chunqiu.blog.ustc.edu.cn/?p=505 最近忙着写文章,好久不写博客了.最近看到一个聚类方法--谱聚类,号称现代聚类方法,看到它简洁的公 ...

  2. 谱聚类(spectral clustering)原理总结

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

  3. 谱聚类(Spectral Clustring)原理

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

  4. 基于谱聚类的三维网格分割算法(Spectral Clustering)

    谱聚类(Spectral Clustering)是一种广泛使用的数据聚类算法,[Liu et al. 2004]基于谱聚类算法首次提出了一种三维网格分割方法.该方法首先构建一个相似矩阵用于记录网格上相 ...

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

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

  6. 谱聚类算法(Spectral Clustering)

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

  7. canopy聚类算法的MATLAB程序

    canopy聚类算法的MATLAB程序 凯鲁嘎吉 - 博客园 http://www.cnblogs.com/kailugaji/ 1. canopy聚类算法简介 Canopy聚类算法是一个将对象分组到 ...

  8. mean shift聚类算法的MATLAB程序

    mean shift聚类算法的MATLAB程序 凯鲁嘎吉 - 博客园 http://www.cnblogs.com/kailugaji/ 1. mean shift 简介 mean shift, 写的 ...

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

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

随机推荐

  1. 2016年11月29日 星期二 --出埃及记 Exodus 20:20

    2016年11月29日 星期二 --出埃及记 Exodus 20:20 Moses said to the people, "Do not be afraid. God has come t ...

  2. 循环嵌套,while循环,穷举迭代循环

    一.循环嵌套 简单的就是说,在一个for循环里嵌入多个小for循环. 其中,在打矩形.三角形和乘法口诀表之类的题目中,大for循环一般表示的是行数,其余的小for循环式每一行中的内容. 二.while ...

  3. IOSView显示特性设置

    一.主要用途 弹出模态ViewController是IOS变成中很有用的一个技术,UIKit提供的一些专门用于模态显示的ViewController,如UIImagePickerController等 ...

  4. linux下的文件系统

    转http://www.cnblogs.com/yyyyy5101/articles/1901842.html 谈谈个人对于文件系统的认识,其实这也体现了计算机操作系统的抽象:你不用管计算机中的文件如 ...

  5. java中局部变量和成员变量主要是他们作用域的区别

    成员变量个是类内部:局部变量是定义其的方法体内部(或者方法体内部的某一程序块内——大括号,主要看定义的位置).另外,成员变量可以不显式初始化,它们可以由系统设定默认值:局部变量没有默认值,所以必须设定 ...

  6. 网页3D效果库Three.js初窥

    网页3D效果库Three.js初窥 背景 一直想研究下web页面的3D效果,最后选择了一个比较的成熟的框架Three.js下手 ThreeJs官网 ThreeJs-github; 接下来我会陆续翻译 ...

  7. C#窗体截屏,简单例子

    private void button1_Click(object sender, EventArgs e) { Rectangle rect = System.Windows.Forms.Syste ...

  8. 中国特色社会主义的体制中有这样的现象:地方省政府要坚持党的领导和按 照国务院的指示进行安全生产。请编写一个java应用程序描述上述的体制现象。

    package a; public interface CentralPartyCommittee { void partyLeader(); } package a; public abstract ...

  9. MD5加密算法

    package com.bao.tools.encryption; import java.security.MessageDigest;import java.security.NoSuchAlgo ...

  10. Spring的核心机制——依赖注入(Dependency Inject)

    Spring不仅提供对象,还提供对象的属性值,而不是由使用该对象的程序所提供的. Java应用是由一些相互协作的对象所组成的,在Spring中这种相互协作的关系就叫依赖关系. 如果A组件调用了B组件的 ...