Prediction Assignment – Practical Machine Learning

novembro 11, 2016 § Deixe um comentário

To those whom are eager to know more about Machine Learning and how it goes in a real life work, I share a paper I wrote with analysis, codes and algorithms of a Machine Learning Prediction Assignment. I wrote the codes in R, which is a statistical programming language. I also would like to thank PUC-Rio for providing the dataset that I worked.

Executive Summary

Using devices such as Jawbone Up, Nike FuelBand, and Fitbit it is now possible to collect a large amount of data about personal activity relatively inexpensively. These type of devices are part of the quantified self movement – a group of enthusiasts who take measurements about themselves regularly to improve their health, to find patterns in their behavior, or because they are tech geeks. One thing that people regularly do is quantify how much of a particular activity they do, but they rarely quantify how well they do it. In this project, your goal will be to use data from accelerometers on the belt, forearm, arm, and dumbell of 6 participants. They were asked to perform barbell lifts correctly and incorrectly in 5 different ways.

Data source

The data for this project came from the Human Activity Recognition study, conducted by Pontifícia Universidade Católica – Rio de Janeiro.

Ugulino, W.; Cardador, D.; Vega, K.; Velloso, E.; Milidiu, R.; Fuks, H. Wearable Computing: Accelerometers’ Data Classification of Body Postures and Movements. Proceedings of 21st Brazilian Symposium on Artificial Intelligence. Advances in Artificial Intelligence – SBIA 2012. In: Lecture Notes in Computer Science. , pp. 52-61. Curitiba, PR: Springer Berlin / Heidelberg, 2012. ISBN 978-3-642-34458-9. DOI: 10.1007/978-3-642-34459-6_6.

The paper

It can be accessed at:

http://rpubs.com/marcelo_tibau/226219

A programação é a nova alfabetização

maio 17, 2016 § Deixe um comentário

new-literacy.png

Este mês, completa um ano que comecei a programar. Meu início foi com uma das linguagens mais populares, Ruby, em um ambiente de desenvolvimento online chamado Cloud9. Nestes 12 meses, passei por outras linguagens (Python, outra preferida dos programadores) e montei meu próprio ambiente de programação local (quer dizer, em meu computador). Hoje estou “envolvido” com a linguagem R (é uma linguagem de programação estatística, usada bastante em Data Science).

Neste “meio tempo”, “devorei” o que encontrei pela frente em termos de conceitos, referências (livros, vídeos e pessoas) e filosofias para definir o meu próprio entendimento sobre o assunto. Quem se interessar, ou invés de começar por algum livro, manual técnico ou então por raciocínio lógico e lógica de programação, sugiro se inteirar em relação às filosofias que envolvem a programação computacional. Um livrinho bem bacana neste sentido é o do autor Douglas Rushkoff, professor de teoria da economia digital da City University of New York, “Program or Be Programmed”.

Quando se diz que a programação é a nova alfabetização, não se está insinuando que ela deva substituir o que chamamos de alfabetização hoje, mas sim se incluir no conceito. Não se engane, alfabetização é um conceito, que envolve as habilidades básicas que todo ser-humano deveria dominar para se inserir na sua sociedade.

Este conceito vem sendo desenvolvido desde o século XII, quando a habilidade da leitura começou a ganhar importância. No século XVI, recebeu a companhia da escrita e criou a base do modelo mental que temos de alfabetização. Mas como todo conceito, evolui. No século XVIII recebeu a adição da aritmética e no século XX, a da habilitação automotiva (sim, a carteira de motorista tem este status em boa parte dos países do mundo). No século XXI, chegou a vez da programação computacional ser incluída neste entendimento.

John McCarthy, o inventor da linguagem Lisp e a pessoa que cunhou o termo “Inteligência Artificial”, dizia que uma pessoa deveria aprender a programar para poder “falar com os servos”. Apesar do termo politicamente incorreto, McCarthy se referia ao fato de cada vez mais os seres-humanos gerenciarem máquinas (os “servos”) e as máquinas, ainda hoje, só conseguem fazer o seu trabalho se o ser-humano disser, especificamente, o que e como elas devem fazer. É preciso dar instruções claras. A maneira de se fazer isto, é pela programação computacional.

Desta forma, programar não é mais uma habilidade-nicho (que apenas uma determinada profissão conhece), é uma habilidade essencial para qualquer pessoa com ambição em obter sucesso. É tão importante, que várias organizações se propõe a ensinar programação básica de graça. CodeAcademy, edX e Free Code Camp são alguns exemplos. Vários cursos básicos já são oferecidos em português, graças ao trabalho voluntário de algumas pessoas, mas a maioria dos gratuitos ainda é em inglês.

É claro que aprender a programar não é simples. Há inúmeras dificuldades – principalmente se quem estiver aprendendo já vier com uma baixa formação em matemática e raciocínio lógico – mas se alfabetizar não é simples. É sabido que algumas condições podem se somar aos obstáculos comuns que todo aprendizado traz, por exemplo, dislexia dificulta o aprendizado da leitura e discalculia torna o aprendizado matemático muito mais penoso. Mas é importante deixar claro, que é cada vez mais consenso entre educadores e cientistas cognitivos, que qualquer pessoa que esteja no domínio de suas faculdades mentais, pode aprender a programar – assim como pode aprender a ler, a escrever, a fazer conta e a dirigir. A Khan Academy disponibiliza um vídeo sobre a importância de se manter uma mentalidade de crescimento, essencial para aprender qualquer coisa.

Não se propõe que todo mundo vire desenvolvedor de softwares. O fato de alguém aprender a escrever, por exemplo, não significa que a pessoa se tornará uma escritora ou alguém que aprenda aritmética se tornará um matemático profissional. Mas todos que sabem escrever ou conhecem aritmética, se tornam mais habilidosos para caminharem pelas próprias pernas na “luta” pelo pão de cada dia.

Minha experiência neste último ano me mostrou coisas novas, coisas que havia esquecido e principalmente, me possibilitou começar a desenvolver uma habilidade que nunca considerei que pudesse me trazer tanto conhecimento. Meu conselho é: aprenda a programar, aprenda a falar com as máquinas, você não vai se arrepender.

Obama, programação e robótica

fevereiro 2, 2016 § Deixe um comentário

obama_state_of_the_union2.jpg

Em janeiro último, o presidente Obama fez o seu discurso final ao congresso americano. É uma prática centenária chamada “State of the Union”, em que o mandatário do poder executivo presta contas aos poderes legislativo e judiciário e compartilha o planejamento para o ano corrente. Em um dos tópicos, Obama verbalizou a importância em “ajudar os estudantes a aprenderem a escrever códigos para computadores”. Ao se comunicar diretamente com estudantes em um evento posterior, o presidente americano os instigou a “dominar as ferramentas e tecnologias que irão mudar tudo o que conhecemos”.

Obama está certo. Não apenas estudantes, mas todos nós, deveríamos mudar o foco de recebedores passivos de tecnologia para criadores ativos de programas, aplicativos, invenções tecnológicas, etc. Esta mudança de atitude, mais do que uma “corrida” tecnológica, significa adequar a forma de pensar para uma mentalidade dinâmica, em que se destaca a “nutrição” do pensamento com conhecimentos abrangentes e a imaginação para melhorar criativamente a comunidade a nossa volta. A “criação” de tecnologia é apenas um condutor (não o único) para esta energia. É bem verdade que é um condutor altamente eficaz, o que leva o presidente dos EUA a “fazer campanha” a seu favor.

Apesar do custo ser apontado como um inviabilizador da iniciativa de se promover uma distribuição coletiva deste tipo de conhecimento, algumas alternativas, como o uso de conhecimentos do tipo acesso livre (open access), ajuda a mitigá-los. Opções como Khan Academy e Code.org já oferecem seus conteúdos em diversas línguas, inclusive o português. São gratuitos (para educadores, estudantes e pais), oferecem incentivos motivacionais e atraem os mais novos com gráficos altamente coloridos e interfaces que usam personagens conhecidos de videogames e temas “lúdicos” como zumbis. Sites como estes representam o primeiro passo para introduzir o coding (como a programação de computadores vem sendo chamada) na vida de um leigo.

O passo seguinte para atingir o que Obama sugeriu (“dominar as ferramentas e tecnologias que irão mudar tudo o que conhecemos”) é a robótica. Instituições e ferramentas destinadas a popularizar o conhecimento e o aprendizado de robótica como Sphero, Wonder Workshop e Lego Mindstorms – apesar de estarem por enquanto disponíveis apenas em inglês, não são empecilho para quem tem algum conhecimento na língua (mesmo em nível escolar) e disposição para aprender. Estas opções para o aprendizado em robótica demonstram que não é necessário montar um laboratório caríssimo do nível do M.I.T. para colocar a “mão na massa”. A robótica “promove” quem conhece coding, da interface solitária de uma tela de computador para uma comunidade social ativa.

Agora que vimos “como” o apelo do Obama pode ser colocado em prática, proponho analisar “porque” ele deve ser colocado em prática. Fugindo de viés social ou econômico – que também podem ser usados para justificá-lo – pretendo focar no viés cognitivo. Afinal, como dizem, preparo educacional e inteligência são algo que nenhuma crise econômica tira de uma pessoa.

Ponto 1: aprendizado sensorial

Seres humanos aprendem utilizando todos os seus sentidos. Alguns pesquisadores têm se esforçado para demonstrar que uma abordagem multissensorial ativa um número maior de conexões cognitivas do que a abordagem tradicional, focada no audiovisual. Programação e robótica atuam neste sentido, encorajando quem as aprende a tocar, construir, medir, avaliar e testar o que fazem. Isto envolve emocionalmente e fisicamente quem aprende, estimulando o aumento de conexões neurais que resultam em um aprendizado ativo e reforçam, pela experiência, a memória de longo prazo.

Ponto 2: melhora da socialização

Aprendizado pela socialização não é nada novo. Lá nos anos 1970, Albert Bandura estabeleceu a teoria mais conhecida da aprendizagem por socialização, que estimulava as pessoas a aprendem umas com as outras, através da observação, imitação e criação de modelos. Esta linha de pensamento é ainda relevante hoje, quando observamos o crescimento da comunicação e colaboração como habilidades críticas para o sucesso profissional. Estratégias para aprendizagem que utilizam como ferramentas a programação computacional e a robótica, além de oferecerem oportunidades de socialização, estimulam o desenvolvimento da habilidade de escutar e avaliar perspectivas alternativas (em um mundo que parece se radicalizar pelos extremos – tanto em uma linha conservadora quanto liberal – esta habilidade pode ser essencial para evitar que explodamos uns aos outros no futuro).

Ponto 3: oportunidade para promover inovação ao alcance das mãos

Em um livro que recomendo bastante, Daniel H. Pink, autor de obras lidas por interessados em administração de empresas, teoriza que nestes anos iniciais do século XXI temos testemunhado uma mudança de mentalidade que irá “pavimentar” o caminho para o restante do século (os 84 anos que ainda temos pela frente). Neste “novo mundo”, o MFA (Master in Fine Arts) irá substituir o MBA (Master in Business Administration) em importância. A questão que Pink aborda, é que não basta “gerenciar” para estimular a inovação. É necessário ter disponível as habilidades criativas para tal.  Embora criatividade e pensamento inovador não possam ser automatizados em um programa de computador, o raciocínio lógico que a programação computacional se nutre também estimula oportunidades de construir e expressar a imaginação. Associadas à robótica, estas oportunidades se potencializam.

Ponto 4: aumento do rigor intelectual

Os níveis mais altos da Taxonomia de Bloom (criada pelo psicólogo Benjamin Bloom em 1956) são as capacidades de aplicação, análise, síntese e avaliação. Ao atingir este ápice de pensamento, a pessoa adquire a capacidade de visualizar maneiras viáveis (e novas) de aplicar seu conhecimento. Programação computacional e robótica permite transformar fatos e ideias em “blocos” que podem ser usados para “construir” aplicativos, produtos e invenções. Os 84 anos que temos adiante irão demandar um alto nível de pensamento para enfrentarmos os desafios que nos aguardam. Por que não utilizar “caminhos” que ajudem atingirmos este nível com mais facilidade?

O desejo de criar não é nada novo na história da humanidade. A combinação de corações, mentes e corpos sempre contribuiu para a melhoria do mundo – especialmente após o iluminismo do século XVIII. Mas, me pergunto se estamos nos preparando adequadamente para valorizar nossa criatividade e aumentar nossa possibilidade de criação. Obama está deixando o seu cargo, mas tocou em um ponto fundamental não apenas para americanos, mas para o restante do mundo. Vale a pena ouvir.

 

Onde estou?

Você está navegando em publicações marcadas com coding em Marcelo Tibau.