Eu tenho aprendido sobre a regressão do processo gaussiano a partir de vídeos on-line e anotações de aula. Meu entendimento é que, se tivermos um conjunto de dados com pontos, assumiremos que os dados são amostrados de um gaussiano multivariado dimensional. Portanto, minha pergunta está no caso em que são 10 milhões de dólares. A regressão gaussiana de processos ainda funciona? A matriz do kernel não será enorme, tornando o processo completamente ineficiente? Em caso afirmativo, existem técnicas para lidar com isso, como amostragem do conjunto de dados várias vezes? Quais são alguns bons métodos para lidar com esses casos?
10
Respostas:
Há uma ampla variedade de abordagens para escalar GPs para grandes conjuntos de dados, por exemplo:
Abordagens de classificação baixa : estas tentam criar uma aproximação de classificação baixa à matriz de covariância. O mais famoso talvez seja o método Nystroms, que projeta os dados em um subconjunto de pontos. A partir disso, foram desenvolvidos o FITC e o PITC, que usam pseudo-pontos em vez de pontos observados. Eles estão incluídos, por exemplo, na biblioteca python GPy. Outras abordagens incluem recursos aleatórios de Fourier.
Matrizes H : usam estrutura hierárquica da matriz de covariância e aplicam aproximações de baixa classificação a cada submatriz de estruturas. Isso é menos comumente implementado em bibliotecas populares.
Métodos Kronecker : utilizam produtos Kronecker de matrizes de covariância, a fim de acelerar o gargalo computacional.
Máquinas do Comitê Bayesiano : Isso envolve dividir seus dados em subconjuntos e modelar cada um com um GP. Em seguida, você pode combinar as previsões usando a combinação bayesiana ideal das saídas. Isso é muito fácil de implementar e é rápido, mas meio que quebra seu kernel, se você se importa com isso - o artigo de Mark Deisenroth deve ser fácil o suficiente para seguir aqui .
fonte
Normalmente, o que você pode fazer é treinar Processos Gaussianos em subamostras do seu conjunto de dados (ensacamento). O ensacamento é implementado no sk learn e pode ser usado facilmente. Veja por exemplo a documentação .
Chamar o número de observações, o número de sacos que você usa e o número de pontos por bolsa, isso permite alterar o tempo de treinamento de para . Portanto, com malas pequenas, mas usando todos os dados, você pode obter um tempo de treinamento muito menor. Infelizmente, isso geralmente reduz o desempenho do modelo.n nbags np O(n3) O(nbagsn3p)
Além das técnicas de ensacamento, há algumas pesquisas ativas sobre como tornar as Regressões Gaussianas de Processo escaláveis. O artigo Interpolação do kernel para processos gaussianos estruturados escalonáveis (KISS-GP) propõe reduzir o tempo de treinamento para um e vem com um código matlab.O(n)
fonte
Você perguntou:
Não no sentido padrão de construir e inverter uma matriz grande. Você tem duas opções: 1) escolha um modelo diferente ou 2) faça uma aproximação.
1) Alguns modelos baseados em GP podem ser dimensionados para conjuntos de dados muito grandes, como a máquina do comitê bayesiano vinculada na resposta acima. Acho essa abordagem bastante insatisfatória: existem boas razões para escolher um modelo de GP e, se quisermos mudar para um modelo mais computável, talvez não retenhamos as propriedades do modelo original. As variações preditivas do BCM dependem fortemente da divisão de dados, por exemplo.
2) A abordagem 'clássica' de aproximação nos GPs é aproximar a matriz do kernel. Há uma boa revisão desses tipos de métodos aqui: http://www.jmlr.org/papers/volume6/quinonero-candela05a/quinonero-candela05a.pdf . De fato, geralmente podemos ver essas aproximações matriciais como aproximações do modelo e agrupá-las com a máquina do comitê bayesiano: são mudanças no modelo e pode ser difícil entender quando essas mudanças podem ser patológicas. Aqui está uma super revisão: https://papers.nips.cc/paper/6477-understanding-probabilistic-sparse-gaussian-process-approximations.pdf
A maneira que eu defendo para fazer aproximações para GPs grandes é evitar aproximar a matriz do kernel ou o modelo e aproximar a distribuição posterior usando inferência variacional. Muitos cálculos se parecem com uma aproximação de matriz de 'classificação baixa', mas há uma propriedade muito desejável: quanto mais cálculos você usar (mais "classificações"), mais próxima será a aproximação do verdadeiro posterior, medido pelo KL divergência.
Estes artigos são um bom ponto de partida: http://proceedings.mlr.press/v5/titsias09a/titsias09a.pdf https://arxiv.org/pdf/1309.6835
Eu escrevi um artigo mais longo sobre o mesmo argumento aqui: https://www.prowler.io/blog/sparse-gps-approximate-the-posterior-not-the-model
Na prática, a aproximação variacional funciona muito bem em muitos casos. Eu o usei extensivamente em aplicativos reais. E, mais recentemente, tem havido uma teoria excelente para apoiar o porquê de funcionar ( https://arxiv.org/abs/1903.03571 ).
Um plug final: a inferência variacional nos GPs é implementada no gpflow ( https://github.com/GPflow/GPflow )
fonte