domingo, 28 de outubro de 2012

Regressão Logística em R

Olá pessoal, tudo certo? Já faz um tempo que não posto nada, mas a partir deste mês pretendo escrever com maior frequência. No post de hoje vamos falar um pouco sobre regressão logística, uma técnica bastante popular e sútil do ponto de vista teórico.

Em Janeiro de 1986 o mundo inteiro acompanhou o desastre no lançamento do ônibus espacial Challenger, que causou a morte dos sete tripulantes. Posteriormente, uma falha dos anéis de vedação (no tanque externo de combustível sólido) foi apontada como a causa do desastre. Como exemplo vamos usar os dados de Temperatura x Falha do anél O-ring, que estavam disponíveis antes da tragédia.

segunda-feira, 25 de junho de 2012

k-means clustering com R e ggplot2

Olá pessoal, tudo bem? Neste post vamos falar um pouco sobre análise de clusters, uma técnica bastante poderosa e que possui aplicações nos mais diversos campos: biologia, medicina, marketing, para citar alguns. Nossa tarefa consiste em classificar um grupo de países em 3 categorias distintas (desenvolvidos, emergentes e subdesenvolvidos), analisando uma tabela contendo indicadores socio-econômicos para cada país. Ah sim, usaremos R para a análise!

terça-feira, 24 de abril de 2012

Gráficos com R e ggplot2

Olá pessoal, tudo certo? No post de hoje vamos fugir um pouco dos algoritmos e dar uma olhada em algo bastante importante para quem lida com análise de dados e estatística: como criar gráficos complexos e bonitos, de maneira rápida e fácil? A resposta: usando Linguagem R e o pacote ggplot2!

Como comentado no post sobre Tetris e algoritmos genéticos, R é uma linguagem de programação open source voltada para análise estatística e gráfica, sendo hoje em dia bastante utilizada por diversas empresas, incluindo Google, Pfizer, Merck, Bank of America, Shell, entre outras.

segunda-feira, 9 de abril de 2012

Computer art - parte 2

No post anterior implementamos o framework básico que nos permite aplicar o algoritmo a qualquer problema. O desafio agora é encontrar uma maneira de 'traduzir' um vetor de polígonos (nossa aproximação da imagem) em um cromossomo, e implementar um método getFitness que nos diga a qualidade de nossa aproximação. Antes disso vamos definir algumas classes utilitárias para nos auxiliar com as imagens e com a configuração de parâmetros.

sexta-feira, 30 de março de 2012

Computer art - parte 1

Olá pessoal, tudo certo? No post de hoje temos um desafio interessante para um algoritmo evolucionário: dado uma determinada imagem e um número fixo de polígonos semi-transparentes, será que conseguimos aproximar a imagem de maneira satisfatória, em um tempo razoável? Como você deve ter adivinhado, a resposta é sim, podemos! Observe as imagens abaixo:

Após 2386 gerações:

Após 17451 gerações:

Após 121076 gerações:

Imagem original:

Nas imagens acima vemos que mesmo com poucas gerações, obtemos bons resultados. Por exemplo, a imagem do centro (linha 2, coluna 2) foi formada em 8094 gerações, tomando pouco mais de 5 minutos de execução no meu MacBook Pro (2.4 GHz, 4 GB). Neste post vou mostrar como fazer isso da maneira mais simples possível, então mãos a obra!

sexta-feira, 9 de março de 2012

Othello e Minimax com poda alpha beta - parte 2

No post anterior criamos o framework básico do game e vimos (de forma bem simplificada) alguns conceitos sobre o Minimax. Neste post vamos colocar esses conceitos em prática, além de utilizar poda alfa - beta e ordenação de lances para melhorar o desempenho da engine, fundamental caso você esteja desenvolvendo para alguma plataforma mobile.

terça-feira, 6 de março de 2012

Othello e Minimax com poda alpha beta - parte 1

Olá pesssoal, tudo bem? Nesse post vamos aplicar o famoso Minimax com poda alfa-beta, um dos meus algoritmos preferidos. Como aplicação, não queria escolher algo tão simples como Tic-Tac-Toe, nem tão complexo como xadrez. Foi aí que eu descobri o jogo Othello, também conhecido como Reversi.

Nosso objetivo é criar uma engine simples, mas que jogue de maneira convincente. O interessante no Othello é que o jogo ainda não foi 'resolvido' computacionalmente, pelo menos no tabuleiro padrão 8 x 8. Além disso é extremamente simples de aprender, e as estratégias básicas são fáceis de codificar. Caso não conheça o jogo, visite o link acima e tente algumas applets, depois volte aqui!