/ / Matlab kmeans clustering pre nelineárne oddeliteľné dáta - matlab, k-means

Matlab kmeans clustering pre nelineárne oddeliteľné dáta - matlab, k-prostriedky

Ja som v mojej nelineárne oddeliteľné dáta. Chcem to zoskupiť pomocou implementácie K-prostriedkov v matlabe. Chcem dostať klastrové štítky pre každý dátový bod, aby som ich použil pre iný klasifikačný problém.

Problém je k-znamená, že nedáva výsledky podľa očakávania. I "m pripojenie klastra sprisahania som získal.

Očakával som, že k-znamená dať klastrom ako sústredné kruhy, ako dáta vyzerajú, ale výstup bol oblúk. Nechápem, prečo sa to deje.

Môžete mi navrhnúť akúkoľvek inú metódu klastrovania na dosiahnutie môjho cieľa. Môj klastrový graf

odpovede:

3 pre odpoveď č. 1

Pred použitím algoritmu by ste sa mali pokúsiť rozumieť to: čo je cieľom algoritmu a ako ho dosahuje. Pre k-znamená, Wikipedia nám povie nasledovné:

K-klastrovanie klastrov sa zameriava na rozdelenie n pozorovaní do klastrov, v ktorých každé pozorovanie patrí klastru s najbližším priemerom

Tri sústredné kruhy by mali presne rovnaký priemer, takže k-prostriedky nie sú vhodné na ich oddelenie. Výsledkom je naozaj to, čo by ste mali od k-prostriedkov očakávať.

Teraz, ak viete, že vaše klastre budú vždy sú sústredné kruhy, môžete jednoducho previesť svoje kartézske súradnice (x-y) na polárne súradnice a použiť len polomer rho pre klastrovanie - ako viete, že uhol theta nezáleží na tom:

% Create random data
[x1,y1] = pol2cart(2*pi*rand(1000,1),rand(1000,1));
[x2,y2] = pol2cart(2*pi*rand(1000,1),rand(1000,1)+2);
[x3,y3] = pol2cart(2*pi*rand(1000,1),rand(1000,1)+4);
X = [x1,y1; x2,y2; x3,y3];

% Transform to polar
[theta,rho] = cart2pol(X(:,1),X(:,2));

% k-means clustering
idx = kmeans(rho,3);

% Plot results
hold on
plot(X(idx==1,1), X(idx==1,2), "r.")
plot(X(idx==2,1), X(idx==2,2), "g.")
plot(X(idx==3,1), X(idx==3,2), "b.")

výsledok

Alebo všeobecnejšie: použite vhodné jadro na k-klastrovanie klastrov alebo použite iný algoritmus.