6
respostas

Dicas para desenvolver minha matriz

Em primeiro lugar parabéns pelas aulas! cada vez melhor!! Gostaria de uma dica de como montar uma matriz seguindo o exemplo da Amazon. Você exemplificou com usuários dando notas nos cursos, mas como eu poderia montar utilizando as vendas de produtos?

Quero usar como exemplo uma base contendo 10.000 produtos que foram vendidos para aproximadamente 5.000 clientes, totalizando 800.000 registros para serem analisados.

Existe alguma ferramenta, técnica, melhor prática para modelar essa matriz contendo essa grande quantidade de registros e colunas?

6 respostas

Oi Kobi, tudo bem? Considerando a quantidade de registros, acredito que a melhor forma de criar essa matriz seja utilizando de um banco de dados já que em arquivos, acredito que a leitura disso tudo pode demorar um pouco e essa não é a principal questão, lembre-se que é um acesso a disco então é uma operação que pede mais processamento.

Acredito que também seja preciso uma otimização do algoritmo. No curso, utilizando menos de 50.000 registros, o Mahout já criou 4 threads para analisar. Seu número de dados é de uma grandeza bem maior e acho que já exige alguma otimização, não sei se a nível de computação distribuída, pois apenas o número de registros não seja o maior indicador.

Isso ajuda?

Olá Wanderson obrigado pela ajuda mas ainda não fechou minha dúvida. Sim todos os meus dados estão armazenados em banco de dados. O que eu estou buscando é uma forma de gerar a matriz da minha tabela do banco de dados. Queria saber como transformar ela em outra dimensão. Exemplo:

Tabela atual: Tabela de venda de produto: CODPRODUTO QTD.VENDIDA 1 10002 200 3 4000 4 500

Imagine que nessa tabela de vendas existe mais de 90.000 registros de vendas com uma variedade (10.000) códigos de produtos , como eu mudo a dimensão dela para: 1 2 3 41000 200 4000 500

Antes de iniciar os algoritimos, eu entendo que preciso montar a matriz na dimensão conforme exemplo acima, certo? Como eu consigo fazer essa transformação?

Kobi, deixa eu ver se entendi bem antes de confirmar qualquer resposta. A tabela de vendas tem dois campos é isso? CODPRODUTO e QTD.VENDIDA ? E baseado nessas vendas, você pretende fazer um recomendador, é isso? E o conjunto de dados que pretende usar dessa tabela de vendas é composto de 800.000 registros. Tô certo?

E a dúvida principal é como transformar esses registros em uma matriz de análise?

Bom dia Kobi,

Para ilustrar, só de carregar 10000 5000 1 byte (no minimo ,para o boolean) = 6 gigas na memória, imagina :) Existem estruturas que facilitam trabalhar com dados muito grande, como matrizes esparsas ao invés de matrizes normais etc: https://github.com/apache/mahout/blob/master/math/src/main/java/org/apache/mahout/math/SparseMatrix.java

Na prática você precisará carregar esses dados para executar o treino. A abordagem sempre é: carrega com o algoritmo que você possui, veja se estoura memória ou tempo, e ai parte para otimizar. A otimização do processamento no mahout costuma ser feita distribuindo o algoritmo em várias máquinas pq uma só não dá conta em tempo viável.

Minha sugestão é: carrega os primeiros 500 usuários e faz rodar. Maravilha. Descarta o resultado completamente, você só está fazendo este testes para escrever o código, não para analisar o resultado. Ai vai crescendo no número deusuários que carrega e, quando necessário, distribui com o mahout para rodar em duas máquinas em paralelo

att

EXCELENTE dica! ajudou bastante. Obrigado

Kobi, lembra sempre de marcar o tópico como solucionado tá bem? Assim a gente sabe que o problema foi resolvido mais rápido e já sabe de cara qual é a solução. Tá bem?

Bons estudos!