Sem categoria

Aprendizado de máquina sem esforço com Couchbase e Spark MLlib

Nos últimos anos, notamos como o aprendizado de máquina foi comprovado como uma tecnologia na qual as empresas deveriam investir maciçamente. Você pode encontrar facilmente dezenas de artigos falando sobre como a empresa X economizou muito dinheiro ao adicionar algum nível de IA em seu processo.
Surpreendentemente, ainda percebo que muitos setores são céticos em relação a ele e outros acham que é "legal", mas ainda não têm nada em mente.

Acredito que o motivo dessa dissonância se deve a dois fatores principais: Muitas empresas não têm ideia de como a IA se encaixa em seus negócios e, para a maioria dos desenvolvedores, ela ainda soa como magia negra.

É por isso que eu gostaria de mostrar hoje como você pode começar a usar o aprendizado de máquina com quase nenhum esforço.

Regressão linear

No nível mais básico do aprendizado de máquina, temos algo chamado Regressão Linear, que é basicamente um algoritmo que tenta "explicar" um número atribuindo peso a um conjunto de recursos:

  •  O preço de uma casa pode ser explicado por fatores como tamanho, localização, número de quartos e banheiros.
  •  O preço de um carro pode ser explicado por seu modelo, ano, quilometragem, condição, etc.
  •  O tempo gasto em uma determinada tarefa pode ser previsto pelo número de subtarefas, nível de dificuldade, experiência do funcionário etc

Há muitos casos de uso em que a regressão linear (ou outros tipos de regressão) pode ser usada, mas vamos nos concentrar no primeiro, relacionado a preços de imóveis.

Imagine que estamos administrando uma empresa imobiliária em uma determinada região do país. Como somos uma empresa antiga, há algum registro de dados sobre quais casas foram vendidas no passado e por quanto.

Nesse caso, cada linha em nossos dados históricos terá a seguinte aparência:

 

O problema - Como definir o preço de um imóvel

Agora, imagine que você acabou de entrar na empresa e precisa vender a seguinte casa:

Por quanto você o venderia?

A pergunta acima seria muito desafiadora se você nunca tivesse vendido uma casa semelhante no passado. Felizmente, você tem a ferramenta certa para o trabalho: Uma Regressão Linear.

A resposta - Previsão de preços de imóveis com regressão linear

Antes de prosseguir, você precisará instalar os seguintes itens:

 Carregando o conjunto de dados

Com seu Couchbase Server em execução, acesse o portal administrativo (geralmente em https://127.0.0.1:8091) e crie um novo bucket chamado preços_de_casas

Agora, vamos clonar o código do nosso tutorial:

Na pasta raiz, há um arquivo chamado house_prices_train_data.zipÉ o nosso conjunto de dados, que peguei emprestado de um antigo curso de aprendizado de máquina sobre Coursera. Descompacte-o e execute o seguinte comando:

DICA: Se você não estiver familiarizado com cbimport por favor Confira este tutorial

Se o comando foi executado com êxito, você deve notar que seu preços_de_casas foi preenchido:

Vamos também adicionar rapidamente um índice primário para ele:

Hora de programar!

Nosso ambiente está pronto, é hora de codificar!

No LinearRegressionExample começamos criando o contexto do Spark com nossas credenciais de bucket:

e, em seguida, carregamos todos os dados do banco de dados:

Como o Spark usa uma abordagem preguiçosa, os dados não são carregados até que sejam realmente necessários. Você pode ver claramente a beleza do Conector do Couchbase acima, acabamos de converter um documento JSON em um Dataframe do Spark sem nenhum esforço.

Em outros bancos de dados, por exemplo, seria necessário exportar os dados para um arquivo CSV com alguns formatos específicos, copiá-lo para a máquina, carregá-lo e fazer alguns procedimentos extras para convertê-lo em um dataframe (sem mencionar os casos em que o arquivo gerado é muito grande).

Em um mundo real, você precisaria fazer alguma filtragem em vez de apenas obter todos os dados. Novamente, nosso conector está à sua disposição, pois você pode até mesmo executar algumas consultas N1QL com ele:

DICA: Há vários exemplos de como usar o conector do Couchbase aqui.

Nosso dataframe ainda se parece exatamente com o que tínhamos em nosso banco de dados:

Há dois tipos diferentes de dados aqui, "números escalares", como banheiros e sqft_living e "variáveis categóricas", como código postal e yr_renovated. Essas variáveis categóricas não são apenas números simples, elas têm um significado muito mais profundo, pois descrevem uma propriedade; no caso do CEP, por exemplo, ele representa a localização da casa.

A regressão linear não gosta desse tipo de variável categórica, portanto, se realmente quisermos usar o CEP em nossa regressão linear, pois parece ser um campo relevante para prever o preço de uma casa, teremos que convertê-lo em um variável fictíciaque é um processo bastante simples:

  1. Distingue todos os valores da coluna de destino. Ex:  SELECT DISTINCT(ZIPCODE) FROM HOUSES_PRICES
  2. Converta cada linha em uma coluna. Ex: zipcode_98002, zipcode_98188, zipcode_98059
  3. Atualize essas novas colunas com 1s e 0s de acordo com o valor do conteúdo do CEP:

Ex:

A tabela acima será transformada em:

É isso que estamos fazendo na linha abaixo:

A conversão de variáveis categóricas é um procedimento muito padrão e o Spark já tem alguns utilitários para fazer esse trabalho para você:

OBSERVAÇÃO: O dataframe final não será exatamente igual ao exemplo mostrado acima, pois já está otimizado para evitar o Matriz esparsa problema.

Agora, podemos selecionar os campos que gostaríamos de usar e agrupá-los em um vetor chamado recursospois essa implementação de regressão linear espera um campo chamado rótulotambém temos que renomear o preço coluna :

Você pode brincar com esses recursos, removendo-os/adicionando-os conforme desejar. Mais tarde, você pode tentar, por exemplo, remover o "sqft_living" para ver como o algoritmo tem um desempenho muito pior.

Por fim, usaremos apenas casas em que o preço não é nulo para treinar nosso algoritmo de aprendizado de máquina, pois nosso objetivo é fazer com que nossa regressão linear "aprenda" a prever o preço por meio de um determinado conjunto de recursos.

Aqui é onde a mágica acontece, primeiro dividimos nossos dados em treinamento (80%) e teste (20%), mas, para os fins deste artigo, vamos ignorar os dados de teste e, em seguida, criaremos nossa instância LinearRegression e ajuste nossos dados nele.

O lrModel variável já é um modelo treinado capaz de prever os preços dos imóveis!

Antes de começarmos a fazer previsões, vamos verificar algumas métricas do nosso modelo treinado:

O que você deve se preocupar aqui é chamado RMSE - Root Mean Squared Error (Erro médio quadrático) que, grosso modo, é o desvio médio do que nosso modelo prevê X o preço real vendido.

Em média, erramos o preço real em $147556.0841305963o que não é nada ruim, considerando que quase não fizemos nada engenharia de recursos ou removido quaisquer valores atípicos (algumas casas podem ter preços inexplicavelmente altos ou baixos e isso pode atrapalhar sua Regressão Linear)

Há apenas uma casa com preço ausente nesse conjunto de dados, exatamente aquela que apontamos no início:

E agora podemos finalmente prever o preço esperado do imóvel:

 

Incrível, não é?

Para fins de produção, você ainda precisaria fazer um seleção de modelos Primeiro, verifique outras métricas de sua regressão e salve o modelo em vez de treiná-lo em tempo real, mas é incrível o quanto pode ser feito com menos de 100 linhas de código!

Se você tiver alguma dúvida, fique à vontade para me perguntar no Twitter em @deniswsrosa  ou em nosso fóruns.

Compartilhe este artigo
Receba atualizações do blog do Couchbase em sua caixa de entrada
Esse campo é obrigatório.

Autor

Postado por Denis Rosa, defensor dos desenvolvedores, Couchbase

Denis Rosa é um Developer Advocate do Couchbase e mora em Munique, na Alemanha. Ele tem uma sólida experiência como engenheiro de software e fala fluentemente Java, Python, Scala e Javascript. Denis gosta de escrever sobre pesquisa, Big Data, IA, microsserviços e tudo o mais que possa ajudar os desenvolvedores a criar um aplicativo bonito, mais rápido, estável e escalável.

Deixe um comentário

Pronto para começar a usar o Couchbase Capella?

Iniciar a construção

Confira nosso portal do desenvolvedor para explorar o NoSQL, procurar recursos e começar a usar os tutoriais.

Use o Capella gratuitamente

Comece a trabalhar com o Couchbase em apenas alguns cliques. O Capella DBaaS é a maneira mais fácil e rápida de começar.

Entre em contato

Deseja saber mais sobre as ofertas do Couchbase? Deixe-nos ajudar.