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.
odpovede:
3 pre odpoveď č. 1Pred 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.")
Alebo všeobecnejšie: použite vhodné jadro na k-klastrovanie klastrov alebo použite iný algoritmus.