Calcular critério de clustering BIC (para validar clusters após médias K)


9

Gostaria de saber se existe uma boa maneira de calcular o critério de agrupamento com base na fórmula BIC, para uma saída k-Médias em R? Estou um pouco confuso sobre como calcular esse BIC para que eu possa compará-lo com outros modelos de cluster. Atualmente, estou usando a implementação do pacote de estatísticas do k-means.


Observe que este critério foi projetado para ser usado com k-means. Em agrupamentos obtidos por diferentes algoritmos, pode ser inadequado (em particular para os algoritmos de densidade de agrupamento com base)
parou - anony-Mousse de

Respostas:


6

Para calcular o BIC para os resultados de kmeans, testei os seguintes métodos:

  1. A seguinte fórmula é de: [ref2] insira a descrição da imagem aqui

O código r da fórmula acima é:

  k3 <- kmeans(mt,3)
  intra.mean <- mean(k3$within)
  k10 <- kmeans(mt,10)
  centers <- k10$centers
  BIC <- function(mt,cls,intra.mean,centers){
    x.centers <- apply(centers,2,function(y){
      as.numeric(y)[cls]
    })
    sum1 <- sum(((mt-x.centers)/intra.mean)**2)
    sum1 + NCOL(mt)*length(unique(cls))*log(NROW(mt))
  }
#

o problema é que quando eu uso o código r acima, o BIC calculado era monótono aumentando. qual o motivo?

insira a descrição da imagem aqui

[ref2] Ramsey, SA, et al. (2008). "Descobrindo um programa de transcrição de macrófagos, integrando evidências de varredura de motivos e dinâmica de expressão". PLoS Comput Biol 4 (3): e1000021.

  1. Eu usei a nova fórmula de /programming/15839774/how-to-calculate-bic-for-k-means-clustering-in-r

    BIC2 <- function(fit){
    m = ncol(fit$centers)
        n = length(fit$cluster)
    k = nrow(fit$centers)
        D = fit$tot.withinss
    return(data.frame(AIC = D + 2*m*k,
                      BIC = D + log(n)*m*k))
    }

Este método forneceu o menor valor de BIC no número de cluster 155. insira a descrição da imagem aqui

  1. usando o método fornecido @ttnphns, o código R correspondente conforme listado abaixo. No entanto, o problema é qual a diferença entre Vc e V? E como calcular a multiplicação por elementos para dois vetores com comprimento diferente?

    BIC3 <- function(fit,mt){
    Nc <- as.matrix(as.numeric(table(fit$cluster)),nc=1)
    Vc <- apply(mt,2,function(x){
        tapply(x,fit$cluster,var)
     })
    V <- matrix(rep(apply(mt,2,function(x){
    var(x)
    }),length(Nc)),byrow=TRUE,nrow=length(Nc))
    LL = -Nc * colSums( log(Vc + V)/2 ) ##how to calculate this? elementa-wise multiplication for two vectors with different length?
    BIC = -2 * rowSums(LL) + 2*K*P * log(NRoW(mt))
    return(BIC)
    }

1
Provavelmente você estava fazendo algo diferente. Foi afirmado no meu "pseudocódigo" que Vcé a matriz P x K e Vera uma coluna propagada K vezes na mesma matriz de tamanho. Então (ponto 4 na minha resposta) você pode adicionar Vc+V. Em seguida, pegue o logaritmo, divida por 2 e calcule as somas da coluna. O vetor de linha resultante multiplica-se (valor por valor, ie elementar) por linha Nc.
ttnphns

1
Eu próprio adicionei fórmulas na minha resposta, para que você possa comparar e dizer se o que está fazendo é isso ou não.
ttnphns

3

Eu não uso R, mas aqui está um cronograma que, espero, ajudará você a calcular o valor dos critérios de cluster BIC ou AIC para qualquer solução de cluster.

Essa abordagem segue a análise de cluster em duas etapas dos algoritmos do SPSS (consulte as fórmulas lá, começando no capítulo "Número de clusters" e depois vá para "Distância da probabilidade do log" em que ksi, a probabilidade do log, é definida). O BIC (ou AIC) está sendo calculado com base na distância de probabilidade do log. Estou mostrando abaixo a computação apenas para dados quantitativos (a fórmula dada no documento SPSS é mais geral e incorpora também dados categóricos; estou discutindo apenas a "parte" dos dados quantitativos):

X is data matrix, N objects x P quantitative variables.
Y is column of length N designating cluster membership; clusters 1, 2,..., K.
1. Compute 1 x K row Nc showing number of objects in each cluster.
2. Compute P x K matrix Vc containing variances by clusters.
   Use denominator "n", not "n-1", to compute those, because there may be clusters with just one object.
3. Compute P x 1 column containing variances for the whole sample. Use "n-1" denominator.
   Then propagate the column to get P x K matrix V.
4. Compute log-likelihood LL, 1 x K row. LL = -Nc &* csum( ln(Vc + V)/2 ),
   where "&*" means usual, elementwise multiplication;
   "csum" means sum of elements within columns.
5. Compute BIC value. BIC = -2 * rsum(LL) + 2*K*P * ln(N),
   where "rsum" means sum of elements within row.
6. Also could compute AIC value. AIC = -2 * rsum(LL) + 4*K*P

Note: By default SPSS TwoStep cluster procedure standardizes all
quantitative variables, therefore V consists of just 1s, it is constant 1.
V serves simply as an insurance against ln(0) case.

Os critérios de armazenamento em cluster AIC e BIC são usados ​​não apenas com armazenamento em cluster K-means. Eles podem ser úteis para qualquer método de agrupamento que trate a densidade dentro do cluster como variação dentro do cluster. Como o AIC e o BIC devem penalizar por "parâmetros excessivos", eles inequivocamente tendem a preferir soluções com menos clusters. "Menos grupos mais dissociados um do outro" poderia ser o seu lema.

Pode haver várias versões dos critérios de agrupamento BIC / AIC. O que mostrei aqui usa Vc, variações dentro do cluster , como o principal termo da probabilidade de log. Alguma outra versão, talvez mais adequada para o cluster de k-means, pode basear a probabilidade de log nas somas de quadrados dentro do cluster .

A versão pdf do mesmo documento SPSS a que me referi.

E aqui estão finalmente as próprias fórmulas, correspondentes ao pseudocódigo acima e ao documento; é extraído da descrição da função (macro) que escrevi para usuários do SPSS. Se você tiver alguma sugestão para melhorar as fórmulas, envie um comentário ou uma resposta.

insira a descrição da imagem aqui


Obrigado pela sua resposta. Gostaria de saber se você poderia explicar isso com relação à função objetivo que minimiza a soma de quadrados dentro do cluster?
UnivStudent

σe2VcVc+VVcVc=0

minha cabeça sopra e não consigo descobrir como posso usar isso para interromper meu agrupamento hierárquico aglomerativo. Eu estou usando-o para o problema de ligação de registro de agrupamento de documentos
MonsterMMORPG

@ Monster, Existem mais de 100 critérios de validação em cluster interno . BIC é um deles. Você faz cluster até o final, economizando soluções de cluster e variável de associação ao cluster em cada etapa. Bem, salve apenas as últimas 10 ou 20 etapas, porque provavelmente você não deseja muitos clusters pequenos. Compare as soluções por um critério de cluster e selecione 1-3 "melhores". Compare-os para interpretabilidade. Feito. Veja um exemplo .
ttnphns

@ttnphns o problema aqui, não consigo encontrar nenhum exemplo de dados reais desses chamados mais de 100 itens de validação de cluster interno. tudo o que consigo encontrar são algumas equações matemáticas que não consigo entender. Isso também me faz descrer estes algoritmos existe na realidade: D
MonsterMMORPG
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.