2012-12-21 15 views
5

Ho un numero di set di dati più piccoli, contenente 10 coordinate XY ciascuno. Sto usando Matlab (R2012a) e k-mezzo per ottenere un centroide. In alcuni dei cluster (vedi figura sotto) posso vedere alcuni punti estremi, perché i miei set di dati sono piccoli come sono, un outliner distrugge il valore del mio centroide. C'è un modo semplice per escludere questi punti? Supponiamo che Matlab abbia una funzione di "esclusione di valori anomali" ma non riesco a vederlo da nessuna parte nel menu degli strumenti. Grazie per il tuo aiuto! (E sì, io sono nuovo di questo :-)Rimozione di valori anomali da un cluster k-medio

enter image description here

+2

Penso che la parola che stai cercando sia Outlier (http://en.wikipedia.org/wiki/Outlier), non Outliner. Forse questo ti aiuterà a trovare una soluzione più facilmente. – Medo42

+1

Sarebbe anche una buona idea menzionare che software stai usando e taggare di conseguenza. – kotekzot

+0

scusate, ho scritto accidentalmente outliners (ho fatto un bel po 'di ricerche ma sono un principiante in matlab ed i codici che ho incontrato finora sono piuttosto pesanti.) Guardate ORC e ​​ODIN, ma secondo la funzione di aiuto di MATLAB lì dovrebbe essere qualcosa chiamato 'exclude outliers' nella barra degli strumenti, ma non riesco a trovarlo, sto usando R2012a. – carro

risposta

1

k-means può essere abbastanza sensibile ai valori anomali nel set di dati. Il motivo è semplicemente che k-means cerca di ottimizzare la somma di quadrati . E quindi una grande deviazione (come quella di un outlier) ottiene molto peso.

Se si dispone di un set di dati rumoroso con valori anomali, è preferibile utilizzare un algoritmo con gestione del rumore specializzata, ad esempio DBSCAN (Density-Based Spatial Clustering of Applications with Noise). Nota la "N" nell'acronimo: Rumore. Al contrario di ad es. k-means, ma anche molti altri algoritmi di clustering, DBSCAN può decidere di non oggetti cluster che si trovano in regioni a bassa densità.

0

siete alla ricerca di qualcosa come "la rimozione valori anomali" e come altri hanno linkato sopra, "non c'è una rigorosa definizione matematica di ciò che costituisce un valore anomalo "- http://en.wikipedia.org/wiki/Outlier#Identifying_outliers.

Il rilevamento dei valori anomali è ancora più difficile quando si esegue il clustering senza supervisione poiché si sta tentando di apprendere cosa sono i cluster e quali sono i punti dati corrispondenti ai cluster "no".

Una definizione semplice consiste nel considerare tutti i punti di dati "lontani" da tutti gli altri punti di dati come valori anomali. Per esempio, si potrebbe considerare di rimuovere il punto con la massima distanza minima a qualsiasi altro punto:

x = randn(100,2); 
x(101,:) = [10 10]; %a clear outlier 
nSamples = size(x,1); 

pointToPointDistVec = pdist(x); 
pointToPointDist = squareform(pointToPointDistVec); 
pointToPointDist = pointToPointDist + diag(inf(nSamples,1)); %remove self-distances; set to inf 

smallestDist = min(pointToPointDist,[],2); 
[maxSmallestDist,outlierInd] = max(smallestDist); 

È possibile scorrere sopra un paio di volte per rimuovere in modo iterativo punti. Nota che questo non rimuoverà i valori anomali che hanno almeno un vicino vicino. Se leggi la pagina WIKI e vedi un algoritmo che potrebbe essere più utile, provalo e implementalo e chiedi di quell'approccio specifico.

Problemi correlati