Математика: Това k-средно групиране ли е?

въведете описание на изображението тук

Здравейте! Имам няколко точки на една линия. Тези точки нямат измерение Y, а само измерение X. Поставих ги само в измерение Y, защото исках да мога да поставя множество точки на едно и също място.

Бих искал да намеря n центроида (петна с най-голяма плътност).

Поставих например центроиди (=зелени линии), за да покажа какво имам предвид. Тези примерни центроиди не бяха изчислени, аз само ги поставих, предполагайки къде ще бъдат.

Преди да се потопя в математиката, бих искал да знам дали това може да бъде решено с k-средно групиране или отивам в грешната посока.

Благодаря ти.


person tmighty    schedule 17.10.2013    source източник
comment
IMO просто отивате на грешния уеб сайт! :) Опитайте с math.stackexchange.com   -  person Adriano Repetti    schedule 17.10.2013
comment
изображението не работи (дава червен кръст), но с едноизмерен набор от данни предполагам, че можете да направите клъстери и след това да начертаете точките на клъстер (т.е. клъстер като оста x и точки като оста Y с може би a линия на оста x за описание на центроидите?) вижте също: stackoverflow.com/questions/7869609/   -  person Carst    schedule 17.10.2013
comment
@Adriano Моля да не съм съгласен: stats.stackexchange.com   -  person Has QUIT--Anony-Mousse    schedule 17.10.2013
comment
@Anony-Mousse прав си!   -  person Adriano Repetti    schedule 17.10.2013


Отговори (2)


K-means е доста чувствителен към шум, а вие изглежда имате много шум. Но да, може да работи до известна степен. Плюс това, той не експлоатира, че вашите данни са само едноизмерни.

Въпреки това ми звучи така, сякаш искате да направите някакво много примитивно търсене на режим. В 1D най-подходящият подход за вас е Оценка на плътността на ядрото и след това изберете локалните максимуми на плътност .

„Клъстерният анализ“ със сигурност звучи много по-фантастично, но въпреки това класическата статистика „KDE“ вероятно ще даде много по-добри резултати. По-специално, не е нужно да коригирате "k" предварително и ще бъде много по-стабилно спрямо. шум.

person Has QUIT--Anony-Mousse    schedule 17.10.2013

Можете да използвате K-средства и всъщност внедряването е толкова лесно:

  1. Изберете броя на клъстерите, които искате
  2. Изберете k точки на случаен принцип (можете да повторите това, за да избегнете локалния оптимум)
  3. Намерете разстоянието между точките до тези k центрове
  4. Задайте точките на най-близкия център
  5. За всеки набор от точки изчислете средната стойност
  6. Ако средната стойност се променя, преместете центъра на клъстерите към новите средни стойности и отидете на 3
  7. Иначе край

Или можете да използвате 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:

въведете описание на изображението тук

person NKN    schedule 08.05.2014