É necessário padronizar seus dados antes do armazenamento em cluster?

23

É necessário padronizar seus dados antes do cluster? No exemplo do scikit learnDBSCAN, aqui eles fazem isso na linha:

X = StandardScaler().fit_transform(X)

Mas não entendo por que é necessário. Afinal, o clustering não assume nenhuma distribuição específica de dados - é um método de aprendizado não supervisionado, portanto seu objetivo é explorar os dados.

Por que seria necessário transformar os dados?

Candic3
fonte
Obrigado pelas respostas detalhadas! Como acompanhamento de todas as suas respostas: Entendo que, se os recursos estiverem em escalas diferentes, isso poderá representar um problema. No entanto, se a métrica de distância for normalizada para a variação, isso alcançará o mesmo resultado que a escala padrão antes do armazenamento em cluster? ou seja, eu costumo usar uma distância euclidiana normalizada relacionada - isso também atenua os efeitos de escala?
precisa saber é o seguinte

Respostas:

19

A normalização nem sempre é necessária, mas raramente dói.

Alguns exemplos:

K-significa :

O agrupamento K-significa é "isotrópico" em todas as direções do espaço e, portanto, tende a produzir agrupamentos mais ou menos redondos (em vez de alongados). Nessa situação, deixar as variações desiguais equivale a colocar mais peso nas variáveis ​​com menor variação.

Exemplo no Matlab:

X = [randn(100,2)+ones(100,2);...
     randn(100,2)-ones(100,2)];

% Introduce denormalization
% X(:, 2) = X(:, 2) * 1000 + 500;

opts = statset('Display','final');

[idx,ctrs] = kmeans(X,2,...
                    'Distance','city',...
                    'Replicates',5,...
                    'Options',opts);

plot(X(idx==1,1),X(idx==1,2),'r.','MarkerSize',12)
hold on
plot(X(idx==2,1),X(idx==2,2),'b.','MarkerSize',12)
plot(ctrs(:,1),ctrs(:,2),'kx',...
     'MarkerSize',12,'LineWidth',2)
plot(ctrs(:,1),ctrs(:,2),'ko',...
     'MarkerSize',12,'LineWidth',2)
legend('Cluster 1','Cluster 2','Centroids',...
       'Location','NW')
title('K-means with normalization')

insira a descrição da imagem aqui

insira a descrição da imagem aqui

(FYI: Como posso detectar se meu conjunto de dados está em cluster ou não em cluster (por exemplo, formando um único cluster )

Armazenamento em cluster distribuído :

A análise comparativa mostra que os resultados do armazenamento em cluster distribuído dependem do tipo de procedimento de normalização.

Rede neural artificial (entradas) :

Se as variáveis ​​de entrada são combinadas linearmente, como em um MLP, raramente é estritamente necessário padronizar as entradas, pelo menos em teoria. O motivo é que qualquer redimensionamento de um vetor de entrada pode ser efetivamente desfeito, alterando os pesos e desvios correspondentes, deixando as mesmas saídas exatas que você tinha antes. No entanto, existem várias razões práticas pelas quais a padronização das entradas pode tornar o treinamento mais rápido e reduzir as chances de ficar preso nas ótimas localidades. Além disso, a redução de peso e a estimativa bayesiana podem ser feitas de maneira mais conveniente com entradas padronizadas.

Rede neural artificial (entradas / saídas)

Você deve fazer alguma dessas coisas nos seus dados? A resposta é: depende.

A padronização de variáveis ​​de entrada ou de destino tende a tornar o processo de treinamento melhor, melhorando a condição numérica (consulte ftp://ftp.sas.com/pub/neural/illcond/illcond.html ) do problema de otimização e garantindo que vários padrões valores envolvidos na inicialização e finalização são apropriados. A padronização de metas também pode afetar a função objetivo.

A padronização dos casos deve ser abordada com cautela, pois descarta informações. Se essa informação é irrelevante, a padronização de casos pode ser bastante útil. Se essa informação é importante, a padronização de casos pode ser desastrosa.


Curiosamente, alterar as unidades de medida pode até levar a uma estrutura de agrupamento muito diferente: Kaufman, Leonard e Peter J. Rousseeuw .. "Encontrar grupos em dados: uma introdução à análise de agrupamentos". (2005).

Em algumas aplicações, alterar as unidades de medida pode até levar a uma estrutura de cluster muito diferente. Por exemplo, a idade (em anos) e a altura (em centímetros) de quatro pessoas imaginárias são dadas na Tabela 3 e plotadas na Figura 3. Parece que {A, B) e {C, 0) são dois grupos bem separados . Por outro lado, quando a altura é expressa em pés, obtém-se a Tabela 4 e a Figura 4, onde os aglomerados óbvios são agora {A, C} e {B, D}. Essa partição é completamente diferente da primeira, porque cada sujeito recebeu outro companheiro. (A Figura 4 teria sido achatada ainda mais se a idade tivesse sido medida em dias.)

Para evitar essa dependência na escolha das unidades de medida, é possível padronizar os dados. Isso converte as medidas originais em variáveis ​​sem unidade.

insira a descrição da imagem aqui insira a descrição da imagem aqui

Kaufman et al. continua com algumas considerações interessantes (página 11):

Do ponto de vista filosófico, a padronização não resolve realmente o problema. De fato, a escolha das unidades de medida gera pesos relativos das variáveis. Expressar uma variável em unidades menores levará a um intervalo maior para essa variável, o que terá um grande efeito na estrutura resultante. Por outro lado, ao padronizar, tenta-se dar a todas as variáveis ​​um peso igual, na esperança de alcançar objetividade. Como tal, pode ser usado por um profissional que não possui conhecimento prévio. No entanto, pode muito bem ser que algumas variáveis ​​sejam intrinsecamente mais importantes que outras em uma aplicação específica, e então a atribuição de pesos deve ser baseada no conhecimento do assunto (ver, por exemplo, Abrahamowicz, 1985). Por outro lado, houve tentativas de criar técnicas de agrupamento independentes da escala das variáveis ​​(Friedman e Rubin, 1967). A proposta de Hardy e Rasson (1982) é buscar uma partição que minimize o volume total dos cascos convexos dos clusters. Em princípio, esse método é invariável em relação às transformações lineares dos dados, mas infelizmente não existe algoritmo para sua implementação (exceto por uma aproximação restrita a duas dimensões). Portanto, o dilema da padronização parece inevitável no momento e os programas descritos neste livro deixam a escolha para o usuário. A proposta de Hardy e Rasson (1982) é buscar uma partição que minimize o volume total dos cascos convexos dos clusters. Em princípio, esse método é invariável em relação às transformações lineares dos dados, mas infelizmente não existe algoritmo para sua implementação (exceto por uma aproximação restrita a duas dimensões). Portanto, o dilema da padronização parece inevitável no momento e os programas descritos neste livro deixam a escolha para o usuário. A proposta de Hardy e Rasson (1982) é buscar uma partição que minimize o volume total dos cascos convexos dos clusters. Em princípio, esse método é invariável em relação às transformações lineares dos dados, mas infelizmente não existe algoritmo para sua implementação (exceto por uma aproximação restrita a duas dimensões). Portanto, o dilema da padronização parece inevitável no momento e os programas descritos neste livro deixam a escolha para o usuário.

Franck Dernoncourt
fonte
1
Essa resposta é fenomenal
Candic3
6

A padronização dos dados é recomendada porque, caso contrário, o intervalo de valores em cada recurso atuará como um peso ao determinar como agrupar dados, o que geralmente é indesejável.

Por exemplo, considere a métrica padrão para a maioria dos algoritmos de clustering (incluindo DBSCAN no sci-kit learn) - euclidean, também conhecida como norma L2. Se um dos seus recursos tiver um intervalo de valores muito maior que os outros, o cluster será completamente dominado por esse único recurso. Para ilustrar essa olhada no exemplo simples abaixo:

>>> import numpy as np
>>> from sklearn.preprocessing import StandardScaler
>>> from sklearn.metrics.pairwise import euclidean_distances
>>> 
>>> X = np.array([[1,2,100],[4,3,50],[1,1,75]])
>>> 
>>> print X
[[  1   2 100]
 [  4   3  50]
 [  1   1  75]]
>>> 
>>> print euclidean_distances(X)
[[  0.          50.0999002   25.01999201]
 [ 50.0999002    0.          25.25866188]
 [ 25.01999201  25.25866188   0.        ]]
>>> print euclidean_distances(StandardScaler().fit_transform(X))
[[ 0.          3.46410162  1.73205081]
 [ 3.46410162  0.          3.46410162]
 [ 1.73205081  3.46410162  0.        ]]

A partir disso, você deve ver que as distâncias euclidianas entre as versões não padronizadas são dominadas pela terceira coluna, porque sua faixa de valores é muito maior que as outras duas. No entanto, quando os dados são padronizados, isso não se torna mais um problema e considera cada recurso igual ao calcular a distância entre cada ponto de dados.

David
fonte
1

Não é estritamente necessário padronizar, se é necessário ou não, pode depender da métrica da distância que você escolher.

Por exemplo, se você optar pela distância de Mahalanobis, a separação será baseada no número de desvios padrão que separam os pontos e não na distância absoluta entre eles, portanto, é uma métrica invariável da escala.

Como ocorre com muitas coisas no aprendizado de máquina, não há uma resposta rápida e difícil, e a única maneira de saber com certeza é aplicar uma variedade de técnicas, ver quais fornecem os resultados mais adequados para seus dados.

image_doctor
fonte
0

Em alguns casos, achei útil definir uma função de "avaliação de negócios", definindo a "importância" das dimensões usadas para agrupar. Por exemplo, para quitandas que agrupam os clientes, se as maçãs forem duas vezes mais caras que as laranjas, o número de maçãs será dobrado.

Marmite Bomber
fonte
Mas, então você não poderia incluir isso como um recurso adicional no qual você agrupa? ou seja, o preço se torna um recurso para agrupar?
precisa saber é o seguinte