Portanto, não consegui encontrar nenhuma literatura sobre esse assunto, mas parece que vale a pena pensar em algo:
Quais são as melhores práticas no treinamento e otimização de modelos se novas observações estiverem disponíveis?
Existe alguma maneira de determinar o período / frequência de re-treinamento de um modelo antes que as previsões comecem a se degradar?
É excessivo se os parâmetros forem otimizados novamente para os dados agregados?
Observe que o aprendizado pode não estar necessariamente online. Pode-se desejar atualizar um modelo existente depois de observar uma variação significativa nas previsões mais recentes.
machine-learning
predictive-modeling
optimization
training
user140323
fonte
fonte
Respostas:
.pickle
arquivo, carregá-lo e treiná-lo ainda mais quando novos dados estiverem disponíveis. Observe que, para o modelo prever corretamentethe new training data should have a similar distribution as the past data
,.The frequency will be dependent on dataset
e não há tempo específico para declarar como tal.If you observe that your new incoming data is deviating vastly, then it is a good practise to retrain the model
.fonte
Quando novas observações estão disponíveis, há três maneiras de treinar novamente o seu modelo:
Atualmente, a maioria dos modelos usa lote / mini lote e a escolha do tamanho do lote depende do seu aplicativo e modelo. Escolher o lote do tamanho certo é equivalente a escolher a frequência certa com a qual treinar novamente o seu modelo. Se sua nova observação tiver uma baixa variação com os dados existentes, sugiro lotes maiores (256-512, talvez) e, se pelo contrário novas observações tenderem a variar bastante com os dados existentes, use lotes pequenos (8-256). No final do dia, o tamanho do lote é como outro hiperparâmetro que você precisa ajustar e que é específico para seus dados
fonte
Seu problema está sob a égide dos métodos de aprendizado on-line. Supondo que um fluxo de dados chegue, você pode usar o método Stochastic Gradient Descent para atualizar os parâmetros do modelo usando esse exemplo único.
Se a sua função de custo for:
onde é vetor de parâmetro, assumindo um fluxo de dados do formulário ( ), você pode atualizar seu vetor de parâmetro usando SGD com a seguinte equação de atualização:x i , y iθ xi,yi
Isso é essencialmente SGD com tamanho de lote 1.
Há outro truque: você pode adotar um método baseado em janela / buffer, no qual você armazena alguns exemplos do fluxo e o trata como lote e usa o lote SGD. Nesse caso, a equação de atualização se tornará:
Este é essencialmente o SGD de mini-lote.
fonte
A pergunta: você deve treinar novamente?
A resposta depende do que seu modelo tenta fazer e em que ambiente é aplicado.
Deixe-me explicar por alguns exemplos:
Suponha que seu modelo tente prever o comportamento dos clientes, por exemplo, qual a probabilidade de um cliente comprar seu produto, em função de uma oferta personalizada para ele. Claramente, o mercado muda com o tempo, as preferências dos clientes mudam e os concorrentes se ajustam. Você também deve se ajustar, para treinar periodicamente. Nesse caso, eu recomendaria adicionar novos dados, mas também omitir dados antigos que não são mais relevantes. Se o mercado está mudando rapidamente, você deve considerar a reciclagem periodicamente com base apenas em novos dados.
Por outro lado, se o seu modelo classificar algumas imagens (por exemplo, raio-x ou ressonância magnética) para condições médicas e o modelo tiver um bom desempenho, você não precisará treinar novamente se não houver alterações na tecnologia ou no conhecimento médico . Adicionar mais dados não melhorará muito.
fonte