Search This Blog

Tuesday, June 18, 2019

Aula 28 de Métodos Computacionais em Economia (2019) - Aprendizagem de Máquinas: Classificação Linear

Essa é a sexta aula de Aprendizagem de Máquinas do nosso curso. Esses são os slides usados em sala.



Códigos usados em sala de aula

OLS para classificação

Implementação do Perceptron

Implementação de um modelo de resposta binária

Referências

Pattern Recognition and Machine Learning - Christopher Bishop [Seções 4.1, 4.2 e 4.3]

A. Carvalho, D. Cajueiro e R. Camargo - Introdução aos Métodos Estatísticos para Economia e Finanças [Capítulo 9]

Modern multivariate statistical techniques - Alan Julian Izenman [Seções 8.1 a 8.4]

The elements of statistical learning - Hastie, Tibshirani e Friedman [Capítulo 4]

Neural networks - Haykin [Capítulos 3 e 5]

Bases de dados usadas para responder os exercícios

PRorum: Sites com bases de dados interessantes

Soluções de Exercícios

Linear Discriminant Analysis

Probabilistic Generative Models

Stepwise logistic regression

Xor

Aula 27 de Métodos Computacionais em Economia (2019) - Aprendizagem de Máquinas: Modelos lineares regularizados

Essa é a quinta aula de Aprendizagem de Máquinas do nosso curso, onde discutimos modelos lineares regularizados. Esses são os slides usados em sala.

Referências

Modern multivariate statistical techniques - Alan Julian Izenman [Capítulo 5]

Statistical Learning with Sparsity: The Lasso and Generalizations - Trevor Hastie and Robert Tibshirani

Referências Complementares

High-Dimensional Methods and Inference on Treatment and Structural Effects in Economics - Victor Chernozhukov, A. Belloni and C. Hansen

Soluções de Exercícios

Double Selection via lasso [Questão 1(b)]

Aula 26 de Métodos Computacionais em Economia (2019) - Aprendizagem de Máquinas: Noções de Previsão

Essa é a quarta aula de Aprendizagem de Máquinas do nosso curso que versa sobre previsão. Esses são os slides usados em sala.


Referências

Elements of forecasting - Francis Diebold

Time series analysis - James Douglas Hamilton

Referências Complementares

The Signal and the Noise: Why So Many Predictions Fail - But Some Don't - Nate Silver

The Predictors: How a Band of Maverick Physicists Used Chaos Theory to Trade Their Way to a Fortune on Wall Street - Thomas A. Bass

The Myth of the Rational Market: A History of Risk, Reward, and Delusion on Wall Street - Justin Fox

Soluções de Exercícios

Previsão de série temporal (propriedades) [Questão 1]

Previsão de venda de bebidas alcólicas [Questão 2]

Sunday, June 2, 2019

Aula 25 de Métodos Computacionais em Economia (2019) - Aprendizagem de Máquinas: Noções de estatística bayesiana

Essa é a terceira aula de Aprendizagem de Máquinas do nosso curso. Esses são os slides usados em sala.




Códigos usados em sala de aula


Proporção de fumantes

Referências

Bayesian data analysis - Gelman, Carlin e Stern - Christopher Bishop [Capítulos 1, 2, 6, 10, 11]

Estatística Bayesiana. Paulino, Turkman e Murteira [Capítulos 1, 2, 3, 4 e 7].

Referências Complementares para exercícios

Bayesian econometrics - Gary Koop

Soluções de Exercícios

Regressão linear simples [Questão 1]

Regressão linear múltipla [Questão 2]

Wednesday, May 29, 2019

Aula 24 de Métodos Computacionais em Economia (2019) - Aprendizagem de Máquinas: Modelos Lineares

Essa é a segunda aula de Aprendizagem de Máquinas do nosso curso que versa sobre modelos lineares. Esses são os slides usados em sala.



Códigos usados em sala de aula


Decomposição Viés-Variância

Referências

Pattern Recognition and Machine Learning - Christopher Bishop [Seções 3.1, 3.2 e 3.6]

Modern multivariate statistical techniques - Alan Julian Izenman [Capítulo 5]

The elements of statistical learning - Hastie, Tibshirani e Friedman [Capítulo 3]

Neural networks - Haykin [Capítulo 7]



Referências Complementares para otimização numérica

Numerical methods in economics - Kenneth Rudd

Numerical methods in engineering with python - Jaan Kiusalaas

Bases de dados usadas para responder os exercícios

PRorum: Sites com bases de dados interessantes

Soluções de Exercícios


Rede Neural de Bases radiais [Questão 1]

PCR - Principal Components Regression [Questão 2(a)

PLS - Implementação do Partial Least Squares [Questão 2(b)

PLS - Implementação do Ridge [Questão 2(c)

Forwards Stepwise em python [Questão 3(a)

Implementação do Lasso [Questão 3(b)

Implementação do LARS [Questão 3(c)

Forwards Stagewise em python [Questão 3(d)





Friday, May 24, 2019

Aula 23 de Métodos Computacionais em Economia (2019) - Introdução a Aprendizagem de Máquinas

Na nossa vigésima terceira aula de métodos computacionais fizemos uma introdução a aprendizagem de máquinas. Esses são os slides usados em sala.



Soluções de Exercícios


Referências

The Master Algorithm: How the Quest for the Ultimate Learning Machine Will Remake Our World - Pedro Domingos

Pattern Recognition and Machine Learning - Christopher Bishop

Deep learning - Ian Goodfellow, Yoshua Bengio and Aaron Courville

The elements of statistical learning - Hastie, Tibshirani e Friedman

Modern multivariate statistical techniques - Alan Julian Izenman

The discipline of machine learning - T. M. Mitchel

A few useful things to know about machine learning - P. Domingos

Learning deep architectures for AI - Y. Bengio

In defence of forensic social science - Amir Goldberg [Big data and Society, 2015]

Sociology in the era of big data: the ascent of forensic social science - D. A. McFarland e
K. Lewis [American Sociology, 2015]

Economic reason and artificial intelligence - D. C. Parkes and M. P. Wellman [Sience 349,
p.267, 2015]

Big Data: New Tricks for Econometrics - H. R. Varian

The Impact of Machine Learning on Economics - Susan Athey

The State of Applied Econometrics: Causality and Policy Evaluation
Susan Athey e Guido W. Imbens.

Beyond Prediction: Using Big Data for Policy Problems -
Susan Athey

High-Dimensional Methods and Inference on Treatment and Structural Effects in Economics - Victor Chernozhukov, A. Belloni and C. Hansen

Prediction Policy Problems -
Jon Kleinberg, Jens Ludwig, Sendhil Mullainathan, and Ziad Obermeyer

Saturday, May 18, 2019

Aula 22 de Métodos Computacionais em Economia (2019) - Interlúdio 3: Modelos Baseados em Agentes

Na nossa vigésima segunda aula de métodos computacionais introduzimos modelos baseados em agentes. Esses são os slides usados em sala.



Abaixo temos os exemplos apresentados em sala de aula:

Jogo da Minoria

Modelo de Simulação Bancária


Referências

Arthur, W. B. Inductive reasoning and bounded rationality. American Economic Review, v. 84, n. 2, p. 406--411, 1994.

Barroso, R. V. et al., Interbank network and regulation policies: an analysis through agent-based simulations with adaptive learning, published in the Journal Of Network Theory In Finance, v. 2, n. 4, p. 53–86, 2016. [A versão preliminar está aqui: https://mpra.ub.uni-muenchen.de/73308/]

Challet, D. and Zhang, Y. C. Emergence of cooperation and organization on an evolutionary game. Physica A 246, p. 407--418, 1997

Agent-Based and Individual-Based Modeling: A Practical Introduction
by Steven F. Railsback and Volker Grimm

An Introduction to Agent-Based Modeling: Modeling Natural, Social, and Engineered Complex Systems with NetLogo -- Wilensky, Uri, Rand, William (2015)

Complex Adaptive Systems: An Introduction to Computational Models of Social Life -- John H. Miller and Scott Page


Agent-Based Modeling: The Santa Fe Institute Artificial Stock Market Model Revisited -- Norman Ehrentreich

Soluções de Exercícios



Friday, May 17, 2019

Aula 21 de Métodos Computacionais em Economia (2019) - Interlúdio 2: Análise Numérica e Otimização

Essa aula não será formalmente discutida em sala de aula. De fato, precisaríamos de muitas aulas para fazer um apanhado das principais idéias. Usaremos esse espaço apenas para fazer alguns comentários e indicar possíveis referências que podem ser consultadas em tópicos específicos.

Na segunda parte do nosso curso sobre Machine Learning, alguns tópicos de Análise Numérica e Otimização Numérica serão mencionados e explicados informalmente quando aparecerem. Sem tentar ser exaustivo, entre eles estão:

1) Métodos que lidam com a solução de sistemas lineares. Particularmente a decomposição LU.
2) Métodos que lidam com a solução de sistemas não lineares. Particularmente o método de Newton.
3) Métodos que lidam com otimização numérica. Particularmente o método do gradiente e formas de restringir problemas de otimização.

Referências

Analysis of Numerical Methods - Eugene Isaacson and Herbert Bishop Keller

A First Look at Numerical Functional Analysis - W. W. Sawyer

Numerical methods in economics - Kenneth Rudd

Numerical methods in engineering with python - Jaan Kiusalaas

Aula 20 de Métodos Computacionais em Economia (2019) - Interlúdio 1: Métodos de Monte Carlo

Na nossa vigésima aula de métodos computacionais introduzimos técnicas de Monte Carlo. Esses são os slides usados em sala.


Abaixo temos os exemplos apresentados em sala de aula:

Relação entre as áreas do círculo e quadrado

Consistência do OLS

Album de figurinhas

Referências

Numerical methods in economics - Kenneth Judd [Capítulo 8]

Introdução aos métodos estatísticos para economia e finanças - Alexandre Carvalho, Daniel Cajueiro e Reinaldo Camargo.

Referências adicionais

Estatística sem Mistério

Soluções de Exercícios

Como são gerados os números aleatórios?

Monte Carlo: Riqueza



Aula 19 de Métodos Computacionais em Economia (2019) - Compromisso entre eficiência temporal e espacial

Na nossa décima nona aula de métodos computacionais discutimos o compromisso entre eficiência temporal e espacial. Esses são os slides usados em sala.

Códigos usados em sala de aula

Ordenação por contagem

Referências para essa aula:

Introduction to the Design and Analysis of Algorithms - Anany Levitin [Seções 7.1 e 11.2]

Introduction to Algorithms - Thomas H. Cormen, Charles E. Leiserson, Ronald L. Rivest e Clifford Stein [Capítulo 8]

Aula 18 de Métodos Computacionais em Economia (2019) - Quick sort

Na nossa décima oitava aula de métodos computacionais discutimos o algoritmo conhecido como Quick Sort e como aleatorização pode ser usada para melhorar a complexidade do algoritmo. Esses são os slides usados em sala.


Referências para essa aula:

Introduction to the Design and Analysis of Algorithms - Anany Levitin [Seção 5.2]

Introduction to Algorithms - Thomas H. Cormen, Charles E. Leiserson, Ronald L. Rivest e Clifford Stein [Capítulo 7]


Solução de exercícios

Cálculo da mediana com complexidade linear

Thursday, May 16, 2019

Aula 17 de Métodos Computacionais em Economia (2019) - Melhoria Iterativa

Na nossa décima sétima aula de métodos computacionais discutimos a estratégia conhecida como Melhoria Iterativa. Esses são os slides usados em sala.


Códigos usados em sala de aula

Marriage Stable Problem

Referências para essa aula:

Introduction to the Design and Analysis of Algorithms - Anany Levitin [Capítulo 10]

Combinatorial optimization: Algorithms and Complexity - Christos H Papadimitriou e Kenneth Steiglitz [Capítulo 19]


Referências complementares

Two-Sided Matching: A Study in Game-Theoretic Modeling and Analysis - Alvin E. Roth e Marilda A. Oliveira Sotomayor

Stable Marriage and Its Relation to Other Combinatorial Problems: An Introduction to the Mathematical Analysis of Algorithms - Donald Ervin Knuth

Soluções

College Problem Admission

Aula 16 de Métodos Computacionais em Economia (2019) - Estratégias Gananciosas

Na nossa décima sexta aula de métodos computacionais discutimos a estratégia conhecida como Gananciosa (ou Gulosa). Esses são os slides usados em sala.

Referências para essa aula:

Introduction to the Design and Analysis of Algorithms - Anany Levitin [Capítulo 9]

Combinatorial optimization: Algorithms and Complexity - Christos H Papadimitriou e Kenneth Steiglitz [Capítulo 12]

Introduction to Algorithms - Thomas H. Cormen, Charles E. Leiserson, Ronald L. Rivest e Clifford Stein [Capítulo 16]

Soluções da série de exercícios

Algoritmo de Prim para encontrar a MST de um grafo


Algoritmo de Kruskal para encontrar a MST de um grafo


Aula 15 de Métodos Computacionais em Economia (2019) - Programação Dinâmica

Na nossa décima quinta aula de métodos computacionais discutimos a estratégia conhecida como Programação Dinâmica. Esses são os slides usados em sala.



Códigos usados em sala de aula

Fibonacci com Memoization ou Bottom-Up

Programação dinâmica para resolver o problema da mochila

Programação dinâmica para encontrar os menores caminhos

Referências para essa aula:

Introduction to the Design and Analysis of Algorithms - Anany Levitin [Capítulo 8]

Combinatorial optimization: Algorithms and Complexity - Christos H Papadimitriou e Kenneth Steiglitz [Capítulo 18]

Introduction to Algorithms - Thomas H. Cormen, Charles E. Leiserson, Ronald L. Rivest e Clifford Stein [Capítulo 15]

Soluções da série de exercícios

Problema do troco [Questão 1]

Justificação de textos usando Programação Dinâmica [Questão 2]

Regressão linear segmentada [Questão 3]

Maximizar a soma do produto dos elementos de uma pilha [Questão 4]

Multiplicação de cadeias de matrizes [Questão 6]


Investimento ótimo [Questão 7 (n)]

Produção ótima [Questão 7 (y)]












Aula 14 de Métodos Computacionais em Economia (2019) - Branch and Bound

Na nossa décima quarta aula de métodos computacionais discutimos a estratégia conhecida como Branch e Bound. Esses são os slides usados em sala.


Códigos usados em sala de aula

Branch and bound para resolver o problema da mochila


Referências para essa aula:

Introduction to the Design and Analysis of Algorithms - Anany Levitin [Seção 12.2]

Combinatorial optimization: Algorithms and Complexity - Christos H Papadimitriou e Kenneth Steiglitz [Capítulo 18]

Referência complementar para estudar filas com prioridades

Data Structures and Algorithms in Python - Michael T. Goodrich, Roberto Tamassia, Michael H. Goldwasser [Capítulo 9]

Soluçoes dos exercícios

Branch and bound para resolver o problema de alocação

Branch and bound para resolver encontrar os caminhos mais curtos de um grafo (Djkstra)

Branch and bound para resolver o problema do caixeiro viajante


Tuesday, April 23, 2019

Aula 13 de Métodos Computacionais em Economia (2019) - Backtracking

Na nossa décima terceira aula de métodos computacionais discutimos a estratégia conhecida como Backtracking. Esses são os slides usados em sala.


Códigos usados em sala de aula

Backtracking para gerar e resolver labirintos

Problema das N rainhas usando Backtracking

Subset sum usando backtracking

Longest integer subsequence usando backtracking

Referências para essa aula:

Introduction to the Design and Analysis of Algorithms - Anany Levitin [Seção 12.1]

Lecture 3 do E-book Algorithms de Jeff Erickson.

Think recursively - Eric S. Roberts [Capítulo 8]

Referências complementares para essa aula:

Artificial intelligence: A modern approach - S. J. Russell and Peter Norvig [Capítulo 5]

Soluções de exercícios

Resta 1 usando backtracking

Slide Puzzle 15

Instant Insanity

Sudoku

Rota dos cavalos

M-coloring problem

Thursday, April 18, 2019

Aula 12 de Métodos Computacionais em Economia (2019) - Transformação e Conquista

Na nossa décima segunda aula de métodos computacionais discutimos a estratégia conhecida como Transformação e Conquista. Esses são os slides usados em sala.


Referências Adicionais para essa aula:

Introduction to the Design and Analysis of Algorithms - Anany Levitin [Seções 6.1 e 6.2]

Solução de exercícios:

Unicidade de vetor [Questão 1]

Cálculo da moda [Questão 2]

Intersecção entre dois conjuntos [Questão 3]

Eliminação gaussiana [Questão 4]

Decomposição LU [Questão 5]

Aula 11 de Métodos Computacionais em Economia (2019) - Divisão e Conquista

Na nossa décima primeira aula de métodos computacionais discutimos a estratégia conhecida como Divisão e Conquista. Esses são os slides usados em sala.

Abaixo temos os exemplos apresentados em sala de aula:

Merge sort

Referências Adicionais para essa aula:

Introduction to the Design and Analysis of Algorithms - Anany Levitin [Capítulo 5]

Solução de exercícios:

Produto de matrizes [Questão 3]

Inversões [Questão 2]

Quick sort [Questão 1]

Conjunto de pontos mais próximos [Questão 4(a)

Fecho convexo[Questão 4(b)]

Fatorial [Questão 5]

Maior variação positiva [Questão 6]

Aula 10 de Métodos Computacionais em Economia (2019) - Redução e Conquista

Na nossa décima aula de métodos computacionais discutimos a estratégia conhecida como Redução e Conquista. Esses são os slides usados em sala.


Abaixo temos os exemplos apresentados em sala de aula:

Torre de Hanoi

Busca binária

Insertion sort

Ordenação topológica

Permutações

Geração de todos os subconjuntos

Referências Adicionais para essa aula:

Introduction to the Design and Analysis of Algorithms - Anany Levitin [Capítulo 4]

Soluções de exercícios


Gerar permutações lexicograficamente [Questão 3]

Movimentos da Torre de Hanoi para gerar todos os subconjuntos [Questão 4]



Saturday, April 13, 2019

Aula 9 de Métodos Computacionais em Economia (2019) - Força Bruta III - Busca Exaustiva em Grafos

Na nossa nona aula de métodos computacionais discutimos os algoritmos BFS e DFS que promovem busca exaustiva em grafos e várias de suas aplicações. Esses são os slides usados em sala.


Abaixo temos os exemplos apresentados em sala de aula:

Análise empírica de redes

Como implementar o algoritmo de busca exaustiva em grafos conhecido como breadth first search - BFS (busca em largura)?

Como implementar o algoritmo de busca exaustiva em grafos conhecido como depth first search - DFS (Busca em profundidade)?

Referências Adicionais para essa aula:

Introduction to the Design and Analysis of Algorithms - Anany Levitin [Seção 3.5]

Introduction to Algorithms - Thomas H. Cormen, Charles E. Leiserson, Ronald L. Rivest e Clifford Stein [Capítulo 22]

Referências complementares para essa aula:

Networks: An Introduction - Mark Newman

Soluções de exercícios:

Como implementar BFS e DFS em Python e extrair informações úteis de um grafo, como conectividade, aciclicidade, etc?

Problema das jarras

Thursday, April 4, 2019

Aula 8 de Métodos Computacionais em Economia (2019) - Força Bruta II - Busca Exaustiva

Na nossa oitava aula de métodos computacionais discutimos vários problemas clássicos usando o método de busca exaustiva. Nessa aula, vimos nosso primeiro problema com sabor de teoria econômico - o chamado problema Marriage-Matching. A solução apresentada foi uma baseada em busca exaustiva. Obviamente, nas próximas aulas iremos aprender estratégias que produzam algoritmos menos custosos. Esses são os slides usados em sala.


Abaixo temos os exemplos apresentados em sala de aula:

Existem bibliotecas prontas em python para gerar permutações e combinações?

Como implementar uma solução computacional para o problema do caixeiro viajante?

Como implementar uma solução computacional para o problema da mochila?

Como implementar uma solução computacional para o problema do casamento (marriage-matching)?

Referências Adicionais para essa aula:

Introduction to the Design and Analysis of Algorithms - Anany Levitin [Seção 3.4]

Referências Complementares:

In Pursuit of the Traveling Salesman: Mathematics at the Limits of Computation -
William J. Cook

The Art of Computer Programming, Volume 4A: Combinatorial Algorithms - Donald E. Knuth

Aula 7 de Métodos Computacionais em Economia (2019) - Força Bruta

Na nossa sétima aula de métodos computacionais discutimos vários problemas clássicos usando o método de força bruta (usando a definição do problema). Obviamente, nas próximas aulas iremos aprender estratégias que produzam algoritmos menos custosos. Esses são os slides usados em sala.


Abaixo temos os exemplos apresentados em sala de aula:

Algoritmos de ordenação com complexidade quadrática

Cálculo de máximo e mínimo de uma sequência

Busca linear em uma lista

Cálculo de determinantes usando cofatores

Produto de matrizes em Python

Par mais próximo em python

Substring matching

Fecho convexo

Referências Adicionais para essa aula:

Introduction to the Design and Analysis of Algorithms - Anany Levitin [Seções 3.1, 3.2 e 3.3]

Referências Complementares:

Computational Geometry: Algorithms and Applications - Mark de Berg and Otfried Cheong

Soluções de exercícios

Tetrominoes [Questão 2]

Josephus [Questão 8]


Locomoção de robôs [Questão 9 (f)]


Aula 6 de Métodos Computacionais em Economia (2019) - Filas e Pilhas

Na nossa sexta aula de métodos computacionais discutimos duas coleções importantes de dados: pilhas e filas. Esses são os slides usados em sala.

Abaixo temos os exemplos apresentados em sala de aula:

Como implementar uma pilha em python?

Como implementar uma fila em python?

Como python aloca memória dinamicamente para uma lista?


Referências Adicionais para essa aula:

Introduction to Algorithms - Thomas H. Cormen, Charles E. Leiserson, Ronald L. Rivest e Clifford Stein [Seções 10.1, 17.2 and 17.4]

Data Structures and Algorithms in Python - Michael T. Goodrich, Roberto Tamassia, Michael H. Goldwasser [Seções 5.3, 6.1, 6.2]

Fundamentals of Python: Data Structures - Kenneth Lambert [Capítulos 7 e 8]

Data Structures and Algorithms Using Python - Rance D. Necaise [Capítulos 7 e 8]

Solução da série de exercícios

Exercício 1:

Você pode dar um exemplo de um algoritmo que verifica se um número é um palíndromo usando pilha?

Exercício 3:

Chamadas recursivas da torre de Hanoii


Exercício 5 (e):

Como usar uma pilha para gerar todas as permutações de um conjunto?

Exercício 5 (f):

Algoritmo não recursivo para gerar todos os subconjuntos de um dado conjunto

Aula 5 de Métodos Computacionais em Economia (2019) - Complexidade computacional



Na nossa quinta aula de métodos computacionais discutimos Complexidade Computacional. Esses são os slides usados em sala.

Abaixo temos os exemplos apresentados em sala de aula:

Medição empírica da complexidade computacional

Referências Adicionais para essa aula:

Introduction to Algorithms - Thomas H. Cormen, Charles E. Leiserson, Ronald L. Rivest e Clifford Stein [Capítulo 3]

Introduction to the Design and Analysis of Algorithms - Anany Levitin [Capítulo 2]

Soluções da série de exercícios:

Como calcular a complexidade computacional das implementações recursivas da série de fibonacci?

Qual a complexidade computacional de um algoritmo recursivo que satisfaz a relação de recorrência?

Qual a complexidade computacional dessas relações de recorrência de acordo com o Teorema Mestre (master theorem)?

Saturday, March 30, 2019

Aula 4 de Métodos Computacionais em Economia (2019) - Programação Orientada a Objeto

Na nossa quarta aula de métodos computacionais discutimos Noções de Programação Orientada a Objeto. Esses são os slides usados em sala.


Abaixo temos os exemplos apresentados em sala de aula:

Exemplo de Classes

Exemplo de encapsulamento

Exemplo de sobrecarga de operadores

Exemplo de polimorfismo

Exemplos de iteradores

Exemplos de geradores

Exemplo de herança

Exemplo de classe abstrata

Referências Adicionais para essa aula:

1. Usuários de Python podem ter interesse em olhar:

Think Python - Allen Downey

2. Usuários de C++ podem ter interesse em olhar:

Think C++

3. Usuários de Java podem ter interesse em olhar:

Intro to Java Programming

Soluções de exercícios

Exercício 5 (a):
M sets


Exercício 5 (b):
Julia sets

Exercício 6:
Alocação de carteiras



Tuesday, March 26, 2019

Aula 3 de Métodos Computacionais em Economia (2019) - Recursão

Na nossa terceira aula de métodos computacionais discutimos recursões. Esses são os slides usados em sala.


Abaixo temos os exemplos apresentados em sala de aula:

Implementações da sequencia de Fibonacci

Implementações do fatorial de um número

Solução da Torre de Hanoi

Referências:

Think recursively - Eric S. Roberts

Persian Recursion Anne M. Burns Mathematics Magazine Vol. 70, No. 3 (Jun., 1997), pp. 196-199

The Algorithmic Beauty of Plants - Przemyslaw Prusinkiewicz and Aristid Lindenmayer (1991)

Introduction to recursive programming - Manuel Rubio Sanchez

Mathematical puzzles and diversions (Volume 2) - Martin Gardner

Referências Adicionais para essa aula:

1. Usuários de Python podem ter interesse em olhar:

Think Python - Allen Downey: Capítulo 5.

2. Usuários de C++ podem ter interesse em olhar:

Think C++: Capítulo 4.


Soluções da série de exercícios


Observação: Vários dos exercícios abaixo usam a idéia de Turtle Graphics discutida aqui.

Algoritmo de Euclides [Questão 5 dos slides]

Árvores usando recursão [Questão 6 dos slides]



Pinturas de Mondrian usando recursão [Questão 7 dos slides]


Sierpinski Gasket [Questão 8]

Ilhas de Koch [Questão 9(a)]

Ilhas de Koch 2 [Questão 9(b)]

Gosper Hexagonal Curve [Questão 9(c)]

L-systems [Questão 9(d)]

Tree OL Systems 2 [Questão 9(e)]

Tree OL Systems [Questão 9(f)]

Tree OL Systems [Questão 9(g)]

Tree OL Systems [Questão 9(g) - solução 2]

Tree OL Systems [Questão 9(i)]

Tree OL Systems [Questão 9(o)]

Tree OL Systems [Questão 9(r)]

Como implementar persian recursions [Questão 10(a) e 10(b)]

Triangulo de Sierpinski [Questão 11(a)]

Combinações no jogo de basquete [Questão 11(e)]

Soma de bits [Questão 11(f)]

Números de Catalan [Questão 11(g)]

Números de Catalan [Questão 11(g)]

Árvore binária [Questão 11(h)]

Pirâmides [Questão 11(i)]




Aula 2 de Métodos Computacionais em Economia (2019) - Coleções Básicas de Dados

Na nossa segunda aula de métodos computacionais discutimos coleções básicas de dados. Esses são os slides usados em sala.

Abaixo temos os exemplos apresentados em sala de aula:

Como usar sequências de dados ou arrays em programação estruturada?

Como usar conjuntos ou sets em programação computacional?

Como usar mapas (maps) ou dicionários em programação computacional?

Soluções de exercícios

Como implementar o produto de matrizes? [Considere apenas a solução convencional nessa resposta. As outras serão discutidas mais para frente no curso]

Como fatorar um número inteiro?

Thursday, March 21, 2019

Aula 1 de Métodos Computacionais em Economia (2019): Noções de Programação Estruturada

Nós tivemos nossa primeira aula de método computacionais. Esses são os
slides usados em sala de aula.

Abaixo temos os exemplos apresentados em sala de aula:

Exemplo de Controle de Fluxo usando Condicionais

Exemplo do uso do Loop For em um programa computacional

Exemplo do uso do Loop While em um programa computacional

Referências Adicionais para essa aula:

1. Usuários de Python podem ter interesse em olhar:

Think Python - Allen Downey

2. Usuários de C++ podem ter interesse em olhar:

Think C++

Alguns links externos relacionados com essa aula:

Qual o propósito de incluir "if __name__ == '__main__':" em python?

Computação Humana

Page Rank

Melhores livros de Python


Soluções das séries de exercício:

Questão 1

Questão 2

Questão 3

Questão 4

Questão 5

Sobre a solução de exercícios no Curso de Metodos Computacionais em 2019

Considere as informações abaixo sobre a solução de exercícios que serão usados para a avaliação no nosso curso:


0) Os exercícios a serem resolvidos são individuais e estarão disponíveis juntos com os slides que serão publicados aqui nesse site depois da aula.

1) Os exercícios que serão usados para avaliação são indicados por uma estrela.

2) Se você escolher um exercício, você envia um email para a turma (seus colegas e eu) avisando que escolheu aquele exercício. No mesmo momento, você atualiza a planilha do google.

3) Todos os exercícios devem ser resolvidos e publicados no prorum.com. Você precisará criar uma conta no site para perguntar e responder. Você pode usar o seu nome ou um apelido que você criar (nesse caso, você deve avisar ao seu professor que manterá em sigilo). Se você usar o seu nome, suas perguntas, respostas e comentários ficarão públicos. Eu não vejo problema nenhum nisso, visto que todos estão no curso para aprender. Entretanto, alguém pode manter seu nome em sigilo se desejar. O nome público do site e da planilha devem ser os mesmo.

4) Como fazer a pergunta e respondê-la?

a) Primeiro você deverá fazer a pergunta.

b) Depois que você fizer a pergunta, aparecerá uma aba para resposta, onde você incluirá a sua resposta.

c) Quando terminar de responder a sua pergunta, inclua o link na planilha editável mencionada acima.

d) O PRorum aceita edição em latex. Use e explore isso. Evite usar editores de equações bizarros como aqueles usados no Word. Se você nunca usou, aproveite essa oportunidade para aprender. As dicas estão nesse link:

http://prorum.com/?qa=213/como-escrever-equacoes-matematicas-usar-latex-no-prorum-com&show=213#q213

4) Os exercícios devem ser auto-contidos para permitir que qualquer pessoa, estudante, ex-aluno, aluno de outro curso (por exemplo, alguns dos exercícios desse curso também são usados no meu curso de Métodos Computacionais ou Economia Quantitativa) possa acessa-lo sem ter que acessar os slides, livro ou outro material específico do curso. Lembre que é sempre difícil entender códigos ou resoluções de outros colegas. Por isso, seja cuidadoso e lembre que esse material que você está gerando contribui para a metade de sua nota no curso e será provavelmente usado por muitos anos e por muitos colegas.

5) Foi combinado em sala que cada estudante resolveria 3 exercícios e comentaria outros três de outros colegas.

6) Sugere-se que cada aluno se planeje para resolver pelo menos um exercício estrela por mês. Essa política evita o problema de deixar todos os exercícios para o final. Por favor, não deixe para resolver todos os exercícios na última semana. Essa postura gera prejuízos em pelo menos três dimensões:

a) Quando isso ocorre, a solução dos exercícios apresentam menor qualidade.

b) Dificulta a vida de seu colega que precisa comentar seu exercício.

7) Dificulta a vida de seu professor que precisa corrgir seu exercício.

8) Os comentários devem ser precisos. Não use "Ótima solução"! Use "Ótima solução, pois você explorou..." Ou então "Faltou na solução XXX". "Sua solução pode ser melhorada se você considerar os seguintes aspectos."

9) Alguns exemplos de boas soluções em versões anteriores do curso:

http://prorum.com/?qa=2448/como-posso-testar-um-intervalo-possui-numeros-perfeitos&show=2448#q2448

http://prorum.com/?qa=2414/implementar-extrair-informacoes-conectividade-aciclicidade&show=2414#q2414

http://prorum.com/?qa=2609/como-prever-corretamente-os-digitos-da-base-de-dados-mnist&show=2609#q2609

Curso de Métodos Computacionais em 2019



Como já discutido aqui, o curso de métodos computacionais nesse semestre será dividido em três partes: A primeira parte lida com tópicos básicos de programação estruturada e orientação a objeto. A segunda parte com projeto de algoritmos. A terceira parte foca em Aprendizagem de Máquinas e Deep Learning.


A pretensão básica do curso é que o bom estudante depois do curso terá habilidade de lidar com qualquer tópico considerado em aqui, mesmo que o tópico específico não tenha sido discutido em sala.

As versões anteriores desse curso, você pode encontrar: versão 2017, versão 2016 e versão 2018.

Existem diferenças entre essa nova versão do curso e as versões anteriores? A novidade para 2018 é a inclusão de alguns tópicos de aprendizagem de máquinas: redução de dimensionalidade (por exemplo redes de Kohonen e t-SNE) e memórias associativas (redes de Hopfield e máquinas de Boltzman).

Por favor, dê uma olhada na lista de pré-requisitos (no final do post). Principalmente aquele que vêm do fundo do meu coração.


PARTE I - Noções de Programação

1) Introdução a programação estruturada

2) Coleções de dados

3) Recursões

4) Noções de programação orientada a objeto

5) Complexidade computacional

6) Pilhas e filas

Parte II - Projeto de algoritmos

1) Força bruta

2) Força bruta II - Busca exaustiva

3) Força bruta III - Busca exaustiva em grafos

4) Redução e conquista

5) Divisão e conquista

6) Transformação e conquista

7) Backtracking

8) Branch and Bound

9) Programação Dinâmica

10) Estratégias Gananciosas

11) Melhoria Iterativa

12) Quick Sort

13) Compromisso entre eficiência temporal e espacial

INTERLÚDIO

[Ferramentas]

1) Introdução aos Métodos de Monte Carlo

2) Análise numérica e otimização
[Atividade extra-classe]

PARTE III - Aprendizagem de Máquinas (Machine Learning)

1) Introdução a aprendizagem de máquinas

2) Modelos lineares de regressão (Modelos lineares de funções de base)

3) Modelos Bayesianos

4) Previsão (Big picture)

5) Modelos lineares regularizados

6) Modelos lineares de classificação

7) Redes neurais e deep learning

8) Aprendizagem por reforço

9) Processamento de linguagem natural

AVALIAÇÂO

Haverá duas avaliações: Uma prova que inclui partes I e II do curso e exercícios individuais que abordem tópicos do curso inteiro.

REFERÊNCIAS

Existe uma lista gigante de referências por tópico. Existe um resumo dessas referências aqui. Se você quiser uma lista mais detalhada, dê uma olhada nas aulas individuais da nossa versão anterior do curso aqui.

PERGUNTAS FREQUENTES

Esse é um curso para aprender métodos computacionais para econometria?

Não, mas vários tópicos tangenciam problemas similares considerados em econometria. Normalmente, um curso usual de Machine Learning incluiria um tópico com noções básicas de modelos de regressão, mas como esse curso está no programa de economia não faz muito sentido ficar explorando isso. Adicionalmente, como já mencionado, se o estudante aprende bem as partes I e II do curso, ele terá habilidade de lidar com qualquer tópico considerado em aqui. Além disso, as técnicas utilizadas para replicar os exemplos do Wooldridge em Python são triviais se você aprender o conteúdo do curso.

Qual a linguagem que será usada no curso?

De uma forma geral o curso não deve focar em nenhuma linguagem específica. Entretanto, nesse semestre a maioria dos exemplos será em Python, embora você pode encontrar exemplos em R, Matlab, C++, Java desenvolvidos em versões anteriores do curso. A maioria dos exercícios da primeira parte não dependerá especificamente de nenhuma linguagem. Alguns exercícios só poderão ser implementados em Python.

Quais os pre-requisitos para o curso?

Não temos pre-requisitos específicos, mas vários tópicos dependem de conhecimentos de Álgebra-Linear, Otimização e maturidade em matemática, estatística ou econometria equivalente a de um aluno de mestrado em economia de um bom programa.


FROM THE BOTTOM OF MY HEART (o pre-requisito mais importante):

De fato, um pre-requisito fundamental em qualquer curso que leciono é muita disposição para aprender e lidar com coisas novas para resolver novos problemas. Os estudantes devem ter ou desenvolver a capacidade de lidar com um problema novo que estende o material em sala de aula sem a ajuda do professor, tendo em mãos apenas as referências básicas. Essa habilidade muito comum em estudantes da engenharia infelizmente não é muito explorada em estudantes de economia.

Deixar a arrogância em casa para ser capaz de perceber que não sabemos tudo e que existem sempre pessoas com mais conhecimento em um determinado tópico que nós mesmos. Aproveitar desse fato para aprender com os colegas e com o professor àquelas dimensões mais restritas.

Esse é um curso OPTATIVO e lúdico desenhado para o estudante e o professor se divertirem. Se você não está muito motivado com o curso ou acha que o curso não o acrescentará muito e você pretende manter uma atitude negativa e passiva ao longo do curso, existem dezenas de cursos mais adequados para você no programa.

Não sou aluno do Programa de Doutorado em Economia. Eu posso fazer o curso?

Sim. Você pode entrar em contato com a secretária do Programa de Pós-Graduação em Economia da UnB e verificar a disponibilidade de vagas para matrícula como aluno especial.

Posso assistir como ouvinte?

Infelizmente a UnB não permite esse tipo de aluno.


HORÁRIO: TERÇAS E QUINTAS 10 AS 12