请编写一个谱聚类算法,实现“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. boost库学习之开篇

    本系列文章使用boost_1.58.0版本. 一.欢迎使用boost C++库 boost致力于提供一个免费的.便携的源代码级的库. 我们重视那些与C++标准一起工作良好的库.boost库将要成为一个 ...

  2. eclipse alt+/ 无效时,如何设置 《转》

    一般情况下alt+/有代码提示作用,还有代码提示的快捷代码也不是alt+/,因此要恢复代码提示用alt+/.需要做两件事. 在 Window - Preferences - General - Key ...

  3. 2016年6月28日 星期二 --出埃及记 Exodus 14:25

    2016年6月28日 星期二 --出埃及记 Exodus 14:25 He made the wheels of their chariots come off so that they had di ...

  4. vs配置opencv

    配置OpenCv: 一.新建工程 无论是mfc还是控制台程序都可以. 二.下载opencb,安装在非空格路径下面 解压出来有两个文件夹:build和source,主要用到build,build-x86 ...

  5. 编写一个Java程序,计算一下1,2,…,9这9个数字可以组成多少个互不相同的、无重复数字的三位偶数。

    package a; public class SanWeiOuShu { public static void main(String[] args) { String str="1234 ...

  6. BZOJ 3601: 一个人的数论

    题目链接:www.lydsy.com/JudgeOnline/problem.php?id=3601 题意: 思路: 因此可以用高斯消元得到ai. const int mod=1000000007; ...

  7. c++ 动态分配二维数组 new 二维数组

    #include "stdafx.h" #include <iostream> using namespace std; int _tmain(int argc, _T ...

  8. jquery ajax请求时,设置请求头信息

    设置一个名为 headers 的参数 参考代码: // attempt to make an XMLHttpRequest to indeed.com // jQuery 1.6.1 and Chro ...

  9. ps aux 查看进程信息

    [root@localhost Desktop]# ps auxUSER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMANDroot 1 0.0 0.3 ...

  10. Trigger Execution Sequence Of Oracle Forms

    Sequence of triggers fires on Commit.1.  KEY Commit2.  Pre Commit3.  Pre/On/Post Delete4.  Pre/On/Po ...