Qual é a maneira mais eficiente de treinar dados usando menos memória?

10

Estes são os meus dados de treinamento: 200.000 exemplos x 10.000 recursos. Portanto, minha matriz de dados de treinamento é - 200.000 x 10.000.

Consegui salvar isso em um arquivo simples sem problemas de memória, salvando todos os conjuntos de dados um por um (um exemplo após o outro) enquanto gerava os recursos para cada exemplo.

Porém, agora, quando uso Milk , SVM light ou qualquer outro algoritmo de aprendizado de máquina, tudo tenta carregar todos os dados de treinamento na memória, em vez de treiná-los um a um. No entanto, tenho apenas 8 GB de RAM, portanto não posso continuar dessa maneira.

Você sabia de qualquer maneira que eu poderia treinar o algoritmo um conjunto de dados por um conjunto de dados? Ou seja, para que a qualquer momento eu tenha apenas um conjunto de dados carregado na memória durante o treinamento.

madCode
fonte
11
O que você quer dizer com "salvar todos os conjuntos de dados um por um?" Você quer dizer "todas as linhas dos dados?" Se você possui vários conjuntos de dados salvos um a um, por que não carregá-los um por um e ajustar o algoritmo a cada um?
Zach
11
"Um conjunto de dados por um conjunto de dados" significa linha por linha? Ou seja, um conjunto de dados = 10000 recursos? Se for esse o caso, os algoritmos online podem ser algo que você está procurando, consulte: en.wikipedia.org/wiki/Online_algorithm e en.wikipedia.org/wiki/Online_machine_learning . Existe uma versão online para muitos algoritmos de inclinação de máquina, como SVM e florestas aleatórias.
Herra Huu 9/07/12
Obrigado .. Zach e Herra. Editei a pergunta para definir um por um mais claramente. E sim, eu estava pensando no aprendizado on-line, mas nunca pensei em algoritmos on-line, deixe-me ler e experimentar.
madCode

Respostas:

4

Acredito que o termo para esse tipo de aprendizado seja fora do núcleo . Uma sugestão é vowpal wabbit , que possui uma biblioteca R conveniente , além de bibliotecas para muitos outros idiomas.

Zach
fonte
Estou tendo problemas de dependências com o impulso durante a instalação. você tem alguma idéia de por que eu entendi isso? bit.ly/L939DO
madCode
@madCode Na verdade, nunca usei o vowpal wabbit, por isso não posso ajudá-lo a instalá-lo. Ouvi dizer que a lista de discussão é excelente e tenho certeza de que você pode encontrar ajuda para configurá-la.
Zach
Ei ... Zach. Funcionou bem. Eu o instalei e até me deu previsões. Obrigado ,
madCode
1

Eu sinceramente segundo a sugestão de Zach. O vowpal wabbit é uma excelente opção, e você ficaria surpreso com sua velocidade. Um conjunto de dados de 200k por 10k não é considerado grande pelas normas do vowpal wabbit.

vowpal_wabbit (disponível no formulário de origem via https://github.com/JohnLangford/vowpal_wabbit , uma versão mais antiga está disponível como um pacote padrão no universo Ubuntu) é um aprendiz linear + bilinear online rápido, com entrada muito flexível. Você pode misturar recursos binários e com valores numéricos. Não é necessário numerar os recursos, pois os nomes das variáveis ​​funcionarão "como estão". Possui inúmeras opções, algoritmos, reduções, funções de perda e grande flexibilidade total. Você pode entrar na lista de e-mails (localizá-la no github) e fazer qualquer pergunta. A comunidade é muito qualificada e apoia.

arielf
fonte
1

Eu respondi a pergunta semelhante aqui . O ponto é que a maioria dos algoritmos de aprendizado de máquina / mineração de dados são aprendizes em lote, ou seja, eles carregam todos os dados na memória. Portanto, você precisa de ferramentas diferentes para conjuntos de dados muito grandes. Veja também as ferramentas das perguntas.

O aprendizado on-line é uma maneira de reduzir a pegada de memória dos algoritmos.

Atilla Ozgur
fonte