Concrete Logo
Hamburger button

Machine Learning no Java CE Community Conference

  • Blog
  • 24 de Maio de 2012
Share

 

Pensei neste Borges que fala de livros e do mundo próprio dele com sentidos porém sem visão, para falar de machine learning. Acho que tem afinidade por conta do mundo de informações que a gente sente estarem contidas nos dados mas que não são fáceis de ver com algum sentido.

 

Antes vou falar um tiquinho do que vi no JavaCE Community Conference na linda Fortaleza no Ceará, que nós da Concrete tivemos muito orgulho em apoiar.

 

O evento aconteceu nos dias 11 e 12 de maio passado na Faculdade 7 de setembro em Fortaleza. As instalações foram ótimas e a Internet tinha qualidade de dar inveja a maioria dos eventos do Sul Maravilha. A organização foi liderada pelo amigo Christiano Milfont mas contou com gente não só da CMilfont Consulting como também da TriadWorks

Gostei muito, valeu ter ido com o apoio da Concrete. Não sei dizer exatamente quantos compareceram mas o auditório era grande e estava quase lotado. Assisti excelentes palestras cujos links para os slides estão em https://gist.github.com/2700773. Neste gist aparecem também outros blogs falando do evento.

 

Machine Learning

Seguindo um assunto bem atual que abordei várias vezes neste blog, falei de machine learning. E fiz questão de ressaltar para a platéia com muitos estudantes, a importância de cadeiras teóricas como matemática e estatística. Como eu disse lá, machine learning é a intercessão de matemática e estatística com engenharia de software e ciência da computação.

Bem, chega de papo e vou mostrar logo os slides:

 

 

Durante a apresentação mostrei o Weka funcionando nos casos simples que aparecem nos slides.

O Weka é uma coleção de algoritmos de machine learning para tarefas de data mining. Os algoritmos implementados em Java, podem ser aplicados direto em um dataset ou chamados a partir de código Java. O Weka contém ferramentas para pré-processamento de dados, classificação, regressão, clusterização, regras de associação e visualização.

 

É relativamente fácil usar o Weka para casos muito mais complexos do que os que apresentei. Se alguém quiser experimentar bases de dados bem maiores aí vão alguns links:

 

Mostrei também como usar com Java a API do Weka pelo Eclipse em um outro caso bem simples. O código que executei está abaixo. Em verde comentadas as linhas que seriam usadas se fosse dado um arquivo .csv ao invés de um arquivo .arff.

[sourcecode language=”java” gutter=”false”]

package testinho;

import weka.classifiers.trees.J48;
import weka.core.Instances;
import weka.core.converters.ConverterUtils.DataSource;
//import weka.core.converters.CSVLoader;
//import java.io.File;

public class CriaArvoreJ48 {

/**
* @param args
*/
public static void main(String[] args) throws Exception {
DataSource fonte = new DataSource(args[0]);
Instances dados = fonte.getDataSet();

//DataSource fonte = new DataSource("testinho5.csv");
//CSVLoader loader = new CSVLoader();
//loader.setSource(new File("/some/where/some.data"));
//Instances dados = loader.getDataSet();

// O atributo 4 = jogaram servirá para a classificação
dados.setClassIndex(3);
//dados.setClassIndex(data.numAttributes() – 1);
J48 arvore = new J48();
arvore.buildClassifier(dados);
System.out.println(arvore);

}

}
[/sourcecode]

 

Os dados que usei e que correspondem ao testinho 5, estão em um arquivo que chamei testinho5.arff.

O formato ARFF, isto é, Attribute-Relation File Format, é um arquivo texto ASCII que descreve uma lista de instâncias compartilhando um conjunto de atributos. Foi desenvolvido pelo projeto de machine learning do Department of Computer Science of The University of Waikato, para uso do software Weka para machine learning.

O conteúdo do testinho5.arff é o seguinte:

[sourcecode language=”java” gutter=”false”]
@relation testinho5

@attribute tempo {Sol, nuvens, chuva}
@attribute temperatura {quente, boa, frio}
@attribute umidade {alta, normal}
@attribute vento {sim, nao}
@attribute jogaram {sim, nao}

@data
Sol,quente,alta,nao,nao
Sol,quente,alta,sim,nao
nuvens,quente,alta,nao,sim
chuva,boa,alta,nao,sim
chuva,frio,normal,nao,sim
chuva,frio,normal,sim,nao
nuvens,frio,normal,sim,sim
Sol,boa,alta,nao,nao
Sol,frio,normal,nao,sim
chuva,boa,normal,nao,sim
Sol,boa,normal,sim,sim
nuvens,boa,alta,sim,sim
nuvens,frio,normal,nao,sim
chuva,boa,alta,sim,nao
[/sourcecode]

Montar um projetinho no eclipse para rodar o Weka é bem fácil. Precisa adicionar como jar externo o weka.jar que veio dentro do download. Há um exemplo em https://ianma.wordpress.com/2010/01/16/weka-with-java-eclipse-getting-started/

 

Isto está ficando grande e vou parar. Quem sabe a gente faz na Concrete um workshop sobre machine learning e então experimentaremos alguns exemplos maiores e de maior valor. Quando isto acontecer, o que pode demorar um pouco porque temos outros workshops internos na fila, prometo colocar os resultados neste blog.