Contesto e problema
Sto usando i processi gaussiani (GP) per la regressione e la successiva ottimizzazione bayesiana (BO). Per regressione uso il pacchetto gpml per MATLAB con diverse modifiche personalizzate, ma il problema è generale.
È risaputo che quando due input di training sono troppo vicini nello spazio di input, la matrice di covarianza può diventare definita non positiva (ci sono diverse domande su questo sito). Di conseguenza, la decomposizione di Cholesky della matrice di covarianza, necessaria per vari calcoli GP, potrebbe non riuscire a causa di un errore numerico. Questo mi è successo in diversi casi quando eseguivo BO con le funzioni oggettive che sto usando e mi piacerebbe risolverlo.
Soluzioni proposte
AFAIK, la soluzione standard per alleviare il mal condizionamento è aggiungere una cresta o pepita alla diagonale della matrice di covarianza. Per la regressione GP, ciò equivale ad aggiungere (o aumentare, se già presente) rumore di osservazione.
Fin qui tutto bene. Ho modificato il codice per l'inferenza esatta di gpml in modo che ogni volta che la decomposizione di Cholesky fallisca, provo a fissare la matrice di covarianza alla matrice definita simmetrica positiva positiva (SPD) nella norma Frobenius, ispirata da questo codice MATLAB di John d'Errico. La logica è minimizzare l'intervento sulla matrice originale.
Questa soluzione risolve il problema, ma ho notato che le prestazioni di BO si sono notevolmente ridotte per alcune funzioni, possibilmente ogni volta che l'algoritmo avrebbe bisogno di ingrandire in alcune aree (ad esempio, perché si sta avvicinando al minimo o perché le scale di lunghezza del problema diventa non uniformemente piccolo). Questo comportamento ha senso poiché sto effettivamente aumentando il rumore ogni volta che due punti di ingresso si avvicinano troppo, ma ovviamente non è l'ideale. In alternativa, potrei semplicemente rimuovere i punti problematici, ma ancora una volta, a volte ho bisogno che i punti di input siano vicini.
Domanda
Non penso che i problemi numerici con la fattorizzazione di Cholesky delle matrici di covarianza di GP siano un problema nuovo, ma con mia sorpresa non sono riuscito a trovare molte soluzioni finora, a parte aumentare il rumore o rimuovere punti troppo vicini tra loro. D'altra parte, è vero che alcune delle mie funzioni si comportano piuttosto male, quindi forse la mia situazione non è così tipica.
Qualche suggerimento / riferimento che potrebbe essere utile qui?