Qual algoritmo devo usar para agrupar um enorme conjunto de dados binários em poucas categorias?

11

Eu tenho uma matriz grande (650K linhas * 62 colunas) de dados binários (somente entradas de 0-1). A matriz é praticamente esparsa: cerca de 8% é preenchida.

Gostaria de agrupá-lo em 5 grupos - digamos, nomeado de 1 a 5. Tentei agrupar hierarquicamente e não foi capaz de lidar com o tamanho. Também usei o algoritmo de agrupamento k-means baseado na distância de hamming, considerando os vetores de 650K bits de comprimento 62. Não obtive resultados adequados com nenhum deles.

Por favor ajude.

Não consolidado26
fonte
Não posso comentar b / c do meu 1 representante, então tive que digitar isso como resposta. Você pode ver a similaridade de Jaccard. Eu acho que o python scipy tem implementações dele. Jaccard ...
gobrewers14
Existe alguma razão para supor que os dados se enquadram naturalmente em cinco grupos, pelo menos até certo ponto? Você está realmente interessado no agrupamento de linhas ou também nas relações entre as 62 características codificadas nos vetores de bits? Neste último caso, outras técnicas são mais adequadas.
micans

Respostas:

4

Você está fazendo a pergunta errada.

Em vez de perguntar "qual algoritmo", você deve perguntar "o que é uma categoria / cluster significativa em seu aplicativo".

Não estou surpreso que os algoritmos acima não funcionaram - eles foram projetados para casos de uso muito diferentes. O k-means não funciona com outras distâncias arbitrárias. Não use com distância de Hamming. Há uma razão pela qual é chamado k- means , só faz sentido usar quando a média aritmética é significativa (o que não é para dados binários).

Você pode tentar os modos k, em vez disso, o IIRC é uma variante que deve ser usada com dados categoriais e os dados binários são um tanto categoriais (mas a escarsidade ainda pode matá-lo).

Mas antes de tudo, você removeu duplicatas para simplificar seus dados e removeu colunas exclusivas / vazias, por exemplo?

Talvez APRIORI ou abordagens semelhantes também sejam mais significativas para o seu problema.

De qualquer forma, primeiro descubra o que você precisa e, em seguida, qual algoritmo pode resolver esse desafio. Trabalhe com base em dados , não experimentando algoritmos aleatórios.

Possui QUIT - Anony-Mousse
fonte
Você pode explicar por que "Não use com distância de Hamming"? Pode fazer sentido, afinal está disponível no Matlab. Não me importo de abrir uma nova pergunta, se fizer sentido.
Dror Atariah
Por causa da média. A média aritmética não tem sentido com distância de hamming ou dados binários. Use o modo ou medóide .
Quit - Anony-Mousse
Apenas para ter certeza de que estou acertando: o matlab usa a média aritmética ao atualizar os centróides ao usar o k-means junto com a métrica hamming. Isso está certo? Qual é a maneira correta de usar essa métrica no matlab?
precisa saber é o seguinte
k-means é chamado k- means porque usa a média. Caso contrário, chama-se k-medoids, modos-k etc. A média é boa para L2 - soma dos desvios ao quadrado.
QuIT - Anony-Mousse
Então, usos Matlab k- meios , juntamente com o hamming métrica; isso não faz muito sentido.
precisa saber é o seguinte
3

Talvez eu esteja um pouco atrasado com a resposta, mas provavelmente seria útil para algum corpo no futuro.

A teoria da ressonância adaptativa é um bom algoritmo para problemas de classificação binária. Verifique o ART 1. Mais informações você pode ver no livro Neural Network Design gratuito no capítulo 19.

Essa rede combina ótima idéia biológica e boa implementação matemática. Além disso, esse algoritmo é fácil de implementar e, neste livro, você também pode encontrar instruções passo a passo sobre como criar esse classificador.

itdxer
fonte
2

Um algoritmo clássico para agrupamento de dados binários é o modelo Bernoulli Mixture. O modelo pode ser ajustado usando métodos bayesianos e também usando EM (Maximização de Expectativas). Você pode encontrar um exemplo de código python em todo o GitHub, enquanto o primeiro é mais poderoso, mas também mais difícil. Eu tenho uma implementação C # do modelo no GitHub (usa Infer.NET que possui uma licença restritiva!).

O modelo é bastante simples. Primeiro, amostra o cluster ao qual um ponto de dados pertence. Em seguida, faça uma amostragem independente de quantos Bernoullis você tiver dimensões em seu conjunto de dados. Observe que isso implica independência condicional dos valores binários, dado o cluster!

Na configuração bayesiana, as atribuições anteriores ao cluster são uma distribuição Dirichlet. Este é o lugar para colocar priors se você acredita que alguns clusters são maiores que outros. Para cada cluster, você deve especificar uma distribuição Beta anterior para cada distribuição de Bernoulli. Normalmente, esse prioritário é Beta (1,1) ou uniforme. Por fim, não se esqueça de inicializar aleatoriamente as atribuições de cluster quando os dados forem fornecidos. Isso quebrará a simetria e o amostrador não ficará preso.

Existem vários recursos interessantes do modelo BMM na configuração bayesiana:

  1. Cluster online (os dados podem chegar como um fluxo)

  2. O modelo pode ser usado para inferir as dimensões ausentes

O primeiro é muito útil quando o conjunto de dados é muito grande e não cabe na RAM de uma máquina. O segundo pode ser usado em todos os tipos de tarefas de imputação de dados ausentes, por exemplo. imputando a metade ausente da imagem binária do MNIST.

Vladislavs Dovgalecs
fonte