Важно ли масштабировать данные перед кластеризацией?

44

Я нашел это руководство , в котором предлагается запускать функцию масштабирования функций перед кластеризацией (я считаю, что она преобразует данные в z-показатели).

Мне интересно, нужно ли это? Я спрашиваю в основном потому, что есть хорошая точка локтя, когда я не масштабирую данные, но она исчезает, когда она масштабируется. :)

Джереми
источник

Ответы:

59

Вопрос в том, что представляет собой хорошую меру расстояния между делами.

Если у вас есть две особенности: одна, где различия между делами велики, а другая мала, готовы ли вы, чтобы первая была чуть ли не единственной движущей силой расстояния?

Например, если вы сгруппировали людей по весу в килограммах и по высоте в метрах, будет ли разница в 1 кг столь же значимой, как разница в высоте в 1 м? Имеет ли значение, что вы получили бы различные кластеры по весам в килограммах и высотам в сантиметрах? Если ваши ответы «нет» и «да» соответственно, то вам, вероятно, следует масштабировать.

С другой стороны, если вы группировали канадские города на основе расстояний восток / запад и расстояний север / юг, то, хотя различия между востоком и западом, как правило, будут гораздо большими, вы можете быть счастливы просто использовать немасштабированные расстояния в километрах или милях. (хотя вы можете настроить градусы долготы и широты для искривления Земли).

Генри
источник
33

Другие ответы верны, но это может помочь получить интуитивное понимание проблемы, увидев пример. Ниже я создаю набор данных, который имеет два четких кластера, но некластеризованное измерение намного больше кластерного измерения (обратите внимание на различные масштабы на осях). Кластеризация ненормализованных данных не выполняется. Кластеризация по нормализованным данным работает очень хорошо.

То же самое относится к данным, кластеризованным в обоих измерениях, но нормализация поможет меньше. В этом случае это может помочь выполнить PCA, а затем нормализовать, но это поможет только в том случае, если кластеры линейно разделены и не перекрываются в измерениях PCA. (Этот пример работает так четко из-за низкого количества кластеров)

синтетические кластеризованные данные с кластеризацией k-средних как в нормализованной, так и в ненормализованной версиях

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
источник
17

Это зависит от ваших данных .

Если у вас есть атрибуты с четко определенным значением. Скажите, широта и долгота, тогда вы не должны масштабировать свои данные, потому что это вызовет искажение. (K-means тоже может быть плохим выбором - вам нужно что-то, что может обрабатывать широту / долготу естественным образом)

Если вы смешали числовые данные, где каждый атрибут является чем-то совершенно другим (скажем, размер обуви и вес), к нему прикреплены различные единицы измерения (фунты, тонны, м, кг ...), тогда эти значения в любом случае не будут сопоставимы; Z-стандартизация их - лучшая практика, чтобы придать им равный вес.

Если у вас есть двоичные значения, отдельные атрибуты или категориальные атрибуты, держитесь подальше от k-средних. K-означает, что нужно вычислить средства , а среднее значение не имеет значения для такого рода данных.

Anony-Мус
источник
5

Как объяснено в этой статье , k-средство минимизирует функцию ошибки, используя алгоритм Ньютона, то есть алгоритм оптимизации на основе градиента. Нормализация данных улучшает сходимость таких алгоритмов. Смотрите здесь для некоторых деталей об этом.

Идея состоит в том, что если разные компоненты данных (признаки) имеют разные масштабы, то производные имеют тенденцию выравниваться по направлениям с большей дисперсией, что приводит к худшей / более медленной конвергенции.

jpmuc
источник
4

Стандартизация является важным этапом предварительной обработки данных.

он контролирует изменчивость набора данных, он преобразует данные в определенный диапазон, используя линейное преобразование, которое генерирует кластеры хорошего качества и повышает точность алгоритмов кластеризации, просмотрите ссылку ниже, чтобы увидеть его влияние на анализ k-средних.

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

Гуй Джун
источник