euclidean distance between data matrix and centroids

조회 수: 2 (최근 30일)
muhammad ismat
muhammad ismat 2018년 9월 23일
댓글: muhammad ismat 2018년 9월 24일
If i have data matrix (A) 10 × 10 and i calculated the euclidean distance between the matrix A and centroids (tmp1) using k means based on particle swarm optimization. I used particle swarm to choose the optimal centroids then calculate the distance between data matrix and centroids using k means. But when i put the number of cluster k=2 and run the previouse code i obtained on many values to variable tmp1 but i want to 10 ×2 matrix
%Kmeans Cluster Algorithm Based on Particle Optimization Algorithm
clc;clear all;
format long;
tic
sam=load('A.txt');
N=10;
c1=1.2;c2=1.2;
wmax=0.9;wmin=0.4;
M=200;
K=2;
[S D]=size(sam);%s=row
v=rand(N,K*D);
for i=1:N
clmat(i,:)=randperm(S);
end
clmat(clmat>K)=fix(rand*K+1);
fitt=inf*ones(1,N);
fg=inf;
fljg=clmat(1,:);
x=zeros(N,K*D);
pg=x(1,:);
cen=zeros(K,D);
fitt2=fitt;
for t=1:M
for i=1:N
ww = zeros(S,K);
for ii = 1:S
ww(ii,clmat(i,ii)) = 1;
end
ccc=[];tmp=0;
for j = 1:K
sumcs = sum(ww(:,j)*ones(1,D).*sam);
countcs = sum(ww(:,j));
if countcs==0
cen(j,:) =zeros(1,D);
else
cen(j,:) = sumcs/countcs;
end
ccc=[ccc,cen(j,:)];
aa=find(ww(:,j)==1);
if length(aa)~=0
for k=1:length(aa)
tmp=tmp+(sum((sam(aa(k),:)-cen(j,:)).^2));
end
end
end
x(i,:)=ccc;
fitt2(i) = tmp; %Fitness value
end
//
for i=1:N
if fitt2(i)<fitt(i)
fitt(i)=fitt2(i);
y(i,:)=x(i,:);
if fitt2(i)<fg
pg=x(i,:);
fg=fitt2(i);
fljg=clmat(i,:);
end
end
end
bfit(t)=fg;
w = wmax - t*(wmax-wmin)/M;
for i=1:N
v(i,:)=w*v(i,:)+c1*rand(1,K*D).*(y(i,:)-x(i,:))+c2*rand(1,K*D).*(pg-x(i,:));
x(i,:)=x(i,:)+v(i,:);
for k=1:K
cen(k,:)=x((k-1)*D+1:k*D);
end
for j=1:S
tmp1=zeros(1,K);
for k=1:K
tmp1(k)=sum((sam(i,:)-cen(k,:)).^2);%dist
end
[tmp2 clmat(i,j)]=min(tmp1);
end
end
end
  댓글 수: 2
Jan
Jan 2018년 9월 24일
This code is free of comments. Therefore it is nearly unusable and hard to understand or to maintain. Even using a proper indentation would improve the readability (Ctrl-A Ctrl-I).
The clear all is a useless killer: Why removing all loaded function from the memory only to waste time with reloading them from the slow disk? Prefer to use functions to keep your workspace clean.
We cannot run your function due to the missing input files. The description of the problem is not clear yet also: " i obtained on many values to variable tmp1 but i want to 10 ×2 matrix" Can you elaborate this?
muhammad ismat
muhammad ismat 2018년 9월 24일
The input matrix A=
0 1 1 0 1 1 0 1 0 1
1 0 0 1 0 0 0 0 0 0
1 0 0 1 0 0 0 0 0 0
0 1 1 0 0 0 0 0 1 0
1 0 0 0 0 0 1 0 0 0
1 0 0 0 0 0 1 0 0 0
0 0 0 0 1 1 0 0 0 1
1 0 0 0 0 0 0 0 1 0
0 0 0 1 0 0 0 1 0 0
1 0 0 0 0 0 1 0 0 0
At line tmp1(k)=sum((sam(i,:)-cen(k,:)).^2) The variable tmp1 must have a matrix 10× 2,but when excuted, this variable takes many values.

댓글을 달려면 로그인하십시오.

답변 (0개)

카테고리

Help CenterFile Exchange에서 Statistics and Machine Learning Toolbox에 대해 자세히 알아보기

태그

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by