É verdade que o agrupamento K-means e o PCA parecem ter objetivos muito diferentes e, à primeira vista, não parecem estar relacionados. No entanto, conforme explicado no artigo de Ding & He 2004, K-significa Clustering via Análise de Componentes Principais , há uma conexão profunda entre eles.
A intuição é que o PCA procura representar todos os vetores de dados como combinações lineares de um pequeno número de vetores próprios e o faz para minimizar o erro de reconstrução ao quadrado médio. Por outro lado, K-means procura representar todos os n vetores de dados por meio de um pequeno número de centróides de cluster, ou seja, representá-los como combinações lineares de um pequeno número de vetores de centróides de cluster, onde os pesos de combinação lineares devem ser zero, exceto o único 1 . Isso também é feito para minimizar o erro de reconstrução ao quadrado médio.nn1
Portanto, o K-means pode ser visto como um PCA super-esparso.
O que o papel de Ding & He faz é tornar essa conexão mais precisa.
Infelizmente, o artigo de Ding & He contém algumas formulações desleixadas (na melhor das hipóteses) e pode ser facilmente mal interpretado. Por exemplo, pode parecer que Ding & He afirmam ter provado que os centróides de cluster da solução de cluster K-means estão no subespaço PCA dimensional :( K- 1 )
Teorema 3.3. O subespaço centróide do cluster é medido pelas primeiras
direções principais [...].K- 1
Para isso implica que as projeções no eixo PC1 serão necessariamente negativas para um cluster e positivas para outro cluster, ou seja, o eixo PC2 separará os clusters perfeitamente.K= 2
Isso é um erro ou alguma escrita superficial; em qualquer caso, tomado literalmente, essa afirmação específica é falsa.
Vamos começar examinando alguns exemplos de brinquedos em 2D para . Gerei algumas amostras das duas distribuições normais com a mesma matriz de covariância, mas com médias variadas. Em seguida, executei o K-means e o PCA. A figura a seguir mostra o gráfico de dispersão dos dados acima e os mesmos dados coloridos de acordo com a solução K-means abaixo. Também mostro a primeira direção principal como uma linha preta e centróides de classe encontrados por meios K com cruzes negras. O eixo PC2 é mostrado com a linha preta tracejada. O K-means foi repetido 100 vezes com sementes aleatórias para garantir a convergência para o ótimo global.K= 2100
Pode-se ver claramente que, embora os centróides de classe tendam a estar muito próximos da primeira direção do PC, eles não caem exatamente nela. Além disso, apesar de o eixo PC2 separar os clusters perfeitamente nas subparcelas 1 e 4, há alguns pontos do lado errado nas subparcelas 2 e 3.
Portanto, o acordo entre K-means e PCA é bastante bom, mas não é exato.
Então, o que Ding e Ele provaram? Por simplicidade, considerarei apenas . Deixe o número de pontos atribuídos a cada grupo ser n 1 e n 2 e o número total de pontos n = n 1 + n 2 . Seguindo Ding & He, vamos definir o vetor indicador de cluster q ∈ R n da seguinte maneira: q i = √K= 2n1n2n = n1+ n2 q∈ Rn sei-ésimo pontos pertencer ao cluster 1 eqi=-√qEu= n2/ n n1------√Eu se pertencer ao cluster 2. O vetor indicador de cluster possui comprimento unitário__q″=1e é "centrado", ou seja, seus elementos somam zero.qEu= - n1/ n n2------√∥ q∥ = 1∑ qEu= 0
Ding & He mostram que a função de perda K- (que o algoritmo K-significa minimiza) pode ser reescrita de maneira equivalente como , onde é a matriz Gram de produtos escalares entre todos os pontos: , onde é a matriz de dados e é a matriz de dados centralizada. - q ⊤ G q G∑k∑i(xi−μk)2−q⊤GqGG = X ⊤ c X c X n × 2 X cn×nG=X⊤cXcXn×2Xc
(Nota: estou usando notação e terminologia que diferem um pouco do trabalho deles, mas acho mais claro).
Portanto, a solução K-means é um vetor de unidade centralizada maximizando . É fácil mostrar que o primeiro componente principal (quando normalizado para ter a soma unitária dos quadrados) é o vetor próprio principal da matriz Gram, ou seja, também é um vetor unitário centrado maximizando . A única diferença é que é adicionalmente restrito a ter apenas dois valores diferentes, enquanto não possui essa restrição.q ⊤ G q p p ⊤ G p q pqq⊤Gqpp⊤Gpqp
Em outras palavras, K-means e PCA maximizam a mesma função objetivo , com a única diferença é que K-mean possui restrição "categórica" adicional.
É lógico que na maioria das vezes as soluções K-means (restritas) e PCA (irrestritas) serão muito próximas umas das outras, como vimos acima na simulação, mas não se deve esperar que sejam idênticas. Tomar definir todos os seus elementos negativos como iguais a e todos os seus elementos positivos como geralmente não fornecerão exatamente . - √p √−n1/nn2−−−−−−√ qn2/nn1−−−−−−√q
Ding e Ele parecem entender isso bem porque formulam seu teorema da seguinte maneira:
Teorema 2.2. Para cluster K-significa em que , a solução contínua do vetor indicador de cluster é o [primeiro] componente principalK=2
Observe que as palavras "solução contínua". Após provar esse teorema, eles comentam adicionalmente que o PCA pode ser usado para inicializar iterações K-means, o que faz total sentido, pois esperamos que esteja próximo de . Mas ainda é necessário executar as iterações, porque elas não são idênticas.pqp
No entanto, Ding & He, em seguida, desenvolvem um tratamento mais geral para e acabam formulando o Teorema 3.3 comoK>2
Teorema 3.3. O subespaço centróide do cluster é medido pelas primeiras
direções principais do [...].K−1
Não passei pela matemática da Seção 3, mas acredito que esse teorema de fato também se refere à "solução contínua" de K-means, ou seja, sua afirmação deve ler "o espaço do centróide do cluster da solução contínua de K-means é estendido [...] ".
Ding & He, no entanto, não fazem essa qualificação importante e, além disso, escrevem em seu resumo que
Aqui, provamos que os principais componentes são as soluções contínuas para os indicadores discretos de associação ao cluster para K-means clustering. Equivalentemente, mostramos que o subespaço medido pelos centróides do cluster é dado pela expansão espectral da matriz de covariância de dados truncada em termos .K−1
A primeira frase está absolutamente correta, mas a segunda não. Não está claro para mim se esta é uma escrita (muito) superficial ou um erro genuíno. Eu, educadamente, enviei um e-mail aos dois autores pedindo esclarecimentos. (Atualize dois meses depois: nunca recebi notícias deles.)
Código de simulação Matlab
figure('Position', [100 100 1200 600])
n = 50;
Sigma = [2 1.8; 1.8 2];
for i=1:4
means = [0 0; i*2 0];
rng(42)
X = [bsxfun(@plus, means(1,:), randn(n,2) * chol(Sigma)); ...
bsxfun(@plus, means(2,:), randn(n,2) * chol(Sigma))];
X = bsxfun(@minus, X, mean(X));
[U,S,V] = svd(X,0);
[ind, centroids] = kmeans(X,2, 'Replicates', 100);
subplot(2,4,i)
scatter(X(:,1), X(:,2), [], [0 0 0])
subplot(2,4,i+4)
hold on
scatter(X(ind==1,1), X(ind==1,2), [], [1 0 0])
scatter(X(ind==2,1), X(ind==2,2), [], [0 0 1])
plot([-1 1]*10*V(1,1), [-1 1]*10*V(2,1), 'k', 'LineWidth', 2)
plot(centroids(1,1), centroids(1,2), 'w+', 'MarkerSize', 15, 'LineWidth', 4)
plot(centroids(1,1), centroids(1,2), 'k+', 'MarkerSize', 10, 'LineWidth', 2)
plot(centroids(2,1), centroids(2,2), 'w+', 'MarkerSize', 15, 'LineWidth', 4)
plot(centroids(2,1), centroids(2,2), 'k+', 'MarkerSize', 10, 'LineWidth', 2)
plot([-1 1]*5*V(1,2), [-1 1]*5*V(2,2), 'k--')
end
for i=1:8
subplot(2,4,i)
axis([-8 8 -8 8])
axis square
set(gca,'xtick',[],'ytick',[])
end