matlab实现谱聚类,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/

你可能感兴趣的:(matlab实现谱聚类)