首先,我必須說我是matlab(和本站...)的新手,所以請原諒我的無知。譜聚類
我想在matlab中編寫一個函數,它將使用Spectral Clustering將一組點分成兩個集羣。
我的代碼如下
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; 101100 和其他集羣是從點1,1; 0,0; 100,101; 101,101
我想知道我在做什麼錯。
注:我正在研究上述作爲家庭作業項目的一部分。
在此先感謝!