sábado, 10 de janeiro de 2015

Ferramentas abertas para aprendizado de máquina podem facilitar adoção

Projetos de aprendizado de máquinas vem à reboque do barateamento de hardware e da proliferação de softwares livres que exploram recursos do conceito.

Filtros de spam, reconhecimento facial, motores de recomendação. Quando se tem um grande volume de dados capazes de alimentar sistemas preditivos ou reconhecer padrões, usar esse recurso em projetos de aprendizado de máquinas (machine learning) pode ser um ótimo caminho a seguir. 
Essa ciência, no qual os computadores são treinados a aprender, analisar e agir sobre registros ganha cada vez mais relevância no mercado, especialmente dentro do mundo acadêmico e em círculos de programadores de alta performance. 
O aumento da popularidade vem à reboque não só do barateamento de hardware, mas da proliferação de software livres que exploram recursos direcionados ao machine learning. A seguir, apresentamos 11 ferramentas capazes de fornecer funcionalidades tanto para aplicativos individuais quanto para estruturas inteiras. Confira.  

Scikit-learn

Python se transformou em uma ótima linguagem de programação com recursos de matemática, ciências e estatística devido a sua facilidade de adoção e amplitude de bibliotecas disponíveis, que permite que seja usado para criação de praticamente qualquer aplicação. Os níveis de aprendizagem do Schikit possibilitam construir soluções sobre pacotes existentes em Python – como NumPy, SciPy e matplotlib. 
As bibliotecas resultados podem ser usadas para aplicações interativas em uma “bancada de trabalho” ou serem incorporadas em outros softwares, com reutilização. O kit está disponível por meio de uma licença BSD, totalmente aberta e reutilizável. 
Projeto: scikit-learn  
GitHub: https://github.com/scikit-learn/scikit-learn


Shogun

Entre as mais antigas e veneráveis bibliotecas de aprendizado de máquina está o Shogun, que nasceu em 1999 escrito em C++, mas que já não se limita apenas a trabalhar em C++ . Graças à biblioteca SWIG, a ferramenta pode ser usada de forma transparente em linguagens e ambientes como Java, Python, C#, Ruby, R, Lua, Octave e Matlab.
O Shogun tem um concorrente também em C++, a biblioteca baseada em machine learning, Mlpack, que ganhou espaço a partir de 2011 e que traz vantagens de ser mais rápida e fácil de trabalhar (pois carrega um conjunto mais integral de APIs) frente a seus competidores. 
Projeto: Shogun 
GitHub: https://github.com/shogun-toolbox/shogun


Accord Framework/AForge.net

O Accord, um framework para aprendizado de máquinas e processamento de sinais em .Net é uma extensão de um projeto prévio com o mesmo intuito, o AForge.net. A propósito, “signal processing” se refere a uma gama de algoritmos de aprendizado de máquinas para imagens e áudio que pode ser aplicado para questões como reconhecimento facial, por exemplo. 
GitHub: https://github.com/accord-net/framework/


Mahout

Trata-se de um framework alinhado ao Hadoop, mas muitos dos algoritmos sob o seu guarda-chuva pode também rodar fora disso. É bastante útil para aplicações stand-alone e, eventualmente, pode ser migrado dentro e para projetos em Hadoop. 
ProjetoMahout 

MLlib
Própria biblioteca de aprendizado de máquina do Apache para Spark e Hadoop, o MLlib possui uma gama de algoritmos comuns e tipos de dados úteis destinados a funcionar em grande velocidade e escala. Como seria de esperar com qualquer projeto Hadoop, Java é a linguagem primária para trabalhar na ferramenta, mas os usuários podem se conectar a Python MLlib através da biblioteca NumPy (também usado em Scikit), e os usuários Scala podem escrever códigos contra o MLlib. Se a criação de um cluster Hadoop é impraticável, o MLlib pode ser implantado em cima do Spark sem Hadoop - e no EC2 ou no Mesos.
Outro projeto é o MLbase, construído em cima de MLlib para torná-lo mais simples na obtenção de obter resultados. Ao invés de escrever o código, os usuários fazem consultas por meio de uma linguagem declarativa à la SQL.
ProjetoMLlib 

H2O
Algoritmos de H2O do 0xdata são voltados para processos de negócios – de previsões de fraude ou de tendência, por exemplo. O H2O pode interagir de forma independente com lojas HDFS, em cima de YARN, MapReduce ou diretamente em uma instância do Amazon EC2. Especialistas em Hadoop podem usar Java para interagir com a ferramenta, mas a estrutura também fornece ligações para Python, R e Scala, proporcionando integração cruzada com todas as bibliotecas disponíveis nessas plataformas também.
Projeto: H20 
GitHub: https://github.com/0xdata/h2o


Cloudera Oryx
Outro projeto de aprendizagem máquina projetado para Hadoop, o Oryx vem como uma espécie de cortesia dos criadores da distribuição Cloudera Hadoop. O nome no rótulo não é o único detalhe que define a ferramenta, que enfatiza na análise de dados em tempo real por meio do projeto Spark e é projetado para permitir que modelos de aprendizado de máquina possam ser implantados em transmissões de informações “ao vivo”, como filtros de spam ou mecanismos de recomendação. Uma nova versão do projeto encontra-se em obras. 
Projeto: Cloudera Oryx 
GitHub: https://github.com/cloudera/oryx


GoLearn
A linguagem Go, do Google, está no ar faz cerca de cinco anos. Apesar da vida ainda curta, já desfruta uma utilização ampla e tem uma evolução constante em suas bibliotecas. O GoLearn foi criado com a ambição de ser uma biblioteca que reúne tudo de aprendizado de máquinas na plataforma da gigante de buscas. A ideia geral é que seja uma maneira simples de tratar o carregamento e manipulação dos dados na biblioteca. 
Projeto: GoLearn 
GitHub: https://github.com/sjwhitworth/golearn


Weka
Produto da Universidade neozelandesa de Waikato, o Weka reúne um conjunto de algoritmos de aprendizado de máquina Java projetados especificamente para mineração de dados. Esta coleção com licenciamento GNU GPLv3 tem um sistema de pacotes para estender sua funcionalidade. Weka vem com um livro para explicar tanto o software e quanto as técnicas utilizadas, que pode ser um bom ponto de partida aos que querem se aventurar nessa ferramenta. 
Apesar de não ser voltado especificamente, pode ser usado com Hadoop graças a um conjunto de wrappers produzidos para as versões mais recentes do Weka. Note-se que ainda não suporta Spark, só o MapReduc.
ProjetoWeka 

CUDA-Convnet
Quase todo mundo sabe como GPUs (sigla para unidade de processamento gráfico) podem mastigar certos problemas de maneira mais veloz do que CPUs. Mas os aplicativos não levam automaticamente a vantagem da aceleração GPU. Aliás, eles têm que ser escritos com formas específicas para que isso ocorra. O CUDA-Convnet é uma biblioteca de aprendizado de máquina para aplicações de rede neural escrito em C++ para explorar a tecnologia CUDA de processamento de GPU da Nvidia (placas de, pelo menos, a geração Fermi são obrigatórios). Para aqueles que usam Python em vez de C++, as redes neurais resultantes podem ser salvos como objetos Python em conserva e, assim, acessado a partir de Python. Note que a versão original do projeto não está mais sendo desenvolvida, mas desde que foi reformulado em um sucessor, CUDA-Convnet2 (com suporte para múltiplas GPUs). 
ProjetoCUDA-Convnet 

ConvNetJS
Como o nome indica, ConvNetJS fornece bibliotecas de aprendizado de máquina de rede neural para uso em JavaScript o que facilita o uso do navegador como uma bancada de dados. Uma versão NPM também está disponível para aqueles que utilizam Node.js e a biblioteca é projetada para fazer uso adequado de assincronia de JavaScript - por exemplo, operações de treinamento podem executar retornos de chamadas, 
Projeto: ConvNetJS 
GitHub: https://github.com/karpathy/convnetjs

(CIO)