Ich habe eine Anzahl kleinerer Datensätze, die jeweils 10 XY-Koordinaten enthalten. Ich verwende Matlab (R2012a) und k-means, um einen Schwerpunkt zu erhalten. In einigen der Cluster (siehe Abbildung unten) kann ich einige extreme Punkte sehen, da mein Datensatz so klein ist wie er ist, ein Outliner zerstört den Wert meines Schwerpunktes. Gibt es eine einfache Möglichkeit, diese Punkte auszuschließen? Angenommen, Matlab hat eine Funktion zum Ausschließen von Ausreißern, aber ich kann sie nirgends im Werkzeugmenü sehen. Vielen Dank für Ihre Hilfe! (Und ja, ich bin neu in diesem :-)Entfernen von Ausreißern aus einem K-Mean-Cluster
Antwort
k-means kann sehr empfindlich auf Ausreißer in Ihrem Datensatz reagieren. Der Grund ist einfach, dass k-means versucht, die Quadratsumme zu optimieren. Und so bekommt eine große Abweichung (zB eines Ausreißers) viel Gewicht.
Wenn Sie einen verrauschten Datensatz mit Ausreißern haben, ist es möglicherweise besser, einen Algorithmus zu verwenden, der über spezielle Rauschbehandlung verfügt, z. B. DBSCAN (Density-Based Spatial Clustering of Applications with Noise). Beachten Sie das "N" im Akronym: Noise. Im Gegensatz zu z.B. k-bedeutet, aber auch viele andere Clustering-Algorithmen, kann DBSCAN nicht Cluster-Objekte, die in Regionen mit niedriger Dichte sind.
Sie sind für so etwas wie „Ausreißerentfernung“ suchen und wie andere oben verknüpft haben, „es gibt keine strenge mathematische Definition dessen, was ein ausmacht Ausreißer "- http://en.wikipedia.org/wiki/Outlier#Identifying_outliers.
Die Erkennung von Ausreißern ist noch schwieriger, wenn Sie unüberwachtes Clustering durchführen, da Sie beide versuchen zu lernen, was Cluster sind und welche Datenpunkte "keinen" Clustern entsprechen.
Eine einfache Definition besteht darin, alle Datenpunkte, die von allen anderen Datenpunkten "weit" entfernt sind, als Ausreißer zu betrachten. Zum Beispiel, können Sie den Punkt mit dem maximalen kleinsten Abstand zu jedem anderen Punkt zu entfernen betrachten:
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);
Sie können die oben ein paar Mal wiederholen, um iterativ Punkte zu entfernen. Beachten Sie, dass dadurch keine Ausreißer entfernt werden, bei denen mindestens ein Nachbar in der Nähe ist. Wenn Sie die WIKI-Seite lesen und einen Algorithmus sehen, der hilfreicher sein könnte, versuchen Sie es zu implementieren und fragen Sie nach diesem spezifischen Ansatz.
Ich denke, das Wort, das Sie suchen, ist Auslocker (http://en.wikipedia.org/wiki/Outlier), nicht Outliner. Vielleicht hilft Ihnen das, eine Lösung leichter zu finden. – Medo42
Es wäre auch eine gute Idee zu erwähnen, welche Software Sie verwenden und entsprechend kennzeichnen. – kotekzot
Entschuldigung, ich habe Outliner versehentlich geschrieben (Ich habe ein gutes Stück gesucht, aber ich bin ein Anfänger in Matlab und die Codes, denen ich bisher begegnet bin, sind ziemlich schwer. Sah nach ORC und ODIN, aber nach Matlab helfen Funktion dort sollte etwas sein, das Ausreißer ausschließen in der Symbolleiste, aber ich finde es nicht, ich verwende R2012a. – carro