É importante dimensionar os dados antes do armazenamento em cluster?

44

Encontrei este tutorial , que sugere que você execute a função de escala nos recursos antes de agrupar (acredito que converte dados em z-scores).

Eu estou querendo saber se isso é necessário. Estou perguntando principalmente porque há um bom ponto de cotovelo quando não dimensiono os dados, mas ele desaparece quando é dimensionado. :)

Jeremy
fonte

Respostas:

59

A questão é o que representa uma boa medida da distância entre os casos.

Se você tem dois recursos, um em que as diferenças entre os casos são grandes e o outro pequeno, você está preparado para ter o primeiro como quase o único condutor de distância?

Por exemplo, se você agrupar as pessoas em seus pesos em quilogramas e alturas em metros, uma diferença de 1 kg é tão significativa quanto uma diferença de 1 m de altura? Importa que você obtenha diferentes agrupamentos de pesos em quilogramas e alturas em centímetros? Se suas respostas forem "não" e "sim", respectivamente, você provavelmente deverá escalar.

Por outro lado, se você estivesse agrupando cidades canadenses com base nas distâncias leste / oeste e distâncias norte / sul, embora normalmente haja diferenças muito maiores leste / oeste, você poderá usar as distâncias não dimensionadas em quilômetros ou milhas (embora você queira ajustar graus de longitude e latitude para a curvatura da Terra).

Henry
fonte
33

Outras respostas estão corretas, mas pode ser útil obter uma compreensão intuitiva do problema, vendo um exemplo. Abaixo, eu gero um conjunto de dados que possui dois clusters claros, mas a dimensão não agrupada é muito maior que a dimensão agrupada (observe as diferentes escalas nos eixos). O armazenamento em cluster nos dados não normalizados falha. O armazenamento em cluster nos dados normalizados funciona muito bem.

O mesmo se aplica aos dados agrupados em ambas as dimensões, mas a normalização ajudaria menos. Nesse caso, pode ser útil fazer um PCA e normalizar, mas isso só ajudaria se os clusters forem linearmente separáveis ​​e não se sobreporem nas dimensões do PCA. (Este exemplo funciona apenas de forma tão clara devido à baixa contagem de clusters)

dados em cluster sintéticos, com k-means em cluster nas versões normalizada e não normalizada

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
fonte
17

Ele depende de seus dados .

Se você possui atributos com um significado bem definido. Digamos, latitude e longitude, então você não deve escalar seus dados, porque isso causará distorção. (K-significa também pode ser uma má escolha - você precisa de algo que possa lidar com lat / lon naturalmente)

Se você misturou dados numéricos, em que cada atributo é algo completamente diferente (por exemplo, tamanho e peso do sapato), possui diferentes unidades anexadas (lb, toneladas, m, kg ...), então esses valores não são realmente comparáveis; z padronizá-los é uma prática recomendada para dar peso igual a eles.

Se você possui valores binários, atributos discretos ou atributos categoriais, fique longe de k-means. O K-means precisa calcular as médias , e o valor médio não é significativo nesse tipo de dados.

Anony-Mousse
fonte
5

Como explicado neste artigo , o k-means minimiza a função de erro usando o algoritmo de Newton, ou seja, um algoritmo de otimização baseado em gradiente. A normalização dos dados melhora a convergência de tais algoritmos. Veja aqui alguns detalhes.

A idéia é que, se diferentes componentes de dados (recursos) tiverem escalas diferentes, as derivadas tenderão a se alinhar ao longo das direções com maior variação, o que leva a uma convergência mais lenta / mais lenta.

jpmuc
fonte
4

A padronização é uma etapa importante do pré-processamento de dados.

controla a variabilidade do conjunto de dados, converte dados em um intervalo específico usando uma transformação linear que gera clusters de boa qualidade e melhora a precisão dos algoritmos de clustering, confira o link abaixo para ver seus efeitos na análise de médias k.

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

gui jun
fonte