Чи важливо масштабувати дані перед кластеризацією?


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')

17

Це залежить від ваших даних .

Якщо у вас є атрибути з чітко визначеним значенням. Скажімо, широту і довготу, тоді не слід масштабувати свої дані, оскільки це спричинить спотворення. (K-засоби теж можуть бути поганим вибором - вам потрібно щось, що може впоратися з lat / lon природним шляхом)

Якщо у вас змішані числові дані, де кожен атрибут є чимось зовсім іншим (скажімо, розміром та вагою взуття), прикріплені різні одиниці (фунт, тонни, м, кг ...), то ці значення в будь-якому випадку насправді не можна порівняти; z-стандартизація їх - найкраща практика, щоб надати їм однакову вагу.

Якщо у вас є бінарні значення, дискретні атрибути або атрибути категорії, тримайтеся подалі від k-засобів. K-засоби потребують обчислення засобів , а середнє значення не має сенсу для такого роду даних.


5

Як пояснено в цій роботі , k-засоби мінімізують функцію помилок за допомогою алгоритму Ньютона, тобто алгоритму оптимізації на основі градієнта. Нормалізація даних покращує збіжність таких алгоритмів. Ознайомтесь тут із деталями.

Ідея полягає в тому, що якщо різні компоненти даних (особливості) мають різну шкалу, то похідні мають тенденцію до узгодження за напрямками з більшою дисперсією, що призводить до гіршої / повільнішої конвергенції.


4

Стандартизація є важливим кроком попередньої обробки даних.

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

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

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.