首先,我必须说我是matlab的新手(也是这个网站的新手...),所以请原谅我的无知。
我正在尝试编写一个在matlab中使用谱聚类将一组点分成两个簇的函数。
我的代码如下:
function Groups = TrySpectralClustering(data)
dist_mat = squareform(pdist(data));
W= zeros(length(data),length(data));
for i=1:length(data),
for j=(i+1):length(data),
W(i,j)=10^(-dist_mat(i,j));
W(j,i)=W(i,j);
end
end
D = zeros(length(data),length(data));
for i=1:length(W),
D(i,i)=sum(W(i,:));
end
L=D-W;
L=D^(-0.5)*L*D^(-0.5);
[ V E ] = eig(L);
disp ('V:');
disp (V);
如果我理解正确,使用第二个最小特征向量,应该能够将数据分成两个簇——如果第二个特征向量中的第i个成员是正数,则第i个数据点将位于一个簇中,否则它将位于另一个簇中。
然而,当我尝试以下操作时:
f=[1,1;0,0;1,0;0,1;100,100;100,101;101,101;101,100]
TrySpectralClustering(f)
我预计前四点会形成一个群集,后四个点会形成另一个群集。
然而,我收到的是:
V:
-0.0000 -0.5000 0.0000 -0.5777 0.0000 0.4078 -0.0000 0.5000
-0.0000 -0.5000 0.0000 0.5777 0.0000 -0.4078 -0.0000 0.5000
-0.0000 -0.5000 0.0000 0.4078 0.0000 0.5777 -0.0000 -0.5000
-0.0000 -0.5000 0.0000 -0.4078 0.0000 -0.5777 -0.0000 -0.5000
-0.5000 -0.0000 -0.0000 -0.0000 -0.7071 -0.0000 0.5000 -0.0000
-0.5000 -0.0000 0.7071 0.0000 -0.0000 -0.0000 -0.5000 -0.0000
-0.5000 0.0000 -0.0000 0.0000 0.7071 0.0000 0.5000 0.0000
-0.5000 0 -0.7071 0 0 0 -0.5000 0
获取第二个特征向量
-0.0000 -0.5000 0.0000 0.5777 0.0000 -0.4078 -0.0000 0.5000
我发现一个簇包括点1,0;0,1;100,100;101,100,另一个簇由点1,1;0,0;100,101;101,101组成。
我想知道我做错了什么。
注意:我正在作为一个家庭作业项目而处理以上内容。
提前致谢!