How to cluster a dataset having a vector of clustered indeces?

조회 수: 7 (최근 30일)
Madina Makhmutova
Madina Makhmutova 2019년 4월 11일
댓글: Adam Danz 2019년 4월 15일
Hello,
My question is very primitive, I'm trying to cluster my dataset using k-means and plot clastered data in heatmap.
I've tried to write the following primitive code but I don't understand why it is not working. Could you please help me figure out why my code is not working and what would be the shortest way to do this simple clustering?
Thank you!
n = 3; % specify the number of clusters that you want the dataset to be divided into
data = randi(100,10,9);
clust_idx = kmeans(data,n);
clustered = [];
for j = 1:n
for i = 1:length(clust_idx)
if clust_idx(i)==j, clustered = [clustered, (data(:,i))];
end
end
end
f = figure(1);
fh = heatmap((clustered)','XLabel','Time(min)','YLabel','Cell #','Colormap',jet);
  댓글 수: 2
Adam Danz
Adam Danz 2019년 4월 11일
1) What part of the code isn't working?
2) What does it mean that the code isn't working? Are you getting an error message (if yes, share the entire message)?
The first 3 lines of your code should workfine as long as you're working with decent data. What are the loops for?
Madina Makhmutova
Madina Makhmutova 2019년 4월 11일
Hello Adam,
Thank you for your responce.
I realized that this code is only working when the data table is symetric (10x10 like in the example above), however if the data table is not symmetric ex: randi(100, 10, 9) than I get an error 'index exceeds matrix dimentions' .
The loops are to make a new matrix of data that is clustered according to the k-means clustering. So when i use:
clust_idx = kmeans(data,n)
this line of code gives a vector of cluster indices. So what I have is the vector of clustered indeces and what I want is the clustered data table. Pretty simple task, but I don't know how to get it done.

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

채택된 답변

Adam Danz
Adam Danz 2019년 4월 11일
편집: Adam Danz 2019년 4월 15일
Your data is a matrix of size [10 x 9].
kmeans() identifies the cluster of each row of the matrix so its output will be a vector whose length is equal to the number of rows of your matrix (10 rows).
Your i-loop loops through each row (1:10). But your indexing your data by column: data(:,1). You only have 9 columns so on the last iteration, there's an error.
I think what you meant to write is:
clustered = [clustered; (data(i,:))];
% ^ ^ Note the restructuring.
Now your code works for the [10 x 9] inputs.
  댓글 수: 2
Madina Makhmutova
Madina Makhmutova 2019년 4월 15일
Thank you Adam,
Your explanation helped me to see my mistake, what I needed to do was to cluster along columns not the raws so just transposing the data for the initial clustering did the trick.
clust_idx = kmeans(data',n)
% ^ this little sign made the difference
Adam Danz
Adam Danz 2019년 4월 15일
Nice! Glad I could (indirectly) help.

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

추가 답변 (0개)

카테고리

Help CenterFile Exchange에서 Cluster Analysis and Anomaly Detection에 대해 자세히 알아보기

Community Treasure Hunt

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

Start Hunting!

Translated by