Spark MLlib - Biblioteca de aprendizado de máquina do Apache Spark



Este blog do Spark MLlib apresentará a biblioteca de aprendizado de máquina do Apache Spark. Inclui um projeto de Sistema de recomendação de filmes usando Spark MLlib.

Spark MLlib é o componente de aprendizado de máquina do Apache Spark.Uma das principais atrações do Spark é a capacidade de dimensionar a computação de forma massiva, e isso é exatamente o que você precisa para algoritmos de aprendizado de máquina. Mas a limitação é que todos os algoritmos de aprendizado de máquina não podem ser efetivamente paralelizados. Cada algoritmo tem seus próprios desafios para paralelização, seja paralelismo de tarefas ou paralelismo de dados.

Dito isso, o Spark está se tornando a plataforma de fato para a construção de algoritmos e aplicativos de aprendizado de máquina.Bem, você pode verificar o com curadoria de especialistas da indústria antes de prosseguir com o blog.Os desenvolvedores que trabalham no Spark MLlib estão implementando mais e mais algoritmos de máquina de maneira escalonável e concisa na estrutura do Spark. Através deste blog, aprenderemos os conceitos de Machine Learning, Spark MLlib, seus utilitários, algoritmos e um caso de uso completo do Movie Recommendation System.





Os seguintes tópicos serão abordados neste blog:

  1. O que é aprendizado de máquina?
  2. Visão geral do Spark MLlib
  3. Ferramentas Spark MLlib
  4. Algoritmos MLlib
  5. Caso de uso - Sistema de recomendação de filmes

O que é aprendizado de máquina?

Evoluído a partir do estudo de reconhecimento de padrões e teoria de aprendizado computacional em inteligência artificial, o aprendizado de máquina explora o estudo e a construção de algoritmos que podem aprender e fazer previsões sobre os dados - tais algoritmos são superados seguindo instruções de programa estritamente estáticas, fazendo previsões ou decisões baseadas em dados , por meio da construção de um modelo a partir de entradas de amostra.



java como sair de um programa

Aprendizado de máquina - Spark MLlib - Edureka Figura: Ferramentas de aprendizado de máquina

O aprendizado de máquina está intimamente relacionado à estatística computacional, que também se concentra na criação de previsões por meio do uso de computadores. Tem fortes laços com a otimização matemática, que entrega métodos, teoria e domínios de aplicação para o campo. No campo da análise de dados, o aprendizado de máquina é um método usado para criar modelos e algoritmos complexos que se prestam a uma previsão que, em uso comercial, é conhecida como análise preditiva.

Existem três categorias de tarefas de aprendizado de máquina:



  1. Aprendizagem Supervisionada : Aprendizagem supervisionada é onde você tem variáveis ​​de entrada (x) e uma variável de saída (Y) e você usa um algoritmo para aprender a função de mapeamento da entrada para a saída.
  2. Aprendizagem Não Supervisionada : Aprendizagem não supervisionada é um tipo de algoritmo de aprendizagem de máquina usado para tirar inferências de conjuntos de dados que consistem em dados de entrada sem respostas rotuladas.
  3. Aprendizagem por Reforço : Um programa de computador interage com um ambiente dinâmico no qual deve realizar um determinado objetivo (como dirigir um veículo ou jogar uma partida contra um oponente). O programa recebe feedback em termos de recompensas e punições à medida que navega no espaço do problema.Este conceito é denominado aprendizagem por reforço.

Visão geral do Spark MLlib

Spark MLlib é usado para realizar aprendizado de máquina no Apache Spark. MLlib consiste em algoritmos e utilitários populares.

Visão geral do MLlib:

  • spark.mllib contém a API original construída sobre RDDs. Atualmente está em modo de manutenção.
  • spark.ml fornece API de nível superior construída em cima de DataFrames paraconstruir pipelines de ML. spark.ml é a principal API de aprendizado de máquina para Spark no momento.

Ferramentas Spark MLlib

Spark MLlib fornece as seguintes ferramentas:

  • Algoritmos de ML: Os Algoritmos de ML constituem o núcleo do MLlib. Isso inclui algoritmos de aprendizagem comuns, como classificação, regressão, agrupamento e filtragem colaborativa.
  • Featurização: A Featurização inclui extração, transformação, redução de dimensionalidade e seleção de recursos.
  • Pipelines: Pipelines fornecem ferramentas para construir, avaliar e ajustar pipelines de ML.
  • Persistência: A persistência ajuda a salvar e carregar algoritmos, modelos e pipelines.
  • Serviços de utilidade pública: Serviços de utilidade públicapara álgebra linear, estatísticas e tratamento de dados.

Algoritmos MLlib

Os algoritmos e utilitários populares no Spark MLlib são:

  1. Estatísticas Básicas
  2. Regressão
  3. Classificação
  4. Sistema de Recomendação
  5. Clustering
  6. Redução de dimensionalidade
  7. Extração de característica
  8. Otimização

Vejamos alguns deles em detalhes.

Estatísticas Básicas

Estatísticas Básicas inclui as técnicas mais básicas de aprendizado de máquina. Esses incluem:

  1. Estatísticas de resumo : Os exemplos incluem média, variância, contagem, máximo, mínimo e numNonZeros.
  2. Correlações : Spearman e Pearson são algumas maneiras de encontrar correlação.
  3. Amostragem Estratificada : Incluem sampleBykey e sampleByKeyExact.
  4. Testando hipóteses : O teste qui-quadrado de Pearson é um exemplo de teste de hipótese.
  5. Geração Aleatória de Dados : RandomRDDs, Normal e Poisson são usados ​​para gerar dados aleatórios.

Regressão

Regressão análise é um processo estatístico para estimar as relações entre as variáveis. Inclui muitas técnicas para modelar e analisar várias variáveis ​​quando o foco está no relacionamento entre uma variável dependente e uma ou mais variáveis ​​independentes. Mais especificamente, a análise de regressão ajuda a compreender como o valor típico da variável dependente muda quando qualquer uma das variáveis ​​independentes é variada, enquanto as outras variáveis ​​independentes são mantidas fixas.

A análise de regressão é amplamente usada para predição e previsão, onde seu uso tem uma sobreposição substancial com o campo do aprendizado de máquina. A análise de regressão também é usada para entender quais entre as variáveis ​​independentes estão relacionadas à variável dependente e para explorar as formas dessas relações. Em circunstâncias restritas, a análise de regressão pode ser usada para inferir relações causais entre as variáveis ​​independentes e dependentes.

Classificação

Classificação é o problema de identificar a qual de um conjunto de categorias (subpopulações) uma nova observação pertence, com base em um conjunto de dados de treinamento contendo observações (ou instâncias) cuja categoria de pertencimento é conhecida. É um exemplo de reconhecimento de padrões.

Aqui, um exemplo seria atribuir um determinado e-mail a classes 'spam' ou 'não-spam' ou atribuir um diagnóstico a um determinado paciente, conforme descrito pelas características observadas do paciente (sexo, pressão arterial, presença ou ausência de certos sintomas, etc.).

Sistema de Recomendação

PARA sistema de recomendação é uma subclasse de sistema de filtragem de informações que busca prever a “avaliação” ou “preferência” que um usuário daria a um item. Os sistemas de recomendação têm se tornado cada vez mais populares nos últimos anos e são utilizados em uma variedade de áreas, incluindo filmes, música, notícias, livros, artigos de pesquisa, consultas de pesquisa, marcas sociais e produtos em geral.

Os sistemas de recomendação geralmente produzem uma lista de recomendações de uma das duas maneiras - por meio da filtragem colaborativa e baseada em conteúdo ou da abordagem baseada na personalidade.

  1. Filtragem colaborativa abordagens de construção de um modelo a partir do comportamento anterior de um usuário (itens previamente comprados ou selecionados e / ou classificações numéricas dadas a esses itens), bem como decisões semelhantes feitas por outros usuários. Este modelo é então usado para prever itens (ou classificações de itens) nos quais o usuário pode ter interesse.
  2. Filtragem baseada em conteúdo abordagens utilizam uma série de características discretas de um item para recomendar itens adicionais com propriedades semelhantes.

Além disso, essas abordagens são frequentemente combinadas como Sistemas de Recomendação Híbridos.

Clustering

Clustering é a tarefa de agrupar um conjunto de objetos de tal forma que os objetos no mesmo grupo (chamado de cluster) sejam mais semelhantes (em um sentido ou outro) entre si do que com aqueles em outros grupos (clusters). Portanto, é a principal tarefa da mineração exploratória de dados, e uma técnica comum para análise estatística de dados, usada em muitos campos, incluindo aprendizado de máquina, reconhecimento de padrões, análise de imagens, recuperação de informação, bioinformática, compressão de dados e computação gráfica.

Redução de dimensionalidade

Redução de dimensionalidade é o processo de redução do número de variáveis ​​aleatórias em consideração, por meio da obtenção de um conjunto de variáveis ​​principais. Ele pode ser dividido em seleção e extração de recursos.

  1. Seleção de recursos: A seleção de recursos encontra um subconjunto das variáveis ​​originais (também chamados de recursos ou atributos).
  2. Extração de recurso: Isso transforma os dados no espaço de alta dimensão em um espaço de menos dimensões. A transformação de dados pode ser linear, como na Análise de Componentes Principais (PCA), mas também existem muitas técnicas de redução de dimensionalidade não linear.

Extração de característica

Extração de característica começa a partir de um conjunto inicial de dados medidos e constrói valores derivados (recursos) destinados a serem informativos e não redundantes, facilitando as etapas subsequentes de aprendizado e generalização e, em alguns casos, levando a melhores interpretações humanas. Isso está relacionado à redução da dimensionalidade.

Otimização

Otimização é a seleção dos melhoreselemento (com relação a algum critério) de algum conjunto de alternativas disponíveis.

No caso mais simples, um problema de otimização consiste em maximizar ou minimizar uma função real escolhendo sistematicamente os valores de entrada de dentro de um conjunto permitido e computando o valor da função. A generalização da teoria e das técnicas de otimização para outras formulações compreende uma grande área da matemática aplicada. Mais geralmente, a otimização inclui encontrar os valores 'melhores disponíveis' de alguma função objetivo, dado um domínio definido (ou entrada),incluindo uma variedade de diferentes tipos de funções objetivas e diferentes tipos de domínios.

Caso de uso - Sistema de recomendação de filmes

Declaração do problema: Para construir um sistema de recomendação de filmes que recomenda filmes com base nas preferências do usuário usando o Apache Spark.

Nossos requisitos:

Então, vamos avaliar os requisitos para construir nosso sistema de recomendação de filmes:

  1. Processe uma grande quantidade de dados
  2. Entrada de fontes múltiplas
  3. Fácil de usar
  4. Processamento rápido

Como podemos avaliarnossos requisitos, precisamos da melhor ferramenta de Big Data para processar grandes volumes de dados em pouco tempo. Portanto, Apache Spark é a ferramenta perfeita para implementar nosso Sistema de recomendação de filmes.

Vejamos agora o diagrama de fluxo do nosso sistema.

Como podemos ver, o seguinte usa Streaming do Spark Streaming. Podemos transmitir em tempo real ou ler dados do Hadoop HDFS.

Obtendo o conjunto de dados:

Para nosso Sistema de recomendação de filmes, podemos obter as avaliações dos usuários de muitos sites populares como IMDB, Rotten Tomatoes e Times Movie Ratings. Este conjunto de dados está disponível em muitos formatos, como arquivos CSV, arquivos de texto end bancos de dados. Podemos transmitir os dados ao vivo dos sites ou baixá-los e armazená-los emnosso sistema de arquivos local ou HDFS.

Conjunto de dados:

A figura abaixo mostra como podemos coletar conjuntos de dados de sites populares.

Depois de transmitir os dados para o Spark, fica mais ou menos assim.

Aprendizado de máquina:

Todo o sistema de recomendação é baseado no algoritmo de aprendizado de máquina Mínimos quadrados alternados . Aqui, ALS é um tipo de análise de regressão onde a regressão é usada para desenhar uma linha entre os pontos de dados de forma que a soma dos quadrados da distância de cada ponto de dados seja minimizada. Assim, esta linha é então usada para prever os valores da função onde encontra o valor da variável independente.

A linha azul no diagrama é a linha de regressão de melhor ajuste. Para esta linha, o valor da dimensão D é mínimo. Todas as outras linhas vermelhas sempre estarão mais distantes do conjunto de dados como um todo.

Implementação do Spark MLlib:

  1. Usaremos Filtragem Colaborativa (CF) para prever as classificações de usuários para filmes específicos com base nas classificações de outros filmes.
  2. Em seguida, colaboramos com a classificação de outros usuários para aquele filme em particular.
  3. Para obter os seguintes resultados de nosso aprendizado de máquina, precisamos usar o DataFrame, o conjunto de dados e o serviço SQL do Spark SQL.

Aqui está o pseudocódigo para nosso programa:

import org.apache.spark.mllib.recommendation.ALS import org.apache.spark.mllib.recommendation.Rating import org.apache.spark.SparkConf // Importar outro objeto de pacotes necessário Filme {def main (args: Array [String] ) {val conf = new SparkConf (). setAppName ('Filme'). setMaster ('local [2]') val sc = new SparkContext (conf) val rawData = sc.textFile ('* Ler dados do arquivo CSV do filme * ') //rawData.first () val rawRatings = rawData.map (* Dividir rawData no delimitador de tabulação *) val ratings = rawRatings.map {* Mapear matriz de caso de usuário, filme e classificação *} // Treinamento do modelo de val de dados = ALS.train (avaliações, 50, 5, 0,01) model.userFeatures model.userFeatures.count model.productFeatures.count val predictedRating = * Predict for User 789 for movie 123 * val userId = * User 789 * val K = 10 val topKRecs = model.recommendProducts (* Recomendado para o usuário pelo valor específico de K *) println (topKRecs.mkString ('')) val movies = sc.textFile ('* Ler dados da lista de filmes *') val Title = movies.map (line => line.split ('|'). take ( 2)). Map (array => (array (0) .toInt, array (1))). CollectAsMap () val TitleRDD = movies.map (line => line.split ('|'). Take (2) ) .map (array => (array (0) .toInt, array (1))). cache () títulos (123) val moviesForUser = ratings. * Pesquisa pelo usuário 789 * val sqlContext = * Criar contexto SQL * val moviesRecommended = sqlContext. * Faça um DataFrame de filmes recomendados * moviesRecommended.registerTempTable ('moviesRecommendedTable') sqlContext.sql ('Selecione a contagem (*) de moviesRecommendedTable'). foreach (println) moviesForUser. * Classifique as classificações do usuário 789 * .map (* Mapeie a classificação para o título do filme *). * Imprima a avaliação * val results = moviesForUser.sortBy (-_. Rating) .take (30) .map (rating => (títulos (rating.product), rating.rating))}}

Depois de gerar previsões, podemos usar Spark SQL para armazenar os resultados em um sistema RDBMS. Além disso, isso pode ser exibido em um aplicativo da web.

Resultados:

Figura: Filmes recomendados para o usuário 77

Viva! Assim, criamos com sucesso um Sistema de recomendação de filmes usando Apache Spark. Com isso, cobrimos apenas um dos muitos algoritmos populares que o Spark MLlib tem a oferecer. Aprenderemos mais sobre Aprendizado de Máquina nos próximos blogs sobre Algoritmos de Ciência de Dados.

Daqui para frente, você pode continuar aprendendo Apache Spark com tutorial do Spark, tutorial de streaming do Sparke perguntas da entrevista do Spark.Edureka se dedica a fornecer a melhor experiência de aprendizado possível online.

Confira nosso Eu Se você deseja aprender o Spark e construir uma carreira no domínio do Spark e desenvolver experiência para realizar processamento de dados em grande escala usando RDD, Spark Streaming, SparkSQL, MLlib, GraphX ​​e Scala com casos de uso da vida real.