Aprendizado de Máquina Usando K Means

6 respostas
J

Salve Salve Galera!
Então, tenho um trabalho de Inteligencia Artificial sobre o Kmeans.
Só que estou sem ideia de como começar(tenho a base de dados) e como programar…
mas a minha duvida é como programar o Kmeans no Java…

Alguem aqui pode me ajudar nessa?

6 Respostas

V

Você já entendeu como o kmeans funciona?

Onde exatamente está sua dúvida?

PS: Não precisa usar informações de destaque para dizer o óbvio. Você já abriu o tópico em Java Avançado, portanto, é claro que sua dúvida é em [Java].

J

AHAHHA Valew a Ideia…

A Ideia do K Means tá ok…

Então, a minha duvida é se tem alguma biblioteca pronta ou vou ter que implementar toda a idea do começo…
Tendo a base de dados, como vou utiliza-la para conseguir realizar esse treinamento de maquina.

V

Só para explicar mais ou menos como eu fiz:

  1. Criei uma classe chamada Centroide, que tem como atributos:
    a) O vetor do centro;
    b) Um map<Vetor, Integer> que contém a contagem de quantas vezes um dado apareceu para um determinado vetor.

Não confundir, estamos falando de vetores na matemática e não da classe Vector.

A classe do centróide tem os seguintes métodos:

a) recalcularCentro(): Retorna o novo centro, calculado com os pontos;

b) distancia(Vector3D ponto): Retorna a distância do ponto indicado até o centro. Útil para descobrir se esse ponto é o mais próximo desse centróide;

c) adicionarPonto(Vector3D ponto): Adiciona um ponto ao centróide;

d) contem(Vector3D ponto): Indica se o centróide  possui esse ponto;

e) double distanciaMedia(): Calcula a distância média dos pontos desse centróide até o centro;
  1. Criei uma classe para todos os classificadores baseados em centróides, no caso o kmeans e classificação por threshold. Essa classe possui:
    a) Uma lista de centróides.
    b) Um valor para a tolerância de erro: Importante para que o algorítmo de classificação pare. Um float é considerado dentro da tolerância se abs(valor1 - valor2) < tolerancia;
E os seguintes métodos:

a) Criar centróides: Cria o número de centróides desejado, com base nas classes. A lista inicial é criada com base no número de classes desejado. A obtenção da posição inicial das classes é feita de forma aleatória, mas tento manter uma distância minima baseada na análise das amostras;

b) calcularErro(List<Centroide> e naoMudou(List<Centroide>): Calcula a distância média entre os centróides e testa se os centróides da iteração anterior não mudaram de posição em relação aos centróides dessa iteração. Essa é a condição de parada dos algorítmos de classificação;

c) processar: Realiza o processamento do algorítmo;
  1. Criei também uma classe main, que faz a leitura do arquivo de origem (no caso um BufferedImage) e usa as classes dos classificadores para fazer a classificação.
V

O k-means é um algorítmo muito simples. É bem fácil de implementa-lo você mesmo.

Se o seu professor não exige que você programe o algorítmo, pode dar uma olhada na WEKA:
http://www.cs.waikato.ac.nz/ml/weka/

Ela possui além do k-means diversos métodos para Data Mining, classificação e análise.
Agora, se você quer aprender como o classificador funciona, recomendo que você implemente o algorítmo todo.

J

aooow ViniGodoy Valew Cara!
Ajudou d++++++++

J

ViniGodoy , qual seria a ideia para calcular os novos centroides??

Criado 16 de abril de 2012
Ultima resposta 28 de abr. de 2012
Respostas 6
Participantes 2