Páginas

Saturday, November 20, 2010

Criando uma conta no Twitter

Tem sido difícil tirar um tempinho para blogar. Estes dias estou lendo um livro que o Israel me emprestou, e finalmente de alguma forma me convenci a criar uma conta no Twitter. Não para ficar perdendo meu tempo falando onde estou, ou que a pizza chegou atrasada, ou que isso ou aquilo. O interesse é apenas "educacional", já que a plataforma é de fato interessante.

É claro, entrar no jogo nesta altura do campeonato não é nada fácil... Opções como "rhcarvalho" ou "rodolfocarvalho" já foram tomadas meses ou anos atrás. E já que iria ficar com um nome de usuário pouco significativo, resolvi que este nome deveria ser curto.

Foi fácil perceber que todos os nomes com apenas 1 caracter já existiam. Com exceção do "i", mas mesmo assim não consegui criar um conta com o nome de usuário "i".

Ontem acabei desistindo de criar a tal conta. E hoje, sábado, escrevi um pequeno script em python para verificar todos os nomes possíveis com 2 ou 3 letras que ainda estivessem disponíveis.

Descobri que nada seria possível com 2 letras, e existiam 3112 opções com 3 letras. Destas, 1 era composta apenas por dígitos, e 5 eram compostas apenas por letras.
As contas compostas apenas por letras eram: ['xjv', 'txp', 'dzz', 'qfw', 'hqc']
Destas, nenhuma me interessa...

Mas o número... o número com 3 dígitos é a minha nova conta no Twitter! @201

201 é um número bacana!

Quanto ao script, usei meu conhecimento adquirido com web crawling multithread para viabilizar um "ataque de força bruta" a API do Twitter usada na verificação de disponibilidades de nomes.

Saturday, October 16, 2010

Aprendizado de máquina

Curso da Faculdade de Engenharia de Standford sobre Aprendizado de Máquina:

http://see.stanford.edu/see/lecturelist.aspx?coll=348ca38a-3a6d-4052-937d-cb017338d7b1

É possível aprender com os dados?

Tudo começou com a leitura de um post num blog, sobre Online Learning [1], sugestão de um amigo do estágio.
Nos comentários tinha um link para um site com vídeo aulas [2].
Chegando lá, já no primeiro link no topo da página [3] me interessei e comecei a assistir uma aula de uma hora sobre aprendizado semi-supervisionado.

Existem métodos de inferir/formular modelos a partir de um conjunto de dados no qual temos como entrada pares de entrada+saída. São os chamados métodos supervisionados.
Por exemplo, podemos ter como entrada 1000 emails e saber se cada um deles é um spam ou não.

Seria interessante agora inferir coisas a partir dos dados não classificados, classificação não-supervisionada.
Este é o caso quando queremos por exemplo encontrar grupos através de uma função de similaridade.

O aprendizado semi-supervisionado é quando temos alguns dados classificados, e outros não classificados. Ou seja, temos 1000 emails que sabemos distinguir entre spam e não-spam, mais digamos 9000 emails que não sabemos a classificação.

Esses 9000 emails podem ajudar substancialmente a desenvolver um modelo que dado um novo email ele seja classificado corretamente como spam ou não-spam.
Na aula são mostradas duas categorias de problemas, e que tipo de conjunto de dados funcionam bem usando as técnicas apresentadas.
  • Expectation Maximization (EM) [4]
  • Co-training [5]
Essas técnicas me deram uma idéia de como posso classificar tweets como positivos ou negativos a respeito de algum candidato nas eleições 2010 [6], bastando ter algumas amostras de mensagens classificadas positivamente e outras classificadas negativamente.

Fica a sugestão a todos para visitar o videolectures.net e passar algumas horas assistindo a aulas muito interessantes.


[1] http://mark.reid.name/sap/online-learning-in-clojure.html
[2] http://videolectures.net
[3] http://videolectures.net/mlas06_mitchell_sla/
[4] http://en.wikipedia.org/wiki/Expectation-maximization_algorithm
[5] http://en.wikipedia.org/wiki/Co-training
[6] http://www.eleitorando.com.br

Friday, October 8, 2010

Dicionários recursivos

Só por curiosidade, alguém além de mim já fez isso aqui?

Digite no seu interpretador de Python:

d = dict()
d['d'] = d
d
d['d']
d['d']['d']
d = dict()
e = dict()
d['e'] = e
d
e['d'] = d
e
d
d['e']['e']
d['e']['d']



É bem interessante ver:
In [17]: d['e']['d']
Out[17]: {'e': {'d': <Recursion on dict with id=4321969824>}

Tuesday, September 21, 2010

De volta ao Brasil, e de volta a ativa...

Depois de 11 meses em Portugal e 1,5 no Brasil como guia turístico, estou de volta.
Ontem comecei a trabalhar na Intelie, que certamente será fonte de grande aprendizado e diversão.

Na universidade (UFRJ) estou fazendo disciplinas interessantes, e pretendo fazer alguns posts sobre elas.

Também estou de volta ao DojoRio, evento que dei início e participei sempre até minha ida para o exterior.
E o dojo me trouxe muita satisfação. Ele cresceu para além de minhas expectativas, vários amigos estão fazendo palestras sobre o mesmo, e outras pessoas tem nos seguido e iniciado outros dojos pelo Brasil (e também pelo Rio, onde tivemos uma grande multiplicação).

Amanhã estarei lá na Lapa para mais um! O endereço é Rua Teotônio Regadas 26 sala 603 - Lapa, ao lado da Sala Cecília Meireles, próximo ao Metrô.