Mulan: Uma Biblioteca Java para Aprendizado Multirrótulo

Transcrição

Mulan: Uma Biblioteca Java para Aprendizado Multirrótulo
Mulan: Uma Biblioteca Java para Aprendizado
Multirrótulo
Victor Freitas Rocha
Vitória, 28 de março de 2014
Victor Freitas Rocha (NINFA)
Vitória, 28/03/2014
1 / 20
Weka
Waikato Environment for Knowledge Analysis
Software de mineração de dados feito em Java
Começou em 1993
Coleção de algoritmos de aprendizado de máquina
Código aberto
Victor Freitas Rocha (NINFA)
Vitória, 28/03/2014
2 / 20
Weka
Waikato Environment for Knowledge Analysis
Contém ferramentas para:
I
Pré-processamento de dados
I
Classificação
I
Regressão
I
Clustering
I
Regras de associação
I
Visualização
Victor Freitas Rocha (NINFA)
Vitória, 28/03/2014
3 / 20
Weka
Waikato Environment for Knowledge Analysis
Weka permite especificar apenas um único atributo de classe
I
Não tem suporte a classificação multirrótulo
Muitos problemas reais são multirrótulo
Victor Freitas Rocha (NINFA)
Vitória, 28/03/2014
4 / 20
Classificação unirótulo vs Classificação
multirrótulo
Exemplo de classificação unirótulo:
I
Classificação indicativa de um filme: Livre, 10 anos, 12 anos, 14 anos, 16
anos, 18 anos
Exemplo de classificação multirrótulo:
I
Gênero de um filme: Ação, Animação, Aventura, Comédia, Documentário,
Musical, Terror, Romance, Esporte
Victor Freitas Rocha (NINFA)
Vitória, 28/03/2014
5 / 20
Classificação unirótulo vs Classificação
multirrótulo
Exemplo de classificação unirótulo:
I
Classificação indicativa de um filme: Livre, 10 anos, 12 anos, 14 anos, 16
anos, 18 anos
Exemplo de classificação multirrótulo:
I
Gênero de um filme: Ação, Animação, Aventura, Comédia, Documentário,
Musical, Terror, Romance, Esporte
Victor Freitas Rocha (NINFA)
Vitória, 28/03/2014
5 / 20
Mulan
Extensão do Weka
Oferece suporte a base de dados multirrótulo
Oferece apenas uma interface de programação
I
Não possui interface gráfica
Não é possível utilizar a biblioteca via linha de comando
Victor Freitas Rocha (NINFA)
Vitória, 28/03/2014
6 / 20
Mulan
Possui uma grande variedade de algoritmos para a execução das principais
tarefas de aprendizagem multirrótulo:
Classificação
Raqueamento
Classificação e Ranqueamento
Além disso, a biblioteca oferece os seguintes recursos:
Seleção de características
Avaliação de desempenho
Victor Freitas Rocha (NINFA)
Vitória, 28/03/2014
7 / 20
Tarefas multirrótulo
Exemplo:
Possíveis gêneros (rótulos): Ação, Animação, Aventura, Comédia, Documentário, Musical,
Terror, Romance, Esporte
Victor Freitas Rocha (NINFA)
Vitória, 28/03/2014
8 / 20
Tarefas multirrótulo
Exemplo:
Possíveis gêneros (rótulos): Ação, Animação, Aventura, Comédia, Documentário, Musical,
Terror, Romance, Esporte
Classificação
I
Comédia, Ação, Musical, Animação
Victor Freitas Rocha (NINFA)
Vitória, 28/03/2014
8 / 20
Tarefas multirrótulo
Exemplo:
Possíveis gêneros (rótulos): Ação, Animação, Aventura, Comédia, Documentário, Musical,
Terror, Romance, Esporte
Classificação
I
Comédia, Ação, Musical, Animação
Raqueamento
I
Animação, Ação, Comédia, Musical, Aventura, Romance, Documentário,
Esporte, Terror
Victor Freitas Rocha (NINFA)
Vitória, 28/03/2014
8 / 20
Requerimentos para executar o Mulan
Mulan
1.4.0
1.3.0
1.2.0
Weka
3.7.6
3.7.3
3.7.1
Victor Freitas Rocha (NINFA)
Java
1.6 ou mais recente
1.5 ou mais recente
1.5 ou mais recente
Junit
4.10 ou mais recente
4.5 ou mais recente
4.5 ou mais recente
Vitória, 28/03/2014
9 / 20
Formatação dos dados
Mulan requer dois arquivos de especificação de uma base de dados
multirrótulo.
Arquivo ARFF:
@relation MultiLabelExample
@attribute
@attribute
@attribute
@attribute
@attribute
@attribute
@attribute
@attribute
feature1 numeric
feature2 numeric
feature3 numeric
label1 {0, 1}
label2 {0, 1}
label3 {0, 1}
label4 {0, 1}
label5 {0, 1}
@data
2.3,5.6,1.4,0,1,1,0,0
Victor Freitas Rocha (NINFA)
Vitória, 28/03/2014
10 / 20
Formatação dos dados
Arquivo XML:
<labels xmlns="http://mulan.sourceforge.net/labels">
<label name="label1"></label>
<label name="label2"></label>
<label name="label3"></label>
<label name="label4"></label>
<label name="label5"></label>
</labels>
Victor Freitas Rocha (NINFA)
Vitória, 28/03/2014
11 / 20
Formatação dos dados
Arquivo XML:
<labels xmlns="http://mulan.sourceforge.net/labels">
<label name="label1"></label>
<label name="label2"></label>
<label name="label3"></label>
<label name="label4"></label>
<label name="label5"></label>
</labels>
Note que a ordem não importa em nenhum dos dois arquivos
Victor Freitas Rocha (NINFA)
Vitória, 28/03/2014
11 / 20
Formatação dos dados
Os dois arquivos seguintes também constituem uma representação
perfeitamente aceitável dos mesmos dados.
Arquivo ARFF:
@relation MultiLabelExample
@attribute
@attribute
@attribute
@attribute
@attribute
@attribute
@attribute
@attribute
feature1 numeric
label3 {0, 1}
feature2 numeric
label1 {0, 1}
feature3 numeric
label4 {0, 1}
label5 {0, 1}
label2 {0, 1}
@data
2.3,1,5.6,0,1.4,0,0,1
Victor Freitas Rocha (NINFA)
Vitória, 28/03/2014
12 / 20
Formatação dos dados
Arquivo XML:
<?xml version="1.0" encoding="utf-8"?>
<labels xmlns="http://mulan.sourceforge.net/labels">
<label name="label5"></label>
<label name="label1"></label>
<label name="label3"></label>
<label name="label2"></label>
<label name="label4"></label>
</labels>
Victor Freitas Rocha (NINFA)
Vitória, 28/03/2014
13 / 20
Formatação dos dados
Hierarquias de rótulos podem ser representadas no XML:
Arquivo XML:
<?xml version="1.0" encoding="utf-8"?>
<labels xmlns="http://mulan.sourceforge.net/labels">
<label name="sports">
<label name="football"></label>
<label name="basketball"></label>
</label>
<label name="arts">
<label name="sculpture"></label>
<label name="photography"></label>
</label>
</labels>
Victor Freitas Rocha (NINFA)
Vitória, 28/03/2014
14 / 20
Criação de um experimento de avaliação empírica
Exemplo:
MulanExp1.java
Carregando a base da dados:
String arffFilename = Utils.getOption("arff", args);
String xmlFilename = Utils.getOption("xml", args);
MultiLabelInstances dataset =
new MultiLabelInstances(arffFilename, xmlFilename);
Victor Freitas Rocha (NINFA)
Vitória, 28/03/2014
15 / 20
Criação de um experimento de avaliação empírica
Criação de uma instancia para cada algoritmo que será avaliado
LabelPowerset learner1 = new LabelPowerset(new J48());
MLkNN learner2 = new MLkNN();
Criação de um avaliador:
Evaluator eval = new Evaluator();
MultipleEvaluation results;
Definição das métricas que serão utilizadas:
List<Measure> measures = new ArrayList<Measure>(5);
measures.add(new ExampleBasedAccuracy());
measures.add(new ExampleBasedPrecision());
measures.add(new ExampleBasedRecall());
measures.add(new HammingLoss());
measures.add(new SubsetAccuracy());
Victor Freitas Rocha (NINFA)
Vitória, 28/03/2014
16 / 20
Criação de um experimento de avaliação empírica
Para a avaliação será usada validação cruzada:
int numFolds = 10;
results= eval.crossValidate(learner1, dataset, measures, numFolds);
System.out.println(results);
results= eval.crossValidate(learner2, dataset, measures, numFolds);
System.out.println(results);
Victor Freitas Rocha (NINFA)
Vitória, 28/03/2014
17 / 20
Obtenção de previsões para um conjunto de dados
não rotulados
Exemplo:
MulanExp2.java
Carregando a base da dados:
String arffFilename = Utils.getOption("arff", args);
String xmlFilename = Utils.getOption("xml", args);
MultiLabelInstances dataset =
new MultiLabelInstances(arffFilename, xmlFilename);
Criar uma instância do algoritmo de aprendizagem que queremos treinar, a
fim de construir um modelo e obter previsões:
LabelPowerset model = new LabelPowerset(new J48());
Victor Freitas Rocha (NINFA)
Vitória, 28/03/2014
18 / 20
Obtenção de previsões para um conjunto de dados
não rotulados
Treinar o classificador com os dados:
model.build(dataset);
Carregar o conjunto de dados não rotulados:
String unlabeledFilename = Utils.getOption("unlabeled", args);
FileReader reader = new FileReader(unlabeledFilename);
Instances unlabeledData = new Instances(reader)
Victor Freitas Rocha (NINFA)
Vitória, 28/03/2014
19 / 20
Obtenção de previsões para um conjunto de dados
não rotulados
A etapa seguinte é realizar uma previsão para cada instância do conjunto de
dados:
int numInstances = unlabeledData.numInstances();
for (int instanceIndex=0; instanceIndex < numInstances;
instanceIndex++) {
Instance instance = unlabeledData.instance(instanceIndex);
MultiLabelOutput output = model.makePrediction(instance);
System.out.println(output);
}
Victor Freitas Rocha (NINFA)
Vitória, 28/03/2014
20 / 20

Documentos relacionados