Sequential Clustering Algorithm (BSCA)
Show older comments
I am currently trying to apply Sequential Clustering Algorithm (BSCA) to wine data. And for some reason I am unable to generate any clusters.
Below is my code where the data has first been reduced via PCA. and than BSCA is applied.
Does anyone see anything wrong with the code ?
%Reading in Data
Data = dlmread('wine.csv');
%Extracting data only
X = Data(2:179, 2:14);
%Calculating Eigenvalues and Eigenvectors
[EIGVEC, EIGVAL] = eig(cov(X));
%Reducing the data to 2D
XT = [];
for i=1: length(X)
XT(i,1) = X(i,:) * EIGVEC(:,13);
XT(i,2) = X(i,:) * EIGVEC(:,12);
end
%Prompt for alpha
%prompt2 = 'What is the value for alpha? ';
%alpha = input(prompt2);
function res = BSAS(XT,alpha,q)
N = size(XT,1);
nFeatures = size(XT,2);
labels = zeros(1,N); % zero value indicates unclustered point
m=1;
labels(1)=1;
q=3;
alpha=0.2;
function [d_x_i_C_k, k] = closestcluster(i, labels, XT)
ulab = unique(labels);
if( ulab(1)==0 )
ulab = ulab(2:end);%removes zero value as points are clustered
end
assignclust = [];
for lab = ulab
indv = find(labels==lab);
rep = mean(XT(indv,:), 1)';
d = sqrt(( XT(i,:)' - rep )' * ( XT(i,:)' - rep ) );
assignclust = [assignclust, d];
end
[d_x_i_C_k,mind] = min(assignclust);
k = ulab(mind);%closest cluster
end
for i = 2:N
%find C_k : d(x_i,C_k) = min_{1 <= j <= m} d(x_i,C_j)
[d_x_i_C_k, k] = closestcluster(i, labels, XT );
if((d_x_i_C_k > alpha) & (m < q))
m = m+1;
end
labels(i)=m;
end
res=labels
end
Answers (0)
Categories
Find more on Cluster Analysis and Anomaly Detection in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!