谱聚类Ng算法的Matlab简单实现
请编写一个谱聚类算法,实现“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简单实现的更多相关文章
- [zz]谱聚类
了凡春秋USTC 谱聚类 http://chunqiu.blog.ustc.edu.cn/?p=505 最近忙着写文章,好久不写博客了.最近看到一个聚类方法--谱聚类,号称现代聚类方法,看到它简洁的公 ...
- 谱聚类(spectral clustering)原理总结
谱聚类(spectral clustering)是广泛使用的聚类算法,比起传统的K-Means算法,谱聚类对数据分布的适应性更强,聚类效果也很优秀,同时聚类的计算量也小很多,更加难能可贵的是实现起来也 ...
- 谱聚类(Spectral Clustring)原理
谱聚类(spectral clustering)是广泛使用的聚类算法,比起传统的K-Means算法,谱聚类对数据分布的适应性更强,聚类效果也很优秀,同时聚类的计算量也小很多,更加难能可贵的是实现起来也 ...
- 基于谱聚类的三维网格分割算法(Spectral Clustering)
谱聚类(Spectral Clustering)是一种广泛使用的数据聚类算法,[Liu et al. 2004]基于谱聚类算法首次提出了一种三维网格分割方法.该方法首先构建一个相似矩阵用于记录网格上相 ...
- 谱聚类算法(Spectral Clustering)优化与扩展
谱聚类(Spectral Clustering, SC)在前面的博文中已经详述,是一种基于图论的聚类方法,简单形象且理论基础充分,在社交网络中广泛应用.本文将讲述进一步扩展其应用场景:首先是User- ...
- 谱聚类算法(Spectral Clustering)
谱聚类(Spectral Clustering, SC)是一种基于图论的聚类方法--将带权无向图划分为两个或两个以上的最优子图,使子图内部尽量相似,而子图间距离尽量距离较远,以达到常见的聚类的 ...
- canopy聚类算法的MATLAB程序
canopy聚类算法的MATLAB程序 凯鲁嘎吉 - 博客园 http://www.cnblogs.com/kailugaji/ 1. canopy聚类算法简介 Canopy聚类算法是一个将对象分组到 ...
- mean shift聚类算法的MATLAB程序
mean shift聚类算法的MATLAB程序 凯鲁嘎吉 - 博客园 http://www.cnblogs.com/kailugaji/ 1. mean shift 简介 mean shift, 写的 ...
- 【聚类算法】谱聚类(Spectral Clustering)
目录: 1.问题描述 2.问题转化 3.划分准则 4.总结 1.问题描述 谱聚类(Spectral Clustering, SC)是一种基于图论的聚类方法——将带权无向图划分为两个或两个以上的最优子图 ...
随机推荐
- HDU(3555),数位DP
题目链接:http://acm.split.hdu.edu.cn/showproblem.php?pid=3555 Bomb Time Limit: 2000/1000 MS (Java/Others ...
- Poj(2679),SPFA,二级比较
题目链接:http://poj.org/problem?id=2679 嗯,思路清晰,先DFS看是不是通路,接着就是SPFA找最短路(路是费用,费用相同就比较路的长度). 超哥的代码还有一点问题,初始 ...
- 控制窗口不能拖拉出主窗口 Dialog And Window
/* 控制窗口不能拖拉出主窗口(覆写) */var easyuiPanelOnMove = function(left, top) { if ($(this).panel('options').reS ...
- 2016年12月5日 星期一 --出埃及记 Exodus 20:26
2016年12月5日 星期一 --出埃及记 Exodus 20:26 And do not go up to my altar on steps, lest your nakedness be exp ...
- JAVA中线程池启动定时任务
/** * 用线程池启动定时器 * @param args */ public static void main(String[] args) { //10秒启动 Executors.newSched ...
- PHP脚本redis类的实例源码
class redisDB{ private $redis; //redis对象 /** * 初始化Redis * $config = ar ...
- HTTP缓存机制
缓存对于移动端是非常重要的存在. 减少请求次数,减小服务器压力. 本地数据读取速度更快,让页面不会空白几百毫秒. 在无网络的情况下提供数据. 缓存一般由服务器控制(通过某些方式可以本地控制缓存,比如向 ...
- Java_你应该知道的26种设计模式
四. 模板方法模式 Definition: Define the skeleton of an algorithm in an operation, deferring some steps to s ...
- 用PyAIML开发简单的对话机器人
AIML files are a subset of Extensible Mark-up Language (XML) that can store different text patterns ...
- 列联表(Crosstabs)
四格表(2*2的列联表): Tmin为最小的频数:N为频数之和. 1 当 Tmin≥5,N≥40时, 用普通卡方检验公式;2 当1≦Tmin≦5, N≥40时, 用校正卡方检验公式;3 Tmin< ...