BT

Disseminando conhecimento e inovação em desenvolvimento de software corporativo.

Contribuir

Tópicos

Escolha a região

Início Artigos Big Data com Apache Spark - Parte 4: Spark Machine Learning

Big Data com Apache Spark - Parte 4: Spark Machine Learning

Favoritos

Este é o quarto artigo da série "Big Data com Apache Spark". Por favor, veja também a Parte 1: Introdução, Parte 2: Spark SQL, Parte 3: Spark Streaming, Part 5: Spark ML Data Pipelines (inglês), Part 6: Graph Data Analytics with Spark GraphX (inglês).

Machine learning, análise preditiva e ciência de dados são assuntos que estão recebendo muita atenção nos últimos anos, pois resolvem problemas do mundo real em diversas organizações com diferentes domínios de negócios. O Spark MLlib, biblioteca de machine learning do Spark, inclui vários algoritmos para filtragem colaborativa, clusters, classificação e outras tarefas de machine learning.

Nos artigos anteriores da série "Big Data com Apache Spark", vimos como é a estrutura do Apache Spark (Parte 1), como aproveitar a interface SQL para acessar dados usando a biblioteca Spark SQL (Parte 2) e o processamento em tempo real e análise de streaming de dados usando o Spark Streaming (Parte 3).

Neste artigo, discutiremos os conceitos de machine learning e como usar a biblioteca MLlib do Apache Spark para executar análises preditivas. Usaremos um aplicação de exemplo para ilustrar a poderosa API que o Spark fornece na área de machine learning.

A API de Machine Learning do Spark inclui dois pacotes chamados spark.mllib e spark.ml.

O pacote spark.mllib contém a API original de machine learning do Spark, construída usando Resilient Distributed Datasets (RDDs). Ele oferece técnicas que incluem correlação, classificação e regressão, filtragem colaborativa, agrupamento e redução de dimensionalidade.

Por outro lado, o pacote spark.ml fornece uma API de machine learning criada usando DataFrames, que estão se tornando a parte principal da biblioteca Spark SQL. Este pacote pode ser usado para desenvolver e gerenciar os pipelines de machine learning. Ele também fornece extratores de features, transformadores, seletores e técnicas de machine learning, como classificação, regressão e agrupamento.

Neste artigo vamos abordar o pacote Spark MLlib e discutir várias técnicas de machine learning que esse pacote fornece. No próximo artigo, abordaremos o pacote Spark ML e veremos como criar e gerenciar pipelines de dados.

Machine Learning e Data Science

Machine Learning é sobre aprender com os dados existentes para fazer previsões sobre o futuro. É baseado na criação de modelos a partir de conjuntos de dados de entrada para tomada de decisão orientada a dados.

A ciência de dados é a disciplina de extrair conhecimento de grandes conjuntos de dados (estruturados ou não estruturados) para fornecer insights às equipes de negócios e influenciar as estratégias e roteiros de negócios. O papel do cientista de dados é mais crítico do que nunca na solução de problemas, que não são fáceis de resolver usando os métodos numéricos tradicionais.

Existem diferentes tipos de modelos de machine learning, como:

  • Aprendizado supervisionado;
  • Aprendizado não supervisionado;
  • Aprendizado semi-supervisionado;
  • Aprendizado por reforço.

Vamos analisar brevemente cada um desses modelos de machine learning e como eles se comparam.

Aprendizado supervisionado: essa técnica é usada para prever um resultado com base no treinamento do programa utilizando um conjunto de dados de treinamento (dados previamente rotulados). Em seguida, usamos o programa para prever o rótulo para um novo conjunto de dados não rotulados.

Existem dois submodelos de aprendizado supervisionado: Regressão e Classificação.

Aprendizado não supervisionado: é usado para encontrar padrões e correlações ocultos nos dados brutos. Não é usado dados para treinar este modelo, portanto, esta técnica é baseada em dados não rotulados.

Algoritmos como K-Means e Principle Component Analysis (PCA) se enquadram nessa categoria.

Aprendizado semi-supervisionado: essa técnica usa modelos de aprendizado supervisionado e não supervisionado para análises preditivas. Ele usa conjuntos de dados rotulados e não rotulados para treinamento. Geralmente envolve o uso de uma pequena quantidade de dados rotulados com uma grande quantidade de dados não rotulados. Pode ser usado para métodos de machine learning, como classificação e regressão.

Aprendizado por reforço: a técnica de aprendizado por reforço é usada para aprender como maximizar uma meta de recompensa numérica, tentando diferentes ações e descobrindo quais ações resultam na maximização da recompensa.

A Tabela 1 apresenta alguns exemplos de uso que cada um destes modelos tenta resolver:

 

ML Model

Examples

Aprendizado supervisionado

Detecção de fraude

Aprendizado não supervisionado

Aplicações em redes sociais, predição de idioma

Aprendizado semi-supervisionado

Categorização de imagem, reconhecimento de voz

Aprendizado por reforço

Aplicações de inteligência artificial

Tabela 1: Modelos de machine learning e exemplos reais de uso.

Algoritmos de Machine Learning

Existem vários algoritmos para ajudar nas soluções de machine learning. Vejamos alguns dos algoritmos suportados pelos frameworks de machine learning.

Naive Bayes: Naive Bayes é um algoritmo de aprendizado supervisionado usado para classificação. É baseado na aplicação do teorema de Bayes e em um conjunto de suposições de independência condicional.

K-Means: o algoritmo K-Means cria "k" grupos a partir de um conjunto de objetos, esses grupos são definidos com base na similaridade dos objetos.

Support vector machine (SVM): é um algoritmo de aprendizado supervisionado usado para encontrar o limite que separa as classes pela maior margem possível. Dado um conjunto de exemplos de treinamento, cada um marcado por pertencer a uma das duas categorias, um algoritmo de treinamento SVM cria um modelo que atribui novos exemplos a uma categoria ou a outra. As aplicações do SVM incluem bioinformática, reconhecimento de texto e imagem.

Decision Tree: usada em muitos tipos de problemas de machine learning, incluindo a classificação multi-classes. O MLlib suporta o algoritmo básico de Decision Tree e Ensembles Tree. Dois algoritmos de ensembles disponíveis são: Gradient-Boosted Tree e Random Forest.

Conforme documentado neste site, resumimos na Tabela 2 os estilos, problemas e algoritmos de machine learning para resolvê-los.

 

Modelo de ML

Problemas

Algoritmos

Aprendizado supervisionado

Classificação, Regressão, Detecção de anomalia

Logistic Regression, Back Propagation Neural Network

Aprendizado não supervisionado

Agrupamento, Redução de dimensionalidade

k-Means , Apriori algorithm

Aprendizado semi-supervisionado

Classificação, Regressão

Self training, Semi-supervised Support Vector Machines (S3VMs)

Tabela 2. Estilos, problemas e algoritmos de machine learning.

Passos de um programa Machine Learning

Ao trabalhar em projetos de machine learning, temos que realizar outras tarefas como: preparação de dados, limpeza e análise, que são tarefas muito importantes, além dos modelos e algoritmos reais de aprendizado usados para resolver os problemas de negócios.

A seguir, são apresentadas as etapas executadas em um programa típico de machine learning:

  • Geração de features
  • Treinamento
  • Avaliação do modelo

A Figura 1 mostra o fluxo do processo de uma solução típica de machine learning.

Figura 1. Fluxo do processo de machine learning.

É importante preparar e limpar os dados brutos antes da execução dos algoritmos de machine learning, caso contrário os padrões resultantes não serão precisos ou úteis, pois algumas anomalias podem ser perdidas.

A qualidade dos dados de treinamento que fornecemos aos programas de machine learning também desempenha um papel crítico nos resultados das previsões. Se os dados de treinamento não forem aleatórios o suficiente, os padrões resultantes não serão precisos. E se os dados forem muito pequenos, o programa poderá fornecer previsões imprecisas.

Casos de uso

Os casos de uso para machine learning abrange diferentes domínios e cenários, incluindo engines de recomendação (recomendação de alimentos), análise preditiva (previsão de preço das ações ou previsão de atraso de voos), publicidade direcionada, detecção de fraude, reconhecimento de imagem e vídeo, carros autônomos e vários outra inteligência artificial.

Vamos analisar em detalhes duas aplicações populares de machine learning: recomendação de conteúdo e detecção de fraude.

Engine de recomendação

As engines de recomendação usam os atributos de um item, um usuário, o comportamento de um usuário ou de outros usuários com características similares para fazer as previsões. Existem diferentes fatores que direcionam um modelo de recomendação eficaz. Alguns desses fatores estão listados a seguir:

  • Baseado em pares;
  • Comportamento do consumidor;
  • Negócios ou ofertas corporativas;
  • Agrupamento de itens;
  • Fatores de mercado / loja.

As soluções de recomendação são implementadas utilizando dois algoritmos: filtragem baseada em conteúdo e filtragem colaborativa.

Filtragem baseada em conteúdo: baseia-se na similaridade do uso e das classificações de um item em particular com os demais itens. O modelo usa os atributos de conteúdo dos itens (como categorias, tags, descrições e outros dados) para gerar uma matriz de cada item para os outros itens e calcula a similaridade com base nas classificações fornecidas. Em seguida, os itens mais semelhantes são listados com sua pontuação de similaridade. Os itens com a pontuação mais alta são os mais semelhantes.

A recomendação de filme é um bom exemplo desse modelo. Ele recomenda que "os usuários que gostaram de um filme em particular também gostaram desses outros filmes".

Esses modelos não levam em consideração o comportamento geral de outros usuários, portanto, não fornecem recomendações personalizadas em comparação com outros modelos, como a filtragem colaborativa.

Filtragem colaborativa: o modelo de filtragem colaborativa se baseia em fazer previsões para encontrar um item ou usuário específico com base na semelhança com outros itens ou usuários. O filtro aplica pesos com base nas preferências de "usuário similares". A suposição é de que usuários que exibem perfil ou comportamento semelhantes têm preferências semelhantes para itens.

Um exemplo desse modelo são as recomendações em sites de comércio eletrônico como a Amazon. Ao pesquisar um item no site, você vê algo como "Clientes que compraram este item também compraram".

Os itens com a pontuação mais alta de recomendação são os mais relevantes para o contexto do usuário.

As soluções baseadas em filtragem colaborativa têm melhor desempenho em comparação com outros modelos. O Spark MLlib implementa um algoritmo de filtragem colaborativa chamado Alternating Least Squares (ALS). Existem duas variações das entradas na filtragem colaborativa, chamadas feedback explícito e implícito. O feedback explícito é baseado nas preferências diretas informadas pelo usuário para um item (como um filme). O feedback explícito é bom, mas muitas vezes é distorcido, porque os usuários que gostam ou não gostam de um produto fornecem opiniões sobre ele. Não temos a opinião de muitas pessoas no centro da curva em forma de sino dos pontos de dados.

Exemplos de feedback implícito são visualizações, cliques, curtidas do usuário etc. Os dados de feedback implícito são muito utilizados no setor para análises preditivas, devido à facilidade de reunir esse tipo de dados.

Também existem métodos baseados em modelo para engines de recomendação. Geralmente, eles incorporam métodos de filtragem colaborativa e baseada em conteúdo. A abordagem baseada em modelo obtém o melhor dos dois mundos, o poder e o desempenho da filtragem colaborativa e a flexibilidade e adaptabilidade da filtragem baseada em conteúdo. Técnicas de deep learning são bons exemplos desse modelo.

Você também pode integrar outros algoritmos como o K-Means à solução da engine de recomendação para obter previsões mais refinadas. O algoritmo K-Means funciona particionando "n" observações em "k" clusters, nos quais cada observação pertence ao cluster com a média mais próxima. Usando a técnica K-Means, podemos encontrar itens ou usuários semelhantes com base em seus atributos.

A Figura 2 mostra os diferentes componentes de uma engine de recomendação, fatores do usuário, outros fatores como dados de mercado e algoritmos diferentes.

Figura 2: Componentes de uma engine de recomendação.

Detecção de fraude

A detecção de fraudes é outro caso de uso importante do uso de técnicas de machine learning, pois aborda um problema crítico no setor financeiro de maneira rápida e precisa. As organizações de serviços financeiros têm apenas algumas centenas de milissegundos para determinar se uma transação online específica é legítima ou fraudada.

Técnicas de rede neurais são usadas para casos de uso de detecção de fraude no Ponto de Venda (PDV). Organizações como o PayPal usam diferentes tipos de algoritmos de machine learning para gerenciamento de riscos, como linear, rede neural e deep learning.

A biblioteca Spark MLlib fornece vários algoritmos para resolver esse caso de uso, incluindo SVMs lineares, regressão logística, Decision Tree e Naive Bayes. Além disso, ensemble de modelos (que combinam as previsões de um conjunto de modelos), como Random Forests ou Gradient-boosting Trees, também estão disponíveis.

Ao trabalhar em um projeto de machine learning em sua organização, conforme recomendado neste artigo, você pode seguir as etapas listadas a seguir para implementar soluções de machine learning em seus próprios projetos.

  • Selecione a linguagem de programação;
  • Selecione o algoritmo ou algoritmos apropriados;
  • Selecionar um problema;
  • Pesquise os algoritmos;
  • Teste unitários para todas as funções da solução ML.

Agora, vamos ver como a estrutura do Apache Spark implementa os algoritmos de machine learning.

Spark MLlib

MLlib é a biblioteca de machine learning (ML) do Spark. Seu objetivo é tornar o machine learning algo prático, escalável e fácil. Ele consiste em algoritmos e utilitários comuns de aprendizado, incluindo classificação, regressão, agrupamento, filtragem colaborativa, redução de dimensionalidade, bem como otimização de primitivas de baixo nível e APIs de alto nível para pipeline.

Como aprendemos anteriormente, existem duas maneiras diferentes de usar a API do Spark Machine Learning: Spark MLlib e Spark ML.

Além dos vários algoritmos que o Spark MLlib suporta, também existem funções de processamento de dados e utilitários e ferramentas de análise de dados disponíveis nesta biblioteca.

  • Mineração do conjunto de itens frequentes por meio de regras de associação e FP-growth;
  • Mineração de padrões sequências via PrefixSpan;
  • Estatísticas resumidas e teste de hipóteses;
  • Transformações de features;
  • Avaliação do modelo e ajuste de hiperparâmetros.

A Figura 3 mostra a estrutura do Apache Spark com a biblioteca Spark MLlib.

Figura 3. Ecossistema Spark com a biblioteca de Machine Learning.

A API Spark MLlib está disponível nas linguagens de programação Scala, Java e Python. Aqui estão os links para a API de cada linguagem.

Aplicação de exemplo

Desenvolveremos um exemplo de aplicação de Machine Learning usando a técnica de classificação e filtragem colaborativa, para prever os filmes a serem recomendados a um usuário com base nas classificações de outros usuários em filmes diferentes.

Nossa engine de recomendação usará o algoritmo de Alternating Least Squares (ALS).

Mesmo que os conjuntos de dados usados no exemplo não sejam muito grandes em tamanho e complexidade, o Spark MLlib pode ser usado para qualquer tipo de problema do mundo real que seja complexo por natureza e lide com dados que contenham várias dimensões e funções complexas de predição.

Para manter simples a aplicação de machine learning e focar na API Spark MLlib, seguiremos o exemplo de Recomendações de filmes discutido no workshop do Spark Summit. Este exercício é muito bom para aprender mais sobre a biblioteca Spark MLlib. Para mais detalhes sobre o aplicativo, visite o site deles.

Caso de uso

O caso de uso que queremos implementar a solução de machine learning baseado no Spark é uma engine de recomendação.

As engines de recomendação são usadas para fazer previsões para associações de itens de usuário desconhecidas (por exemplo, classificações de filmes) com base em associações de itens de usuário conhecidas. Eles podem fazer previsões com base na afinidade do usuário com outros itens e na afinidade de outros usuários com esse item específico. A engine cria um modelo de previsão com base nos dados conhecidos (no conjunto de dados de treinamento) e, em seguida, faz previsões para associações de itens de usuário desconhecidas (no conjunto de dados de teste).

Nosso programa inclui as seguintes etapas para chegar às principais recomendações de filmes para o usuário:

  • Carregar arquivo de dados de filmes;
  • Carregue o arquivo de dados com classificações fornecidas por um usuário específico (você);
  • Carregar os dados de avaliações fornecidos por outros usuários (comunidade);
  • Junte os dados de classificação do usuário às classificações da comunidade em um único RDD;
  • Treine o modelo usando o algoritmo ALS usando dados de avaliações;
  • Identifique os filmes não avaliados por um usuário específico (userId = 1);
  • Prever as avaliações dos itens não avaliados pelo usuário;
  • Obtenha as principais recomendações N (N = 5 em nosso exemplo);
  • Exibir os dados da recomendação no console.

Se quiser processar ou executar análises adicionais sobre os dados de saída, pode armazenar os resultados em um banco de dados NoSQL como Cassandra ou MongoDB.

Conjunto de dados

Usaremos os conjuntos de dados de filmes fornecidos pelo grupo MovieLens. Existem alguns arquivos de dados diferentes que precisamos para a aplicação de exemplo. Esses conjuntos de dados estão disponíveis para download no site do GroupLens. Usaremos um dos conjuntos de dados mais recentes (versão menor com 100 mil avaliações). Faça o download do arquivo zip do conjunto de dados no site.

A tabela a seguir mostra os diferentes conjuntos de dados usados na aplicação.

 

#

Conjunto de dados

Nome do arquivo

Descrição

Atributos

1

Movies Data

movies.csv

Movie details.

movieId,title,genres

2

User Ratings Data

user-ratings.csv

Ratings by a specific user.

userId,movieId,rating,timestamp

3

Community Ratings Data

ratings.csv

Ratings by other users.

userId,movieId,rating,timestamp

O arquivo de classificações do usuário é para o usuário no contexto. Você pode atualizar as avaliações neste arquivo com base nas suas preferências de filme. Atribuímos um ID de usuário chamado "User Id 0" para representar essas classificações.

Quando executamos o programa da engine recomendação, associaremos os dados específicos das classificações do usuário às classificações da comunidade (outros usuários).

Tecnologias

Usaremos o Java para escrever o programa Spark MLlib, que pode ser executado como uma aplicação independente. O programa usa as seguintes classes Java do MLlib (todas estão localizadas no pacote org.apache.spark.mllib.recomendation ):

  • ALS
  • MatrixFactorizationModel
  • Rating

Usaremos as seguintes tecnologias na aplicação de exemplo para ilustrar como a API Spark MLlib é usada para executar análises preditivas.

Os componentes da arquitetura da aplicação de exemplo são mostrados na Figura 4:

Figura 4. Arquitetura da aplicação de exemplo que usa o Spark Machine Learning.

Existem várias implementações de exemplo de recomendação de filme disponíveis em diferentes linguagens de programação suportados pelo Spark, como Scala (Databricks e MapR), Java (Exemplos de Spark e engines de recomendação em Java) e Python. Usaremos a solução Java nesse exemplo. Faça o download do código Java no site de exemplos do Spark para executar o exemplo em sua máquina local. Crie um novo projeto Java baseado em Maven chamado spark-mllib-sample-app e copie a classe Java no projeto. Modifique a classe Java para passar nos conjuntos de dados discutidos na seção anterior.

Certifique-se de incluir as bibliotecas Spark Java necessárias na seção de dependências do arquivo pom.xml do Maven. Para limpar, construir e fazer o download das dependências da biblioteca Spark, você pode executar os seguintes comandos:

Configure as variáveis de ambiente para o JDK (JAVA_HOME), Maven (MAVEN_HOME) e Spark (SPARK_HOME).

Para Windows:

set JAVA_HOME=[JDK_INSTALL_DIRECTORY]
set PATH=%PATH%;%JAVA_HOME%\bin

set MAVEN_HOME=[MAVEN_INSTALL_DIRECTORY]
set PATH=%PATH%;%MAVEN_HOME%\bin

set SPARK_HOME=[SPARK_INSTALL_DIRECTORY]
set PATH=%PATH%;%SPARK_HOME%\bin

cd c:\dev\projects\spark-mllib-sample-app

mvn clean install
mvn eclipse:clean eclipse:eclipse

Para Linux ou Mac OSX:

export JAVA_HOME=[JDK_INSTALL_DIRECTORY]
export PATH=$PATH:$JAVA_HOME/bin

export MAVEN_HOME=[MAVEN_INSTALL_DIRECTORY]
export PATH=$PATH:$MAVEN_HOME/bin

export SPARK_HOME=[SPARK_INSTALL_DIRECTORY]
export PATH=$PATH:$SPARK_HOME/bin

cd /Users/USER_NAME/spark-mllib-sample-app

mvn clean install
mvn eclipse:clean eclipse:eclipse

Se a construção do aplicativo for bem-sucedida, o arquivo JAR compactado será criado no diretório target

Usaremos o comando spark-submit para executar o programa Spark. Aqui estão os comandos para executar o programa no Windows e Linux / Mac, respectivamente.

Windows:

%SPARK_HOME%\bin\spark-submit --class

"org.apache.spark.examples.mllib.JavaRecommendationExample" --master

local[*] target\spark-mllib-sample-1.0.jar

Linux/Mac:

$SPARK_HOME/bin/spark-submit --class

"org.apache.spark.examples.mllib.JavaRecommendationExample" --master

local[*] target/spark-mllib-sample-1.0.jar

Monitorando a aplicação Spark

Podemos monitorar o status do programa Spark no console da Web, disponível na URL.

Vejamos algumas dessas ferramentas de visualização que mostram as estatísticas do programa de machine learning do Spark.

Podemos visualizar os detalhes de todos os jobs do programa de exemplo. Clique na aba "Jobs" na tela do console da web para navegar na página da Web de jobs do Spark que mostra esses detalhes.

A Figura 5 mostra o status dos jobs.

Figura 5. Estatísticas dos jobs Spark.

O Direct Acyclic Graph (DAG) mostra o gráfico de dependência de diferentes operações de RDD que executamos no programa. A Figura 6 mostra a captura de tela desta visualização.

Figura 6. Grafo de visualização DAG do Spark machine learning.

Conclusão

O Spark MLlib é uma das duas bibliotecas de machine learning do Apache Spark. É usado para implementar soluções de análise preditiva para casos de uso de negócios, como mecanismo de recomendação e sistema de detecção de fraude. Neste artigo, aprendemos sobre como usar o Spark MLlib para criar uma engine de recomendação para prever os filmes que um usuário pode gostar.

Certifique-se de executar os testes necessários para avaliar a eficácia e o desempenho de diferentes técnicas de machine learning, a fim de descobrir a melhor solução para seus requisitos e casos de uso.

O que vem a seguir?

No próximo artigo, abordaremos na outra API de machine learning do Spark, chamada Spark ML, que é a solução recomendada para projetos de Big Data.

Referências

Sobre o autor

Srini Penchikala atualmente trabalha como Arquiteto de Software em uma organização de serviços financeiros em Austin, Texas. Ele tem mais de 20 anos de experiência em arquitetura, design e desenvolvimento. Srini está atualmente escrevendo um livro sobre Apache Spark. Ele também é co-autor do livro "Spring Roo in Action" da Manning Publications. Ele palestrou em diversas conferências como: JavaOne, SEI Architecture Technology Conference (SATURN), IT Architect Conference (ITARC), No Fluff Just Stuff, NoSQL Now e Project World Conference. Srini também publicou diversos artigos sobre arquitetura de software, segurança e gerenciamento de risco, e sobre banco de dados NoSQL em sites como o InfoQ, The ServerSide, OReilly Network (ONJava), DevX Java, java.net e JavaWorld. Ele é o Editor Líder de Data Science na comunidade do InfoQ.

Este é o quarto artigo da série "Big Data com Apache Spark". Por favor, veja também a Parte 1: Introdução, Parte 2: Spark SQL, Parte 3: Spark Streaming, Part 5: Spark ML Data Pipelines (inglês), Part 6: Graph Data Analytics with Spark GraphX (inglês).

Avalie esse artigo

Relevância
Estilo/Redação

Conteúdo educacional

HTML é permitido: a,b,br,blockquote,i,li,pre,u,ul,p

HTML é permitido: a,b,br,blockquote,i,li,pre,u,ul,p

BT