Fiz o download do código GPML Matlab mais recente e o código GPML Matlab e li a documentação e executei a demonstração de regressão sem problemas. No entanto, estou tendo dificuldade em entender como aplicá-lo a um problema de regressão com o qual me deparo.
O problema de regressão é definido da seguinte maneira:
Seja um vetor de entrada e seja seu destino correspondente. O conjunto de entradas é organizado em uma matriz e seus destinos correspondentes são armazenados em uma matriz , com sendo o valor alvo médio em .
Desejo treinar um modelo GPR usando a função exponencial ao quadrado:
,
onde é igual a se e caso contrário. Os hiperparâmetros são com sendo o nível de ruído assumido nos dados de treinamento e é a escala de comprimento.
Para treinar o modelo, preciso minimizar a probabilidade marginal de log negativa em relação aos hiperparâmetros:
onde c é uma constante e a matriz é uma função dos hiperparâmetros (veja a equação k (xi, xj) = ...).
Com base na demonstração do site GPML, minha tentativa de implementar isso usando o código GPML Matlab está abaixo.
covfunc = @covSEiso;
likfunc = @likGauss;
sn = 0.1;
hyp.lik = log(sn);
hyp2.cov = [0;0];
hyp2.lik = log(0.1);
hyp2 = minimize(hyp2, @gp, -100, @infExact, [], covfunc, likfunc, X1, Y1(:, n));
exp(hyp2.lik)
nlml2 = gp(hyp2, @infExact, [], covfunc, likfunc, X1, Y1(:, n));
[m s2] = gp(hyp2, @infExact, [], covfunc, likfunc, X1, Y1(:, n), X2);
Y2r(:, n) = m;
X1 contém as entradas de treinamento
X2 contém as entradas de teste
Y1 contém as metas de treinamento
Y2r são as estimativas da aplicação do modelo
n é o índice usado para regredir cada elemento no vetor de saída
Dado o problema, esta é a maneira correta de treinar e aplicar o modelo GPR? Caso contrário, o que preciso alterar?
covfunc = { 'covSum', { 'covSEiso' } }
não vejo como isso cuida de dados barulhentos agora, parece que a caixa de ferramentas mudou bastante desde a última vez que a usei, analisando mais de perto mais tarde .Eu acho que o problema pode ser um erro de especificação do modelo. Se seus alvos são ângulos ajustados a + -180 graus, o "processo de ruído" para seus dados pode ser suficientemente não-guassiano, para que a evidência baysiana não seja uma boa maneira de otimizar os hiperparâmetros. Por exemplo, considere o que acontece quando o "ruído" causa a quebra do sinal. Nesse caso, pode ser aconselhável executar a seleção do modelo, minimizando o erro de validação cruzada (há uma implementação de domínio público do método simplex Nelder-Mead aquise você não tiver a caixa de ferramentas de otimização). A estimativa de desempenho com validação cruzada não é tão sensível à especificação incorreta do modelo, pois é uma estimativa direta do desempenho do teste, enquanto a probabilidade marginal do modelo é a evidência no suporte ao modelo, uma vez que as premissas do modelo estão corretas. Veja a discussão que começa na página 123 do livro de Rasmussen e Williams.
Outra abordagem seria re-codificar as saídas para que um modelo de ruído gaussiano seja mais apropriado. Uma coisa que você pode fazer é alguma forma de redução de dimensionalidade não supervisionada, pois existem relações não lineares entre seus alvos (como há apenas uma maneira limitada pela qual um corpo pode se mover), haverá uma variedade de dimensões mais baixas que seu os alvos permanecem vivos e seria melhor regredir as coordenadas dessa variedade em vez dos próprios ângulos (também pode haver menos alvos dessa maneira).
Além disso, algum tipo de análise de Procrustes pode ser uma boa idéia para normalizar as diferenças entre os sujeitos antes de treinar o modelo.
Você pode encontrar parte do trabalho realizado por Neil Lawrence em recuperação de interesse humano. Lembro-me de ver uma demonstração disso em uma conferência há alguns anos e fiquei muito impressionado.
fonte