首先,我必须说我是 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 组成
我想知道我做错了什么。
注意:作为家庭作业项目的一部分,我正在处理上述内容。
提前致谢!