Ist es wichtig, Daten vor dem Clustering zu skalieren?

44

Ich habe dieses Tutorial gefunden , das vorschlägt, dass Sie die Skalierungsfunktion für Features vor dem Clustering ausführen sollten (ich glaube, dass sie Daten in Z-Scores konvertiert).

Ich frage mich, ob das notwendig ist. Ich frage hauptsächlich, weil es einen schönen Ellbogenpunkt gibt, wenn ich die Daten nicht skaliere, aber er verschwindet, wenn er skaliert wird. :)

Jeremy
quelle

Antworten:

59

Die Frage ist, was ein gutes Maß für die Entfernung zwischen den Fällen darstellt.

Wenn Sie zwei Merkmale haben, eines, bei dem die Unterschiede zwischen den Fällen groß und das andere klein sind, sind Sie bereit, das erstere als fast einzigen Fernfahrer zu haben?

Wenn Sie beispielsweise Menschen nach ihrem Gewicht in Kilogramm und ihrer Höhe in Metern gruppieren, ist ein Unterschied von 1 kg genauso bedeutend wie ein Höhenunterschied von 1 m? Ist es wichtig, dass Sie unterschiedliche Häufungen von Gewichten in Kilogramm und Höhen in Zentimetern erhalten? Wenn Ihre Antworten "Nein" und "Ja" lauten, sollten Sie wahrscheinlich skalieren.

Wenn Sie dagegen kanadische Städte nach Entfernung Ost / West und Entfernung Nord / Süd gruppieren, sind Sie möglicherweise froh, wenn Sie nur nicht skalierte Entfernungen in Kilometern oder Meilen verwenden, obwohl es in der Regel viel größere Unterschiede zwischen Ost und West gibt (obwohl Sie möglicherweise Längen- und Breitengrade für die Erdkrümmung anpassen möchten).

Henry
quelle
33

Andere Antworten sind korrekt, aber es kann hilfreich sein, sich anhand eines Beispiels einen intuitiven Überblick über das Problem zu verschaffen. Unten generiere ich ein Dataset mit zwei klaren Clustern, aber die nicht gruppierte Dimension ist viel größer als die gruppierte Dimension (beachten Sie die unterschiedlichen Maßstäbe auf den Achsen). Das Clustering für die nicht normalisierten Daten schlägt fehl. Clustering auf den normalisierten Daten funktioniert sehr gut.

Dasselbe gilt für Daten, die in beiden Dimensionen geclustert werden, aber die Normalisierung würde weniger helfen. In diesem Fall kann es hilfreich sein, eine PCA zu erstellen und dann zu normalisieren. Dies ist jedoch nur hilfreich, wenn die Cluster linear trennbar sind und sich in den PCA-Dimensionen nicht überlappen. (Dieses Beispiel funktioniert wegen der geringen Clusteranzahl nur so deutlich)

Synthetische Clustered-Daten mit k-Mitteln für Clustering in der normalisierten und nicht normalisierten Version

import numpy as np
import seaborn
import matplotlib.pyplot as plt
from sklearn.cluster import KMeans

rnorm = np.random.randn

x = rnorm(1000) * 10  
y = np.concatenate([rnorm(500), rnorm(500) + 5])

fig, axes = plt.subplots(3, 1)

axes[0].scatter(x, y)
axes[0].set_title('Data (note different axes scales)')

km = KMeans(2)

clusters = km.fit_predict(np.array([x, y]).T)

axes[1].scatter(x, y, c=clusters, cmap='bwr')
axes[1].set_title('non-normalised K-means')

clusters = km.fit_predict(np.array([x / 10, y]).T)

axes[2].scatter(x, y, c=clusters, cmap='bwr')
axes[2].set_title('Normalised K-means')
naught101
quelle
17

Das hängt von Ihren Daten ab .

Wenn Sie Attribute mit einer genau definierten Bedeutung haben. Angenommen, Breite und Länge, dann sollten Sie Ihre Daten nicht skalieren, da dies zu Verzerrungen führt. (K-means könnte auch eine schlechte Wahl sein - du brauchst etwas, das natürlich mit lat / lon umgehen kann)

Wenn Sie gemischte numerische Daten haben, bei denen jedes Attribut etwas völlig anderes ist (z. B. Schuhgröße und -gewicht) und unterschiedliche Einheiten zugeordnet sind (lb, Tonnen, m, kg ...), sind diese Werte ohnehin nicht wirklich vergleichbar. Die z-Standardisierung ist eine bewährte Methode, um ihnen das gleiche Gewicht zu verleihen.

Wenn Sie Binärwerte, diskrete Attribute oder kategoriale Attribute haben, halten Sie sich von k-means fern. K-Means Bedürfnisse berechnen Mittel , und der Mittelwert ist auf dieser Art von Daten nicht sinnvoll.

Anony-Mousse
quelle
5

Wie in diesem Artikel erläutert , minimiert die k-Einrichtung die Fehlerfunktion unter Verwendung des Newton-Algorithmus, dh eines gradientenbasierten Optimierungsalgorithmus. Das Normalisieren der Daten verbessert die Konvergenz solcher Algorithmen. Sehen Sie hier einige Details über sie.

Die Idee ist, dass, wenn verschiedene Komponenten von Daten (Features) unterschiedliche Maßstäbe haben, Ableitungen dazu neigen, sich in Richtungen mit höherer Varianz auszurichten, was zu einer schlechteren / langsameren Konvergenz führt.

jpmuc
quelle
4

Standardisierung ist ein wichtiger Schritt der Datenvorverarbeitung.

Es kontrolliert die Variabilität des Datensatzes, konvertiert Daten in einen bestimmten Bereich unter Verwendung einer linearen Transformation, die Cluster von guter Qualität erzeugt und die Genauigkeit von Cluster-Algorithmen verbessert. Schauen Sie sich den Link unten an, um die Auswirkungen auf die k-Mittelwert-Analyse zu sehen.

https://pdfs.semanticscholar.org/1d35/2dd5f030589ecfe8910ab1cc0dd320bf600d.pdf

gui jun
quelle