terça-feira, 19 de junho de 2012

Clustering - Agrupamento de dados

No último post, no qual foi falado a respeito de mineração de dados, foi comentado sobre agrupamento de dados. A idéia é simples como o nome sugere: agrupar dados. Porém, conforme a finalidade da descoberta dos grupos e o tipo dos dados em questão a tarefa pode se tornar terrivelmente complexa, árdua e demorada (haja joguinhos no pc enquanto espera o processamento terminar! =P).
Vamos mostrar aqui a teoria básica do assunto e os principais algoritmos. Em próximos artigos, vamos enviar a teoria e implementação de cada um deles.

Há também o clustering que se refere a elaboração e montagem de clusters de computadores. Grandes redes de máquinas que trabalham como uma só. Subárea de sistemas distribuídos. Aqui estamos lidando com uma subárea de inteligência artificial.

O que é clustering?

Clustering, análise de clusters (grupos) ou agrupamento é a tarefa de inserir objetos dispersos em grupos (chamados de clusters) de forma que os objetos no mesmo cluster sejam mais similares - segundo algum critério definido no caso - entre si do que entre os objetos em outros clusters.


Clustering é uma das principais áreas da mineração de dados e uma técnica muito comum para análise de dados estatísticos em muitas áreas, como aprendizado de máquina, reconhecimento de padrões, análise de imagens, recuperação de informação e bioinformática.

A análise de clusters não é um algoritmo específico, mas uma classe de problemas a serem resolvidos por vários algoritmos que diferem muito entre si, tanto na maneira de como formam os clusters, quanto na eficiência que o fazem. Dentre as maneiras mais comuns de se formar grupos podemos citar menor distância entre os membros do cluster, áreas mais densas na distribuição espacial, intervalos ou distribuições estatísticas específicas. Clustering pode ser formulado como um problema de otimização com múltiplos objetivos. Onde o algoritmo a se escolher e seus parâmetros (valores como a função de distância, o limiar de densidade ou o número esperado de clusters) dependem dos dados e do tipo de resultado procurado. Além de o próprio algoritmo poder ser considerado
um parâmetro, já que dificilmente sabemos de antemão qual apresentará os melhores resultados.
A análise de clusters não é uma tarefa automática, é um processo de descoberta de conhecimento iterativo que envolve muita tentativa e erro. Normalmente é preciso mudar o pré-processamento, parâmetros e mesmo os algoritmos até obter as propriedades desejadas.

Clustering x Classificação

Sempre há confusão quanto a essas duas áreas. Pois a diferença entre elas é sutil em seu primeiro ver. Mas a diferença mais básica entre elas é que em clustering nós recebemos os dados e vamos descobrir grupos ali dentro utilizando técnicas não supervisionadas. Ou seja, nosso resultado são grupos.
Já em classificação, nós já conhecemos os grupos de antemão. Queremos é descobrir em qual desses grupos os dados que possuímos se encaixam. Ou seja, nosso resultado são dados classificados, geralmente, para tomada de decisão.

Num exemplo isso fica mais claro. Vamos supor que você tem em mãos um grande banco de dados de um grande loja e foi te dada a tarefa de descobrir quantos e quais são os principais perfis de clientes que frequentam a loja relativo, é claro, ao consumo. Isto é uma tarefa de clustering: você não tem os grupos, quer descobri-los.

Agora, suponha que você trabalhe para um banco e tenha que montar um sistema para descobrir quais clientes são bons ou maus pagadores. O banco precisa de uma forma automatizada para auxiliar os gerentes. Assim eles podem conceder empréstimos ou não com mais segurança. Isto é uma tarefa de classificação: você tem os grupos (bom pagador e mau pagador) e quer classificar os clientes neles.

Clustering e classificação tem diversos termos em comum. Por isso explicamos desde já a diferença para evitar confusões no futuro. Por exemplo, o ato de encontrar clusters, muitas vezes é chamado de classificação, da mesma forma como o ato de classificar, de fato, em classificação. A coisa fica muito confusa quando misturamos as duas áreas. Porém, vamos prosseguir só com o clustering. A classificação fica para outro dia.


Aplicações de clustering


Algoritmos de clustering podem ser utilizados em praticamente qualquer área de conhecimento, por exemplo:   
  • Marketing: encontrar grupos de consumidores com comportamento similar data uma base de dados grande contendo seus bens e compras passadas;
  • Biologia: classificação de plantas e animais a partir de suas características;
  • Livrarias: otimizar a organização dos livros;
  • Seguros: identificar grupos com grandes chances de custo acima do normal, ou fraudes;
  • Planejamento de cidades: identificar grupos de casas conforme seu tipo, valor e localização;
  • Estudo de terremotos: analisar epicentros de terremotos para identificar áreas perigosas;
  • WWW: classificação de documentos; agrupamento de dados de blogs para descobrir grupos com padrões de acesso similares.

Algoritmos - Requisitos


Os requisitos que um algoritmo de clustering tem de satisfazer são:
  • escalabilidade (ser capaz de lidar com grandes volumes de dados);
  • lidar com diferentes tipos de atributos (texto, imagem, números, ;
  • descobrir clusters com tamanhos e formas arbitrários;
  • exigirem conhecimentos de área mínimo para determinar os parâmetros de entrada;
  • habilidade de lidar com ruído e outliers(dados extremamente fora do padrão);
  • insensibilidade a ordem dos dados;
  • alta dimensionalidade (lidar com dados com muitas dimensões/atributos);
  • interpretabilidade (a resposta do algoritmo tem que ser inteligível para seres humanos);
  • usabilidade (ser fácil de aprender/usar ajuda)

Algoritmos - Problemas

Há vários problemas com as tarefas de clustering. Claro! Sempre tem problemas sobrando. Mesmo dentro de algo que deveria ser uma solução. Dentre eles:
  • nenhum dos algoritmos de clustering atuais cobrem todos os requisitos corretamente (convenhamos, que boa parte dos requisitos são querer demais);
  • lidar com muitas dimensões e muitos dados pode ser problemático por questões de tempo (50 anos de processamento não é algo muito interessante, não concorda?);
  • a efetividade do algoritmo depende da função distância usada no caso (para algoritmos baseados em distância);
  • se uma distância óbvia não existe, nós devemos defini-la. O que nem sempre é fácil, especialmente em espaços multi-dimensionais;
  • o resultado do algoritmo de clustering é sujeito a múltiplas interpretações (muitas vezes o próprio algoritmo pode).

Algoritmos de clustering

Os algoritmos de clustering podem ser divididos em algumas categorias:
  • Clustering exclusivo
  • Clustering de sobreposição (Overlapping)
  • Clustering hierárquico
  • Clustering probabilístico
Clustering exclusivoneste caso, os dados são agrupados de forma exclusiva, ou seja, cada dado só pode ser inserido em um único grupo. Um exemplo simples disso é mostrado na figura abaixo, onde a separação dos é conseguida usando uma reta. Aí temos dois grupos, com dados acima de reta e abaixo, nenhum em ambos grupos.

Clustering de sobreposição (Overlapping): ao contrário dos exclusivos, esta categoria utiliza grupos fuzzy para agrupar os dados. O que significa que dados podem pertencer a vários grupos ao mesmo tempo com diferentes graus de associação. Geralmente o valor do grau de associação é um percentual que representa o quanto esse dado pertence a um grupo.

Clustering hierárquico: Aqui, os algoritmos se baseiam na união de grupos muito próximos. Começando por definir cada dado como um grupo. Depois de uma série de iterações, os clusters desejados são obtidos.

Clustering probabilístico: como o nome diz, utiliza métodos probabilísticos para montar os grupos.

E, claro, um algoritmo pode pertencer a mais de uma categoria.


Para finalizar, temos aqui uma lista de alguns dos algoritmos mais usados nessa área (aos poucos todos eles serão explicados aqui no Legauss):
  • Canopy
  • C-médias fuzzy
  • Dirichlet Process Clustering
  • K-médias
  • K-média fuzzy
  • Latent Dirichlet Allocation (LDA)
  • Maximização de expectativa (EM)
  • Mean Shift
  • Mixture of Gaussians
  • Shi–Malik
  • SLINK


Espero que gostem deste e da série de artigos que está por vir. ;)
Que a salsicha esteja com você!



Fontes:
Data Clustering (Principles of Knowledge Discovery in Databases), Clustering - Introduction, Cluster analysis - Wikipedia, the free encyclopedia, Different Techniques of Data Clustering, Data Clustering e Data Clustering Simulation in Python and PyGame - CodeProject.




Nenhum comentário: