2016-05-19 2 views
2

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

enter image description here

Если я бегу к-значит алгоритм на нем, я получаю следующий раздел:

enter image description here

Этот выглядит хорошо. Теперь, я масштабироваться столбцы с StandardScaler и я получаю следующий набор данных:

enter image description here

Но если я бегу к-значит алгоритм на нем, я получаю следующий раздел:

enter image description here

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

Вот код, чтобы показать раздел:

data = pd.read_csv("dataset_scaled.csv", sep = ",") 
k_means = KMeans(n_clusters = 3) 
k_means.fit(data) 
partition = k_means.labels_ + 1 
colors = ["red", "green", "blue"] 
ax = None 
for i in range(1, 4): 
    ax = d.iloc[partition == i].plot.scatter(x = 'a', y = 'b', color = colors[i - 1], legend = False, ax = ax) 
+0

Поскольку k-средство - это эвристика, работающая случайным образом, это поможет, если вы сделаете несколько оценок по обоим и сравните их. Возможно, просто используйте больше start-config для k-средств (по умолчанию n_init = 10). И было бы неплохо увидеть некоторый код, чтобы исключить ошибки. Но обычно предварительная обработка должна помочь, как вы упомянули. Но в зависимости от генерации тестовых данных этот шаг нормализации не требуется, если отклонения не такие разные (поскольку средства тоже выглядят одинаково, а для b) – sascha

+0

По вашему запросу я добавил код, используемый для отображения раздела. Масштабирование можно проверить графически. О запуске алгоритма несколько раз, кажется, что на хорошо разделенных наборах данных (например, этот) стандартный алгоритм k-средних всегда сходится к одному и тому же решению. И это то, что я замечаю в этом наборе данных. –

ответ

1

Поскольку ваша по-кластер дисперсии все в X, и в-кластера дисперсия в основном в Y, используя технику стандартизации приводит к снижению качества. Так что не предполагайте, что «лучшая практика» будет всегда быть лучшей.

Это пример игрушки, и реальные данные не будут выглядеть. Скорее всего, стандартизация делает дает более значимые результаты.

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

+0

Спасибо за объяснение. –