필터 지우기
필터 지우기

K-means Clustering Result Always Changes

조회 수: 32 (최근 30일)
Alvi Syahrin
Alvi Syahrin 2013년 5월 4일
댓글: Walter Roberson 2021년 11월 26일
I'm working on k-means in MATLAB. Here are my codes:
load cobat.txt
k=input('Enter the number of cluster: ');
if k<8
[cidx ctrs]=kmeans(cobat, k, 'dist', 'sqEuclidean');
Z = [cobat cidx]
else
h=msgbox('Must be less than eight');
end
"cobat" is the file of mine and here it looks:
65 80 55
45 75 78
36 67 66
65 78 88
79 80 72
77 85 65
76 77 79
65 67 88
85 76 88
56 76 65
My problem is everytime I run the code, it always shows different result, different cluster. How can I keep the clustering result always the same?

채택된 답변

Walter Roberson
Walter Roberson 2013년 5월 5일
%generate some initial cluster centers according to some deterministic algorithm
%in this case, I construct a space-diagonal equally spaced, but choose your
%own algorithm
minc = min(cobat, 1);
maxc = max(cobat, 1);
nsamp = size(cobat,1);
initialcenters = repmat(minc, nsamp, 1) + bsxfun(@times, (0:nsamp-1).', (maxc - minc) ./ (nsamp-1));
%Once you have constructed the initial centers, cluster using those centers
[cidx ctrs] = kmeans(cobat, k, 'dist', 'sqEuclidean', 'start', initialcenters);
  댓글 수: 6
esmat abdallah
esmat abdallah 2021년 11월 26일
initialcenters = repmat(minc, nsamp, 1) + bsxfun(@times, (0:nsamp-1).', (maxc - minc) ./ (nsamp-1));
please, matlab out an error on this line : "Error using +
Matrix dimensions must agree."
what can i do ??
Walter Roberson
Walter Roberson 2021년 11월 26일
%generate some initial cluster centers according to some deterministic algorithm
%in this case, I construct a space-diagonal equally spaced, but choose your
%own algorithm
minc = min(cobat, [], 1);
maxc = max(cobat, [], 1);
nsamp = size(cobat,1);
initialcenters = repmat(minc, nsamp, 1) + bsxfun(@times, (0:nsamp-1).', (maxc - minc) ./ (nsamp-1));
%Once you have constructed the initial centers, cluster using those centers
[cidx ctrs] = kmeans(cobat, k, 'dist', 'sqEuclidean', 'start', initialcenters);

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

추가 답변 (2개)

the cyclist
the cyclist 2013년 5월 4일
K-means clustering uses randomness as part of the algorithm Try setting the seed of the random number generator before you start. If you have a relatively new version of MATLAB, you can do this with the rng() command. Put
rng(1)
at the beginning of your code.
  댓글 수: 2
Alvi Syahrin
Alvi Syahrin 2013년 5월 4일
Thank you for the answer. I have MATLAB 7.11.0(R2010b), and when I tried that command, it's not working, getting an error for undefined function. Do you have any idea to solve this?
the cyclist
the cyclist 2013년 5월 4일
Type
>> doc randstream
to see how to do it in your version.

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


Pallavi Saha
Pallavi Saha 2017년 9월 14일
I am facing the same issue inconsistency in the output of fcm. Can anyone help me
  댓글 수: 3
Mehmet Volkan Ozdogan
Mehmet Volkan Ozdogan 2019년 3월 28일
Hi,
I have a question about rng(). If we use rng() command, K-means algortihm stil repeats until the results are getting convergenced to the best. Is that right?
Thank you
Walter Roberson
Walter Roberson 2019년 3월 29일
Yes.
rng(SomeParticularNumericSeed)
just ensures that it will always use the same random number sequence provided that no other random numbers are asked for between the rng() call and the kmeans call.

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

Community Treasure Hunt

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

Start Hunting!

Translated by