Spectral Clustering谱聚类之Matlab

谱聚类有两种:
谱聚类的基本概念可以参考pluskid的文章:
漫谈 Clustering (4): Spectral Clustering
这里则直接给出实现方式:

[1]. Ncut – Normalized cut
比较经典的是由jianbo shi实现的matlab代码,在服务器上用gcc4.4*版本以上进行编译就可以了:

http://www.cis.upenn.edu/~jshi/software/

编译Ok, 后这里常见的一个错误就是:
Error using arpackc
Expect 2 output arguments

Error in eigs_new (line 240)
arpackc( aupdfun, ido, …

Error in ncut (line 83)
[vbar,s,convergence] =
eigs_new(@mex_w_times_x_symmetric,size(P,1),nbEigenValues,’LA’,options,tril(P));

Error in ncutW (line 9)
[NcutEigenvectors,NcutEigenvalues] =
ncut(W,nbcluster);

这里给出了比较好的解释和解决方案:

http://stackoverflow.com/questions/16443202/normalized-cuts-with-matlab-2013a

我们直接把eigs_new 改为eigs就可以运行了,但是并没有大功告成,因为作者发布的只是一个demo版本:

此处要注意几点:
1. 修改compute_relation.m文件中 dstances的计算方式,demo中只用了两维特征计算聚类。而全维度计算的那行被注释掉了:
distances = X2distances(data’);

2. 看到做cv的人写matlab代码,习惯用length(fea)来取样本的size,放到nlp程序中,直接的问题就是length(fea)变成了特征的维数。。。哈哈,我们还是要对其进行修正,虽然无大碍。

不过回过头来,其实现在有更简洁的版本,可能很多论文都在跑这个版本:
这里,We used the Matlab code written by Ingo Buerk (http://www.mathworks.com/matlabcentral/fileexchange/34412) to do spectral clustering using the algorithm proposed by Ncut.

确实用起来比较方便。

在这里折服一下,本科毕设能够敬业着开发GUI把Spectral Clustering做的如此傻瓜式,点赞!

不过此工具导入的数据格式为CSV,matlab写CSV文件的方式为:
csvwrite(csvname, var);

[2]. Rcut – Ratio cut
上述方法比较常用一些,Ratio cut 则参考这篇文章:
S. Wang and J. M. Siskind, “Image segmentation with ratio cut,” Pattern Analysis and Machine Intelligence, IEEE Transactions on, vol. 25, no. 6, pp. 675–690, 2003

http://www.cse.sc.edu/~songwang/document/

发表评论

电子邮件地址不会被公开。 必填项已用 * 标注

*

您可以使用这些 HTML 标签和属性: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>