%Idea for Hierarchical Clustering
clc;
clear all;
close all;
htree=[];
division=3;
division=division+1;
x_s=iris_dataset';
%------------------- load data
% load spectra
% x_s=NIR;
%-------------------
% load hald
% x_s=hald;
%-------------------
% load fisheriris
% x_sig=meas;
%-------------------
% load ionosphere
% x_s=X';
%-------------------
% load morse
% x_s=Y0;
%-------------------
% load stockreturns
% x_sig=stocks;
x_s=x_s(:,:);
count_clust=size(x_s,1);
dend_array=1:size(x_s,1);
%normalise brings each parameter of dataset in range of (0,1)
normalise=[];
for i=1:size(x_s,2)
x_main_s(:,i)=x_s(:,i)./max(x_s(:,i));
x_main=x_s(:,i)- x_main_s(:,i);
end
len=size(x_main_s,1);
clus_count=3;
x_main=x_main_s(1:len,:);
position=zeros(1,len);
N=1:len;
x_main=[N' x_main];
x=x_main;
dataset_len=size(x);
mat=[];
%matrix formation
for i=1:dataset_len(1,1)+1
for j=1:dataset_len(1,1)+1
C=0;
if i==1 && j==1
mat(i,j)=0;
elseif i==1
mat(i,j)=x(j-1,1);
elseif j==1
mat(i,j)=x(i-1,1);
else
for b=1+1:dataset_len(1,2)
C=C+(x(i-1,b)-x(j-1,b))*(x(i-1,b)-x(j-1,b));
end
mat(i,j)=sqrt(C);
end
end
end
start=mat;
z=[];
%clusterig the nearest elements in each loop
for i=dataset_len(1,1):-1:division
[x,mat,z,cr_values,small_index,p,count_clust,htree,dend_array]=cluster(x,mat,z,count_clust,htree,dend_array);
end
[htree]=plotd(x,mat,z,count_clust,htree,dend_array);
H = dendrogram(htree,0);
set(H,'LineWidth',1)
title('Dendogram');
check=1;
%using the returned list to give elements a cluster identity
while check==1
check=0;
for i=1:size(z,1)
if(position(z(i,1))==0 && position(z(i,2))==0)
position(z(i,2))=clus_count;
position(z(i,1))=clus_count;
clus_count=clus_count+1;
elseif (position(z(i,1))==0 || position(z(i,2))==0 )
position(z(i,2))=max(position(z(i,1)),position(z(i,2)));
position(z(i,1))=max(position(z(i,1)),position(z(i,2)));
elseif (position(z(i,1))>=position(z(i,2)) )
position(z(i,1))=position(z(i,2));
else
position(z(i,2))=position(z(i,1));
check=1;
end
end
end
position=[N ;position]';
%sorting cluster identity
final_pos=sortrows(position,2);
change=final_pos(1,2);
start_end=[];
count=1;
start_end(count,1)=1;
last=0;
%calculating start and end of each cluster
for i=1:size(final_pos,1)
if(final_pos(i,2)~=change)
start_end(count,2)=i-1;
change=final_pos(i,2);
count=count+1;
start_end(count,1)=i;
end
end
start_end(count,2)=size(final_pos,1);
grpa=([final_pos(start_end(1,1):start_end(1,2),1)]');
grpb=([final_pos(start_end(2,1):start_end(2,2),1)]');
grpc=([final_pos(start_end(3,1):start_end(3,2),1)]');
count_cluster=[length(grpa),length(grpb),length(grpc)];
color=['b' 'r' 'g' 'y' 'k'];
symbol=['*'];
x=1;y=2;z=3;
figure;
scatter3(x_s(grpa,x),x_s(grpa,y),x_s(grpa,z),symbol(1),color(1));hold on;
scatter3(x_s(grpb,x),x_s(grpb,y),x_s(grpb,z),symbol(1),color(2));hold on;
scatter3(x_s(grpc,x),x_s(grpc,y),x_s(grpc,z),symbol(1),color(3));hold on;
title('Reduced set of prototype ' );
xlabel('Featuer x');ylabel('Featuer y');
grid on
x=2;y=3;z=4;
figure;
scatter3(x_s(grpa,x),x_s(grpa,y),x_s(grpa,z),symbol(1),color(1));hold on;
scatter3(x_s(grpb,x),x_s(grpb,y),x_s(grpb,z),symbol(1),color(2));hold on;
scatter3(x_s(grpc,x),x_s(grpc,y),x_s(grpc,z),symbol(1),color(3));hold on;
title('Reduced set of prototype ' );
xlabel('Featuer x');ylabel('Featuer y');
grid on
x=3;y=4;z=1;
figure;
scatter3(x_s(grpa,x),x_s(grpa,y),x_s(grpa,z),symbol(1),color(1));hold on;
scatter3(x_s(grpb,x),x_s(grpb,y),x_s(grpb,z),symbol(1),color(2));hold on;
scatter3(x_s(grpc,x),x_s(grpc,y),x_s(grpc,z),symbol(1),color(3));hold on;
title('Reduced set of prototype ' );
xlabel('Featuer x');ylabel('Featuer y');
grid on
x=4;y=1;z=2;
figure;
scatter3(x_s(grpa,x),x_s(grpa,y),x_s(grpa,z),symbol(1),color(1));hold on;
scatter3(x_s(grpb,x),x_s(grpb,y),x_s(grpb,z),symbol(1),color(2));hold on;
scatter3(x_s(grpc,x),x_s(grpc,y),x_s(grpc,z),symbol(1),color(3));hold on;
title('Reduced set of prototype ' );
xlabel('Featuer x');ylabel('Featuer y');
grid on