Arquivo da Categoria ‘PHP’

Filtros Bayesianos – parte 1

quarta-feira, 4 de novembro de 2009

Eu perguntei se alguem ia ler, e uns gatos pingados no twitter me disseram que sim, então vou escrever :)

Vou falar hoje sobre a possiblidade de classificaçnao de conteudo usando os filtros bayesianos.

Primeiramente gostaria de dizer que ele eh facil de implementar, veja definicao dele abaixo:

Pr(A |B) =Pr(B|A) x Pr(A)/Pr(B)

Bem, se voce nao fechou o browser apos o que leu acima quer dizer que estamos prontos para ver isso, juntos, ja que tanto quanto voce eu gosto do assunto, mas nao sou expert nele, e essas coisas eu aprendi pelo prazer de ver como funcionam(e saber que realmente funcionam).

Quem ja tomou uma cerveja comigo sabe que apos um certo numero de garragas/latinhas eu começo a divagar sempre sobre um assunto recorrente, algoritmos, algoritmos, algoritmos…(sim eu sou nerd e falo de programacao quando bebo)

E aqui temos um exemplo muito bonito de um algoritmo que apesar de simples, cumpre sua missão. Sua dificuldade esta no entendimento da teoria matematima que nele se encerra.

Uma das tarefas que os seres humanos mais praticam é classificar aquilo com que tem contato. Classificamos livros(romance, ficção, auto-ajuda…), música(rock, metal, punk, industrial, classica…)e tudo o mais que vemos pela frente, ate algoritmos, através dos padrões de projeto. Fazemos isso para facilitar nossa vida, afinal, categorizamos nossos gostos e podemos dar atenção a aquilo que nos interessa, sem nos perder no mar de informação que é gerado e apresentado diariamente.

Inicialmente, criamos o habito de classificar de acordo com o feeling, fazendo com que por exemplo, ao olharmos para uma pessoa tenhamos certeza de que ela não é uma pessoa legal, baseado numa sensação criada por um gesto, uma fala ou alguma outra coisa significante que ja notamos em alguem que pertencia a categoria dos “não legais”.

Depois, se a gente começa a ficar mais interessado em classificar as coisas, e sempre ficamos, passamos a usar um esquema de pontos: O burger King é melhor que o Mac Donald’s por que nele os lanches tem sabor(1 pt), tem o mesmo tamanho apresentado na foto(mais 1 ponto), o atendimento é melhor(outro ponto) e assim vai. Quanto mais pontos com relação ao outro, melhor.

Veja que nos dois apresentados acima temos situações onde a interação humana com o objeto classificado foi necessaria.

Porém, existem coisas que podem ser automatizadas e que podem ajudar nos humanos a resolver problema do dia-a-dia que de outra forma tomariam muito do nosso tempo.

Uma forma de automatizar essa classificação é através dos filtros bayesianos.

Como primeiro exemplo, vamos usar o classico de descobrir se uma mensagem é spam ou não.

Uma mensagem de e-mail é spam a partir do momento que ela é indesejada, correto. Ela é uma mensagem não solicitada que aparece na nossa caixa de e-mail e faz a gente perder um tempo batendo o olho e sacando que ela é spam ou abrindo ela para ver se tem algo importante ali. No final das contas, se fosse uma por dia, vá lá, a gente suportava, mas são muitas e fazem a leitura de e-mail ser uma tarefa penosa… fazem a gente perder tempo com coisas que não nos interessam de forma alguma.

Ai vem a sacada, podemos olhar as mensagem e classifica-las em spam e candidatas a leitura, logo, a gente pode escrever algo que ajude a fazer isso automaticamente.

Esse é um filtro que precisa ser treinado e para treinar vamos precisar de exemplos.

Vamos pegar cem e-mails que são spam, que a gente leu e confirmou que eram, e vamos pegar outros 100 que são bons para leitura.

No total temos entao 200 emails com 50% em cada categoria. A boa e a ruin(spam).

vejamos algumas palavras que apareceram em cada uma das categorias

ruim:

  • venda
  • viagra
  • remedio
  • cirurgia
  • ajuda
  • vagas
  • curso
  • assinatura
  • faculdade
  • promoção

bom:

  • venda
  • curso
  • assinatura
  • php
  • evento
  • faculdade
  • promoção

Ok, temos algumas palavras que ocorreram em cada uma das categorias que queremos classificar os e-mail que a gente recebe.

O proximo passo é ver quanto elas aparecem em cada uma das categorias. O quanto elas aparecem em cada categoria é a base para a avaliação da probabilidade de uma mensagem estar em uma categoria ou outra.

ruim (100 emails): Pr(palavra | ruim)

  • venda 40 ocorrências 0.4
  • viagra 60 0.6
  • remedio 70 0.7
  • cirurgia 30 0.3
  • ajuda 20 0.2
  • vagas 40 0.4
  • curso 30 0.3
  • assinatura 10 0.1
  • faculdade 5 0.05
  • promoção 50 0.5

bom(100 ocorrências): Pr(palavra | bom)

  • venda 30 ocorrências 0.3
  • curso 40 0.4
  • assinatura 10 0.1
  • php 50 0.5
  • evento 40 0.4
  • faculdade 30 0.3
  • promoção 15 0.15

A terceira coluna representa uma porcentagem de ocorrências das palavras em cada categoria.

Logo, podemos dizer que a palavras venda tem 40% de chance de estar num e-mail ruim(spam) e 30% de chance de estar em um e-mail bom. E isso ja nos diz algumas coisas. Diz que só a palavra venda, nessa amostragem de e-mail, não é uma boa candidata a indicar em que categoria o e-mail esta.

A avaliação que fizemos até aqui diz qual a probabilidade de uma palavra estar em uma categoria, logo, ela nos diz uma parte da equação, que é Pr(B|A). Probablidade de B(palavra) em A(categoria). Isso se chama probabilidade condicional. A probabilidade da palavra viagra na categoria ruim é de 60% e de php na categoria bom é de 50%.

Relembrando que:

Pr(A |B) =Pr(B|A) x Pr(A)/Pr(B)

resolvendo uma parte:

Sendo 100 a probabilidade da categoria (100 emails na categoria ruim, por exemplo)

e 200 a probabilidade do documento(total de email’s)

Pr(A | B) = pr(B|A) X 100 / 200

Digamos que chegou um e-mail na conta e dentro dele tinha somente uma palavra: viagra

Calculando a chance de ser um e-mail ruim

Pr(ruim | viagra) = 0.6 X 100 / 200

Pr(ruim | viagra) = 0.3

Calculando a chance de ser um bom e-mail, digno de leitura :)

Viagra não aparece na categoria “bom”, logo, temos 0% de change desse e-mail ser bom.

Então, que tal tirar esse e-mail da sua caixa de entrada, automaticamente, por que ele não vale seu tempo de atenção?!

Vamos avaliar outro caso: Outro e-mail, algum que tenha chegado com mais palavras, digamos: faculdade, curso, promoção e php. Aqui vai.

Pr(ruim| faculdade & curso & promoção & php) = 0.05 * 0.3 * 0.5 * 100 / 200= 0.00375

Pr(bom | faculdade & curso & promoção & php) = 0.3 * 0.4 * 0.15 * 0.5 * 100 / 200 = 0.0045

Pois é, esse e-mail pode aparecer na sua caixa de entrada, se olharmos o resultado ele esta mais para bom do que ruim.

Algumas observações devem ser feita nesse ponto.

Esta é uma demonstração do teorema de Bayes, mas na implementação existem outras considerações que devemos fazer que não foram incluidas aqui, como o fato de uma palavra, no inicio do treinamento do algoritmo poder ter ocorrido somente uma vez na categoria ruim e isso não poder indicar, de forma alguma, que ela representa somente mensagens ruins. Outro fato seria que o ideal é que um resultado da avaliação de uma categoria para outra tenham uma certa “distância” entre si, para poder garantir que realmente pertence a uma categoria, caso contrario, ainda pode haver dúvidas quanto a classificação. Mais um fato é que esse algoritmo tem se mostrado eficiente para qualificações, mas nao numa amostra tão pequena quanto a usada aqui.

Esse artigo tem continuação, na qual irei codificar o algoritmo na linguagem php, com cobertura das observações feitas acima. O artigo ja esta sendo escrito e vai ser postado, com certeza ate o fim dessa mesma semana pós Latinoware.

Algumas referências usadas aqui:

Livro Inteligência coletiva – toby Segaran (Alta Books)

Matematico Thomas Bayes

Teorema

Probablidade

Probabilidade Condicional

via @ivonascimento http://ianntech.com.br/

Programa de Carreiras de Formação Tecnlógica – IBM e SENAI/SC

quinta-feira, 16 de abril de 2009

IBM – Analista de Suporte Técnico
Local: SENAI/SC – Florianópolis
IBM – Arquiteto de Informação
Local: SENAI/SC – Florianópolis
IBM – Desenvolvedor de Portais Corporativos
Local: SENAI/SC – Florianópolis
IBM – Gerente de Mudança, Configuração e Release (SCM)
Local: SENAI/SC – Florianópolis

ibm

Certificações Top em Tecnologia para 2009

quinta-feira, 19 de março de 2009

“Escrevo aqui uma lista das certificações top em tecnologia para este ano de 2009. Os critérios para escolha foram baseados na relevância do mercado e popularidade discutidas no site About.com.

Como a lista foi baseada em um site internacional, não coloquei o salário estimado como eles fizeram, porque aqui no Brasil a realidade é outra e o salário é bem menor do que o praticado lá fora.

toptechcerts

CCIE: O CCIE sempre está no topo de listas como essas. Muito provavelmente porque somente 26% passam, o que pode ser considerada como a mais difícil de todas as certificações em TI.

CISA: Uma certificação para Auditores de Sistemas, que diferentemente das certificações de mercado com orientação a funcionalidade, que torna-se obsoleta com o tempo, a certificação CISA possui foco às melhores práticas e conhecimentos necessários à eficiência no processo de auditoria de sistemas.

CCSE: O CCSE é a certificação em Segurança mais avançada da CheckPoint. Um CCSE é capaz de, por exemplo, identificar riscos para uma rede, criar um diagrama de rede e definir uma política de segurança.

MCSD: Microsoft Certified Solution Developer (MCSD) é uma certificação para Microsoft .NET, onde desenvolvedores de primeira linha projetam e desenvolvem soluções empresariais com ferramentas de desenvolvimento, tecnologias e plataformas Microsoft e com o Microsoft .NET Framework.

PMP: É um rigoroso Programa de Certificação Profissional desenvolvido e mantido pelo PMI – Project Management Institute. É uma certificação que requer muita experiência e habilidades para obtê-la.

certificationachieveCISSP: Certificações em Segurança estão em alta. Pessoas com a CISSP (Certified Information Systems Security Professional) ganham bem e precisam fazer apenas um exame para tê-la. Obviamente, é preciso alguns anos de experiência.

RHCE: Red Hat Certified Engineer (RHCE) é um teste baseado em desempenho que mensura a competência em sistemas reais. A principal certificação em Linux do mercado, o RHCE comprova as habilidades de configurar os serviços de rede e segurança em sistemas rodando o Red Hat Enterprise Linux. São mais de 5 horas de testes “hands-on”.

SCJP 6.0: Caso tenha vontade de se tornar um programador profissional e se aprofundar nas tecnologias java, essa é a certificação que deve ser adquirida. Com o SCJP, o profissional tem a possibilidade de se desenvolver futuramente nas plataformas JSE, JEE e JME. Ele também pode usar o SCJP 6.0 para as certificações “Oracle Certified Solution Developer” e “Oracle Certified Enterprise Developer”.

CAPM: Criada para ser um intermediário até a obtenção da certificação PMP®, a CAPM é indicada para pessoas que procuram estabelecer e demonstrar uma base comum de conhecimento e termos no campo do gerenciamento de projetos.”

Fonte:  GotchaIT

Adiciona a esta lista três certificações:

- LPI (agora atualizada e com a nova versão 303 – só existe um no Brasil, o meu amigo Leonardo Neves )

- Zend PHP 5 Certification – esta “separa o jóio do trigo”

- Zend Framework Certification – esta certifica que além da sintaxe o programador PHP tem o mínimo de procupação com padrões de projetos e engenharia de software

Aos congressistas da PHPConf2008

sábado, 29 de novembro de 2008

Amigos,

participei do PHPConf expondo um pouco sobre Scrum e XP. Conforme prometi, disponibilizo os slides apresentados aqui

Agilidade: Scrum e Xp
View SlideShare presentation or Upload your own. (tags: phpconf2008 scrum)

Sugiro fortemente que assim que possível participem de um treinamento mais completo sobre as metodologias, e para isso sugiro que acessem o site http://www.innovit.com.br/ e se cadastrem para receber periodicamente o informativo da agenda de workshops e treinamentos desta empresa que é muito bacana e profissional. (inscrevam-se pois não tem uma freqüência elevada de e-mails, com certeza não vão importuná-los).
Nesta empresa procurem por Andrik ou Nikolai, são duas pessoas ótimas para se trabalhar.

Sobre o XP indico também o livro do Vinícius Manhães Teles, da empresa ImproveIT ( http://www.improveit.com.br/ ).

Eu não ganho nada com isso, mas se puderem falar que foi indicação minha eu agradeço, acho que esta é uma forma de demonstrar a eles a minha gratidão pela colaboração que eles tiveram ao ceder boa parte do material.

Outro treinamento bacana onde assisti pela INNOVIT é do Paulo Vasconcellos ( http://www.innovit.com.br/cursos/2008/11/21/formacao-de-analistas-de-negocio.htm )

Agilidade é um conceito muito discutido e em alta no mercado de TI, porém é necessário tomar cuidado, pois existe muita empresa oportunista oferecendo treinamentos na área.

Fico a disposição para qualquer auxílio, e desejo a vocês que possam crescer em suas carreiras, compartilhar seu conhecimento, elevar ainda mais a comunidade do PHP ao profissionalismo, trabalhem buscando qualidade de software e melhoria contínua de processos.
Desejo também que se acharem pertinente, busquem aprimorar seu relacionamento interpessoal, capacidade de extrair informações, de gerir pessoas e criar sempre um ambiente mais agradável, a TI precisa e merece de ambientes melhores.

o endereço do meu blog é: www.fernandocosta.com.br pretendo mantê-lo atualizado sempre, naveguem pelo histórico e sempre que eu deixar de postar, me mandem um email reclamando :)

Um grande abraço.

Certificação PHP

terça-feira, 18 de março de 2008

“Procurei semana passada testes para prova de certificação em PHP da Zend e encontrei alguns na web.Seguem os links:

    Se tiverem outros testes on-line, por favor enviem.”

    Fonte: tossulino.com

Zend Framework 1.5 preview Lançado!

quinta-feira, 7 de fevereiro de 2008

Foi lançado a versão preview 1.5 do ZF. E está com grandes novidades, vamos ver:

  • Novo Zend_Form com suporte para formulários com AJAX
  • Novos actions e helpers com facilidades para AJAX requests e responses
  • Novos recursos para o Lucene
  • Novo Zend_Layout que ajuda na criação de layout
  • Suporte para UTF-8 em PDFs
  • Suporte ao Technorati, SlideShare e outros como serviços
  • Mudanças e soluções de outros problemas

Lembrando que esse release não é para ser usado na produção, apenas em testes pois ainda não está completamente estável.

E aí, o que você gostou dessa nova versão? Já testou? Está estável, bugada?

Faça download agora!

Fonte: Felipe Tonello

53 técnicas essenciais em CSS

terça-feira, 8 de janeiro de 2008

Por indicação do meu amigo André Guilhon (cadê teu blog rapaz?) encaminho a vocês este link, excelente!

http://www.smashingmagazine.com/2007/01/19/53-css-techniques-you-couldnt-live-without/

Arquivos úteis (downloads para certificação)

quarta-feira, 5 de dezembro de 2007

http://idisk.mac.com/leandrogodoy-Public?view=web

outro site bacana:

http://www.oreidasapostilas.com.br

Dica do Guilhon

quinta-feira, 29 de novembro de 2007

Dica de um grande amigo André Guilhon:

http://www.agni.art.br/artigos-1/acessibilidade-web-7-mitos-e-um-equivoco

PHPonTRAX (ou PHP on Rails)

quarta-feira, 14 de novembro de 2007

Ta aí um projeto para quem gostou de Ruby On Rails mas odiou a linguagem Ruby:

http://www.phpontrax.com/

http://www.phpontrax.com/videos/part2-settingup_blog-part1.mov

Toda (ou quase toda) organização e automatização do RoR no PHP!