• Nenhum resultado encontrado

Como, entre outros, o objetivo deste trabalho era classificar os agrupamentos formados, então, foi necessário à escolha de bases de dados que pudessem permitir este tipo de cenário. Neste caso, as bases de dados utilizadas como referências foram a base de dados Iris e a base de dados Wine, ambas obtidas na UCI (University of California, Irvine) Machine Learning Repository (UCI [13]).

Devido à métrica que foi utilizada (distância Euclidiana) na geração dos

clusters no processo de agrupamento, foi preciso que as bases escolhidas

possuíssem seus atributos do tipo numérico, o que já acontece com as bases citadas. Outro ponto importante a ser considerado é que os dados (atributos) das instâncias (objetos) envolvidos em cada uma destas bases de dados precisaram ser normalizados para o correto cálculo da Matriz de Dissimilaridade. O processo de normalização foi construído dividindo-se o valor em questão pelo maior valor obtido na base de dados para aquele mesmo atributo.

Iris corresponde a uma classe de plantas com flor que na base de dados selecionada, divide-se em três possíveis classificações (Setosa, Versicolour,

Virginica). Esta base foi disponibilizada na UCI por R.A. Fisher em 1988 e tem sido

amplamente utilizada pela comunidade científica. Uma característica importante que se extrai deste repositório é que, ao se organizar os agrupamentos, uma das classes

(Setosa) distingue-se bem das demais. Os atributos na base correspondem a características da flor deste tipo de planta, sendo os seguintes:

 Comprimento da sépala;  Largura da sépala;  Comprimento da pétala;  Largura da pétala.

Estes atributos estão em unidades de centímetros (cm). O número de objetos (itens) a serem agrupados é de 150. A Tabela 1 contém uma amostra (com dados normalizados) desta base de dados.

Tabela 1. Amostra normalizada da base de dados Iris Comprimento da sépala (cm) Largura da sépala (cm) Comprimento da pétala (cm) Largura da pétala (cm) Classe 0.64 0.79 0.20 0.08 Setosa 0.82 0.63 0.66 0.60 Versicolour 0.82 0.72 0.73 0.80 Virginica

A outra base de dados selecionada para uso nos experimentos deste projeto foi a base Wine, disponibilizada na UCI por Riccardo Leardi em 1991. Este repositório contempla informações de 178 instâncias com 13 atributos cada uma, relativas a características de três diferentes tipos de vinhos cultivados em uma mesma região na Itália. Os atributos envolvem informações técnicas e específicas de características químicas e visuais de cada tipo de vinho, motivo pelo qual não foram detalhados o nome destes campos. A Tabela 2 contém uma amostra (com dados normalizados) desta base de dados, onde Ai para i=1,2,...,13 corresponde a cada um dos atributos e C é a classificação final do objeto.

Tabela 2. Amostra normalizada da base de dados Wine

A1 A2 A3 A4 A5 A6 A7 A8 A9 A10 A11 A12 A13 C

0.95 0.29 0.75 0.52 1 0.72 0.60 0.42 0.63 0.43 0.60 0.98 1 1 0.82 0.27 0.68 0.68 1 0.28 0.20 0.56 0.40 0.23 0.52 0.45 1 2 0.90 0.79 0.88 0.83 1 0.51 0.18 0.40 0.31 0.65 0.39 0.48 0 3

3.2 Implementação

O pseudocódigo do SACA, proposto por HANDL [7] e descrito na seção 2.3.3, bem como algumas variações do mesmo foram implementados no software Matlab 7.12.0.635. A Figura 7 mostra o fluxograma do algoritmo SACA. A seguir, serão vistos detalhes da implementação.

3.2.1 Descrição da Implementação

A implementação da representação espacial da grade onde aconteceria o processo de agrupamento aconteceu através de uma matriz no Matlab. Os índices de posição desta matriz representam justamente as células responsáveis por armazenar os objetos durante a clusterização. Através desta correspondência, é possível obter a posição exata que determinado objeto se encontra ao longo da execução do código. Uma posição nula nesta matriz indica a ausência de objeto naquele lugar.

Durante a execução, os objetos podem mover-se livremente pelas células da matriz desde que a nova posição esteja vazia. Cada célula pode ter no máximo um objeto. A representação dos objetos no código acontece de forma numérica e depende da base de dados envolvida no processo.

Uma segunda matriz foi criada com as mesmas dimensões da matriz inicial que representa a grade. A ideia é de se utilizar esta outra matriz para ter a

informação sobre a posição que cada um dos agentes se encontra na grade. Através disto, é possível identificar qual agente está segurando determinado objeto.

Figura 7. Fluxograma do SACA (LAURO [9])

À medida que o agrupamento é feito, os objetos tendem a juntar-se formando os clusters na grade. Para facilitar a identificação visual dos grupos distintos, os

objetos são representados através de cores e símbolos diferentes, cada qual de acordo com a sua respectiva classificação.

3.2.2 Cenários de Execução

Como foi visto na seção 1.2, este projeto teve por objetivo promover um estudo comparativo do algoritmo SACA e variações do mesmo, com a finalidade de melhoria na eficiência do processo de agrupamento. Na seção 2.4, pode-se ver algumas propostas de aperfeiçoamento do SACA em sua forma básica. No presente trabalho, além de se fazer uso da versão simples do SACA conforme a seção 2.3.3, foi construída também a solução com alteração no parâmetro  (ver seção 2.4.5) e uma nova configuração também foi proposta. As três parametrizações foram aplicadas nas duas bases de dados vistas na seção 3.1, conforme a seguir:

 SACA na versão original;

 SACA com melhoria no parâmetro . Este parâmetro é um escalar que quantifica o quão denso os agrupamentos formados devem ser. Segundo experimentos relatados por LAURO [9], este tipo de melhoria apresentou bons resultados;

 SACA com medição de insucessos. Os dois primeiros cenários de implementação utilizam como critério de parada do algoritmo um número de iterações pré-estabelecido. Esta 3ª parametrização utiliza um critério de parada diferente: avalia a quantidade de insucessos que determinado agente teve ao sair em busca de um novo objeto que esteja livre. Conforme se pode ver no fluxograma representado pela Figura 7, quando a decisão de um agente de deixar o objeto na nova posição é positiva, o mesmo deverá sair à procura de um novo objeto que esteja livre. Ao encontrar, a decisão de pegar ou não o mesmo obedece a uma função probabilística (ver seção 2.3.2). Caso a decisão seja negativa, ou seja, o agente não pegue o objeto, ele sairá em busca de outro e então uma nova avaliação é feita. O processo repete- se até que o agente consiga pegar um objeto. A cada insucesso seguido do agente, o valor é contabilizado. Se esse valor exceder certo

limiar, a execução do código é finalizada, independentemente do número de iterações. Este tipo de cenário evita que a rotina fique presa a uma recursão infinita diante de possíveis insucessos seguidos por parte de um agente em pegar um novo objeto.

No decorrer deste projeto, outros melhorias no SACA como a alteração na função densidade descrita na seção 2.4.1 e a separação espacial vista na seção 2.4.4 foram desenvolvidas inicialmente, entretanto, não foram utilizadas como objeto de estudo comparativo do presente trabalho.

Documentos relacionados