MAC 0425/ Inteligência Artificial

Documentos relacionados
MAC0425/ Inteligência Artificial Exercício-Programa 1 - Busca

MLaaS com Azure: Que tipo de flor de íris é essa?

WEKA: Prática Carregando a base de dados no Weka

Trabalho de LP 15/07/2013. Prof. Flávio Miguel Varejão

Primeiro Trabalho de IA/SI: Buscas. Entrega: 03/03/2019 (2 semanas)

Créditos. SCC0173 Mineração de Dados Biológicos. Aula de Hoje. Introdução. Classificação III: Árvores de Decisão

Aprendizado de Máquina (Machine Learning)

Árvores. Thiago Martins, Fabio Gagliardi Cozman. PMR2300 / PMR3201 Escola Politécnica da Universidade de São Paulo

Aprendizado de Máquina

Aprendizado de Máquina (Machine Learning)

CEFET/RJ. Aprendizado de Máquina - Trabalho 01

K-Nearest Neighbours & RSTUDIO

Laboratório 3 Comandos de repetição while, do-while e for

SPYDER. um ambiente de desenvolvimento integrado (IDE*) para Python. Prof. Carlos Hitoshi Morimoto DCC IME USP Março, 2016

Introdução à Inteligência Artificial MAC MAC 415. Exercício Programa 1 Busca

Problema do Caminho Hamiltoniano

Desenvolvimento de programas. Análise do problema. Análise do problema. Análise do problema. Desenvolvimento do algoritmo. Codificação do programa

BCC202 - Estrutura de Dados I

Guia para o iniciante no Orthanc Para físicos-médicos, médicos e clínicos gerais.

Aprendizagem de Máquina. Prof. Júlio Cesar Nievola PPGIA - PUCPR

Inteligência Artificial. Raimundo Osvaldo Vieira [DComp IFMA Campus Monte Castelo]

Aurora Trinidad Ramirez Pozo Universidade Federal do Paraná

4.0 SP2 ( ) maio P Xerox FreeFlow Core Express Guia de Instalação

Trabalho Prático 1. Valor: 1,0 pontos (10% da nota total) Data de Entrega: 02/05/2010

Objetivos. Responder o que é Java; Mostrar as vantagens e desvantagens do Java; Compilar e executar um programa simples.

Trabalho 1: Busca no Pacman

Indexação e Busca. O objetivo deste trabalho é projetar e implementar um sistema de programas para indexação e busca em arquivos de texto.

Aprendizado de Máquina

TCC 00308: Programação de Computadores I Introdução

Introdução a Programação Web com PHP

LÓGICA DE PROGRAMAÇÃO PARA ENGENHARIA

Trabalho Prático 2 Mundo dos Blocos Alocação Dinâmica / Listas Encadeadas

Seleção Múltipla Laços (while, do-while, for) AULA 05

Python para quem sabe Python

Variáveis primitivas e Controle de fluxo

Thiago Marzagão 1. 1 Thiago Marzagão (Universidade de Brasília) MINERAÇÃO DE DADOS 1 / 21

Fundamentos da Programação

ATIVIDADES PRÁTICAS SUPERVISIONADAS

Fundamentos de Lógica e Algoritmos. Aula 3.1 Introdução a Programação. Prof. Dr. Bruno Moreno

Introdução à Computação II (Noturno) BCC Unesp Rio Claro/SP 2015 em PDF via Moodle: Escolha apenas 5 exercícios para entrega Exercício 01 (Pilhas)

scikit-learn: Aprendizado de máquina 101 com Python

Algoritmos. Algoritmos e Linguagem de Programação - Prof Carlos Vetorazzi

Aprendizado de Máquina

Fundamentos de Lógica e Algoritmos. Aula 3.1 Introdução a Python. Prof. Dr. Bruno Moreno

Inteligência Artificial

Aprendizado em IA. Prof. Carlos H. C. Ribeiro ITA Divisão de Ciência da Computação

Introdução à Programação. Vanessa Braganholo

INF 1771 Inteligência Artificial

Sistema Operacionais II. Aula: Virtualização

INF 1771 Inteligência Artificial

Resolução de Problemas com Computador. Resolução de Problemas com Computador. Resolução de Problemas com Computador

Novas Tecnologias no Ensino da Matemática

Aprendizado de Máquina

ATIVIDADES PRÁTICAS SUPERVISIONADAS

IBM SPSS Collaboration and Deployment Services (C&DS) versão 7

Introdução à Programação

MC-102 Aula 01. Instituto de Computação Unicamp

Fundamentos da Programação

BUSCA EM ARRAYS. Prof. André Backes. Ato de procurar por um elemento em um conjunto de dados

UNIVERSIDADE FEDERAL RURAL DO SEMI-ÁRIDO CURSO: CIÊNCIA DA COMPUTAÇÃO. Prof.ª Danielle Casillo

Engenharia de Software Aula 21. Revisão da Prova 2. Eduardo Figueiredo.

Classificação de Padrões. Abordagem prática com Redes Neurais Artificiais

Introdução ao Python. Programa Computacional

Exemplo de Arquitetura: Cliente/Servidor com Mestre e Escravos. Interface. Fator de speed-up. Speed-up

Spectrum Miner. Versão 8.0. Guia de administração para a integração do Portrait Dialogue

Transcrição:

MAC 0425/5739 - Inteligência Artificial Exercício-Programa 4 - Clasificação Prazo limite de entrega: 23:59 07/12/2016 1 Introdução Neste exercício-programa estudaremos o problema de aprendizagem supervisionado em conjuntos categóricos, implementando um classificador que usa árvores de decisão. Os objetivos deste exercício-programa são: (i) Familiarizar-se com os conceitos de aprendizagem supervisionado (ii) Estudar árvores de decisão, seus parâmetros de configuração e comparar o impacto deles no desempenho da classificação (iii) Implementar as principais componentes do algoritmo de aprendizado de árvores de decisão Árvores de decisão são uma das formas mais simples e sucedidas de algoritmos de aprendizagem de máquina. Uma árvore recebe como entrada uma situação descrita por um conjunto de características e retorna uma decisão booleana (sim/não). Para esse exercício-programa consideraremos alguns domínios para entender melhor os conceitos de aprendizagem de máquina. 1.1 Instalação Para a realização deste EP será necessário ter instalado em sua máquina a versão 2.7 do Python 1. Faça o download do arquivo ep4.zip disponível na página web da disciplina. Descompacte o arquivo ep4.zip e rode na raiz do diretório o seguinte comando para testar a instalação: $ python classify.py 2 Classificação usando árvores de decisão Nesse exercício-programa você resolverá diversos problemas de classificação. Independentemente do domínio, a classe para o aprendizado de uma árvore de decisão é definida com o conjunto de métodos abaixo (disponível no arquivo decisiontree.py): 1 https://www.python.org/downloads/ 1

# arquivo decisiontree.py class DecisionTreeClassifier( ClassificationMethod.ClassificationMethod ) : def init ( self, legallabels ) : def train( self, data, labels, args ) : Learn the tree model def buildtree( self, data, labels, depth = 0 ) : Recursive function to learn the tree model def isleaf( self, data, labels, depth ) : Check if it is not necessary to split the data def bestsplit( self, data, labels ) : Get the best variable to split the dataset using the metric function def divideset( self, data, label, variable ) : Given a variable, split the data set and labels in two sets. One data set with instances having variable as 0 and the other with instances having variable as 1 def classify( self, testdata ) : Classify all test data using the learned tree model 2

3 Implementação Arquivos que você precisará editar: decisiontree.py onde o algoritmo será implementado; metrics.py onde as métricas para divisão de um conjunto de dados serão implementadas. Arquivos que você precisará ler e entender: classify.py arquivo principal para executar os métodos de classificação. samples.py leitura dos conjuntos de dados mostfrequent.py algoritmo de aprendizado que rotula toda instância como a classe mais freqüente util.py estruturas de dados para auxiliar a codificação do algoritmo. Observação: Se recomenda usar a estrutura de dado Counter disponível no arquivo util.py na sua implementação. 4 Parte prática Você deverá implementar algumas funções nos arquivos decisiontree.py e metrics.py. Não esqueça de remover o código util.raisenotdefined() ao final de cada função. IMPORTANTE: Antes de implementar cada código, leia atentamente os comentários da função e tenha certeza que entendeu sua(s) entrada(s) e saída(s)! 4.1 Cenário 1 - Treinamento A primeira fase para obter um modelo de classificação requer aprender a estrutura dele dadas as observações. No caso de uma árvore de decisão, precisa-se implementar o algoritmo Hunt visto em aula. Código 0 - Decisão Modifique as funções train e classify para aprender uma árvore de 0 nível, ou seja, uma árvore de classificação que decide pela classe mais frequente. $ python autograder.py -q 0 Código 1 - Seleção de variável para divisão Implemente as métricas para escolha da divisão de um conjunto de dados explicadas em aula no arquivo metrics.py nas funções gini (índice de Gini), error (erro de classificação), entropy (entropia). Para testar suas implementações rode os comandos: $ python autograder.py -q 1 3

Código 2 - Melhor variável para dividir um conjunto Implemente a função de divisão de conjunto que usa uma métrica da pergunta anterior na função bestsplit. Para testar sua implementação rode o comando: $ python autograder.py -q 2 Além disso, modifique a função train para aprender uma árvore de classificação de 1 nível. Código 3 - Condições de parada de aprendizado Dado que o algoritmo Hunt é recursivo, você deve implementar o caso base do algoritmo verificando que não é necessário continuar dividindo o conjunto atual. Implemente o método no arquivo decisiontree.py na função isleaf. Para testar seu algoritmo rode o comando: $ python autograder.py -q 3 Código 4 - Aprendizado da árvore de decisão Implemente o algoritmo de Hunt no método buildtree para aprendizado da árvore que usa todos os métodos anteriores. Para testar seu algoritmo rode o comando: $ python autograder.py -q 4 Observações: Use a estrutura de dados DecisionNode na sua implementação 4.2 Cenário 2 - Teste Nesse cenário você já tem um modelo aprendido dado um conjunto de treinamento. Agora você precisa rotular novas instâncias usando seu modelo. Código 5 - Classificação de novas instâncias usando o modelo aprendido Implementar o método test da classe DecisionTree no arquivo decisiontree.py. Para testar sua implementação pode roda o comando. $ python autograder.py -q 5 Observação: Leia o arquivo mostfrequent.py para saber como devem ser retornados os rótulos. 4

5 Relatório Após o desenvolvimento da parte prática, você deverá testar o algoritmo com diferentes configurações e redigir um relatório claro e sucinto. Assim, você deverá: (a) compilar em tabelas as estatísticas das diferentes configurações em termos de acurácia; (b) discutir os méritos e desvantagens de cada configuração, no contexto dos dados obtidos; (c) responder as questões teóricas; (d) sugerir possíveis melhorias ao sistema e relatar dificuldades. 5.1 Questões Questão 1 - Métricas Quanto importante é a escolha de uma métrica de divisão no aprendizado de uma árvore de decisão? Questão 2 - Condição de parada Além do nível máximo que pode ter a árvore de decisão aprendida, quais outras condicões você implementou? Questão 3 - Acurácia Teste vários valores do parâmetro maxdepth e compare. Por qué ao aumentar o nível máximo não sempre a acurácia melhora? Questão 4 - Comparação Em qué casos rotular com a instância mais frequente pode ser melhor que usar uma árvore de decisão? 6 Entrega Você deve entregar um arquivo ep4.zip contendo APENAS os arquivos: (1) decisiontree.py e metrics.py com as implementações da parte prática; (2) relatório em formato PDF com as questões e comparação e discussão dos resultados (máximo de 2 páginas). Não esqueça de identificar cada arquivo com seu nome e número USP! No código coloque um cabeçalho em forma de comentário. 7 Critério de avaliação O critério de avaliação dependerá parcialmente dos resultados dos testes automatizados do autograder.py. Dessa forma você terá como avaliar por si só parte da nota que receberá para a parte prática. Para rodar os testes automatizados, execute o seguinte comando no diretório raiz: $ python autograder.py Com relação ao relatório, avaliaremos principalmente sua forma de interpretar comparativamente os desempenhos de cada configuração da árvore de decisão. Deve ficar claro que você compreendeu os resultados obtidos conforme esperado dados os parâmetros. Parte prática (37 pontos) 5

Código 0: autograder (3 pontos) Código 1: autograder (9 pontos) Código 2: autograder (6 pontos) Código 3: autograder (4 pontos) Código 4: autograder (9 pontos) Código 5: autograder (6 pontos) Relatório (25 pontos) Questões: (10 pontos) Comparação e Discussão: (15 pontos) 6