Можете да използвате K-средства и всъщност внедряването е толкова лесно:
- Изберете броя на клъстерите, които искате
- Изберете
k
точки на случаен принцип (можете да повторите това, за да избегнете локалния оптимум)
- Намерете разстоянието между точките до тези
k
центрове
- Задайте точките на най-близкия център
- За всеки набор от точки изчислете средната стойност
- Ако средната стойност се променя, преместете центъра на клъстерите към новите средни стойности и отидете на 3
- Иначе край
Или можете да използвате matlab, за да направите това вместо вас:
k = 2;
rng('default') % For reproducibility
X = [randn(100,1)+ones(100,1);...
randn(100,1)-ones(100,1)];
opts = statset('Display','final');
[idx,ctrs] = kmeans(X,k,'Distance','city','Replicates',5,'Options',opts);
plot(X(idx==1,1),X(idx==1,1),'r.','MarkerSize',12)
hold on
plot(X(idx==2,1),X(idx==2,1),'b.','MarkerSize',12)
plot(ctrs(:,1),ctrs(:,1),'kx','MarkerSize',12,'LineWidth',2)
plot(ctrs(:,1),ctrs(:,1),'ko','MarkerSize',12,'LineWidth',2)
legend('Cluster 1','Cluster 2','Centroids','Location','NW')
hold off
Поставих резултата в диагонал, за да го покажа по-добре, но реалните данни са 1D:
![въведете описание на изображението тук](https://i.stack.imgur.com/MaNcq.png)
person
NKN
schedule
08.05.2014