Estou analisando alguns dados nos quais gostaria de executar uma regressão linear comum, mas isso não é possível, pois estou lidando com uma configuração on-line com um fluxo contínuo de dados de entrada (que rapidamente se tornará muito grande para memória) e precisa para atualizar estimativas de parâmetros enquanto isso estiver sendo consumido. ou seja, não posso simplesmente carregar tudo na memória e executar regressão linear em todo o conjunto de dados.
Estou assumindo um modelo de regressão multivariada linear simples, ou seja
Qual é o melhor algoritmo para criar uma estimativa de atualização contínua dos parâmetros de regressão linear e ?
Idealmente:
- Eu gostaria de um algoritmo com maior complexidade de espaço e tempo por atualização, em que é a dimensionalidade da variável independente ( ) e é a dimensionalidade da variável dependente ( ).
- Gostaria de poder especificar algum parâmetro para determinar quanto os parâmetros são atualizados por cada nova amostra, por exemplo, 0,000001 significaria que a próxima amostra forneceria um milionésimo da estimativa de parâmetro. Isso daria algum tipo de decaimento exponencial para o efeito de amostras no passado distante.
Respostas:
Maindonald descreve um método seqüencial baseado nas rotações de Givens . (Uma rotação de Givens é uma transformação ortogonal de dois vetores que zera uma determinada entrada em um dos vetores.) Na etapa anterior, você decompôs a matriz de design em uma matriz triangular T por meio de uma transformação ortogonal Q, de modo que Q X = ( T , 0 ) ′ . (É rápido e fácil obter os resultados da regressão a partir de uma matriz triangular.) Ao juntar uma nova linha v abaixo de X , você efetivamente estende ( T , 0 )X T Q Q X =( T , 0 )′ v X Por uma linha diferente de zero, diga t . A tarefa é zerar esta linha enquanto mantém as entradas na posição de T. diagonal. Uma sequência de rotações de Givens faz isso: a rotação com a primeira linha de T zeros, o primeiro elemento de t ; então a rotação com a segunda linha de T zeros o segundo elemento e assim por diante. O efeito é pré-multiplicar Q por uma série de rotações, o que não altera sua ortogonalidade.(T,0)′ t T T t T Q
Quando a matriz de projeto possui colunas (que é o caso ao regredir nas variáveis p mais uma constante), o número de rotações necessárias não excede p + 1 e cada rotação altera dois vetores p + 1 . O armazenamento necessário para T é O ( ( p + 1 ) 2 ) . Portanto, esse algoritmo tem um custo computacional de O ( ( p + 1 ) 2 ) no tempo e no espaço.p + 1 p p + 1 p + 1 T O ( ( p + 1 )2) O ( ( p + 1 )2)
Uma abordagem semelhante permite determinar o efeito na regressão da exclusão de uma linha. Maindonald dá fórmulas; assim como Belsley, Kuh e Welsh . Portanto, se você estiver procurando por uma janela em movimento para regressão, poderá reter os dados da janela em um buffer circular, adjacente ao novo dado e descartando o antigo a cada atualização. Isso dobra o tempo de atualização e requer armazenamento adicional de para uma janela de largura k . Parece que 1 / k seria o análogo do parâmetro de influência.O ( k ( p + 1 ) ) k 1 / k
Para decaimento exponencial, acho (especulativamente) que você pode adaptar essa abordagem a mínimos quadrados ponderados, atribuindo a cada novo valor um peso maior que 1. Não deve haver necessidade de manter um buffer de valores anteriores ou excluir dados antigos.
Referências
JH Maindonald, computação estatística. J. Wiley & Sons, 1984. Capítulo 4.
DA Belsley, E. Kuh, RE Welsch, Regression Diagnostics: Identifying Influential Data and Sources of Collinearity. J. Wiley & Sons, 1980.
fonte
Eu acho que reformular seu modelo de regressão linear em um modelo de espaço de estado fornecerá o que você procura. Se você usa R, convém usar o pacote dlm e dar uma olhada no livro complementar de Petris et al.
fonte
Você sempre pode apenas executar gradiente descendente sobre a soma dos quadrados custam wrt os parâmetros do seu modelo W . Basta pegar o gradiente, mas não use a solução de formulário fechado, mas apenas a direção da pesquisa.E W
Deixe- ser o custo da amostra formação i'ésima dados os parâmetros W . Sua atualização para o parâmetro j'th é entãoE( i ; W) W
onde é uma taxa escalonada, que você deve escolher por meio de validação cruzada ou boa medida.α
Isso é muito eficiente e a maneira como as redes neurais são normalmente treinadas. Você pode processar até muitas amostras em paralelo (digamos, mais ou menos 100) com eficiência.
É claro que algoritmos de otimização mais sofisticados (momento, gradiente conjugado, ...) podem ser aplicados.
fonte
Surpreendido, ninguém mais tocou nisso até agora. A regressão linear tem uma função objetiva quadrática. Portanto, um passo de Newton Raphson a partir de qualquer ponto de partida leva você diretamente ao ótimo. Agora, digamos que você já fez sua regressão linear. A função objetivo é:
Adicione isso ao antigo hessian dado acima. Então, basta dar um passo em Newton Raphson.
E você terminou.
fonte
O ajuste padrão dos mínimos quadrados fornece coeficientes de regressão
Por exemplo, se M = 1, então o coeficiente é
portanto, toda vez que você obtém um novo ponto de dados, atualiza as duas somas, calcula a proporção e obtém o coeficiente atualizado.
fonte
O problema é resolvido mais facilmente quando você reescreve as coisas um pouco:
Y = y
X = [x, 1]
então
Y = A * X
Uma solução única é encontrada calculando-se
V = X '* X
e
C = X '* Y
observe que o V deve ter tamanho N por N e C um tamanho N por M. Os parâmetros que você procura são dados por:
A = inv (V) * C
Como V e C são calculados somando seus dados, você pode calcular A em cada nova amostra. Isso tem uma complexidade de tempo de O (N ^ 3), no entanto.
Como V é quadrado e positivo semi-definido, existe uma decomposição de LU, o que torna a inversão de V numericamente mais estável. Existem algoritmos para executar atualizações de nível 1 no inverso de uma matriz. Encontre-os e você terá a implementação eficiente que procura.
Os algoritmos de atualização de nível 1 podem ser encontrados em "Computações em matriz" por Golub e van Loan. É um material resistente, mas possui uma visão abrangente de tais algoritmos.
Nota: O método acima fornece uma estimativa do quadrado mínimo em cada etapa. Você pode adicionar pesos facilmente às atualizações de X e Y. Quando os valores de X e Y aumentam muito, eles podem ser dimensionados por um único escalar, sem afetar o resultado.
fonte