Pour la première fois (excuse imprécision / erreurs) j'ai regardé les processus gaussiens , et plus précisément, j'ai regardé cette vidéo de Nando de Freitas . Les notes sont disponibles en ligne ici .
À un moment donné, il tire échantillons aléatoires d'une normale multivariée générée en construisant une matrice de covariance basée sur un noyau gaussien (exponentielle des distances au carré sur l' axe des ). Ces échantillons aléatoires forment les tracés lisses antérieurs qui deviennent moins étalés à mesure que les données deviennent disponibles. Finalement, l'objectif est de prédire en modifiant la matrice de covariance et en obtenant la distribution gaussienne conditionnelle aux points d'intérêt.
Le code entier est disponible à un excellent résumé par Katherine Bailey ici , qui à son tour crédite un référentiel de code par Nando de Freitas ici . Je l'ai posté le code Python ici pour plus de commodité.
Il commence par (au lieu de ci-dessus) fonctions antérieures, et introduit un "paramètre de réglage".
J'ai traduit le code en Python et [R] , y compris les tracés:
Voici le premier morceau de code dans [R] et le tracé résultant de trois courbes aléatoires générées via un noyau gaussien basé sur la proximité des valeurs dans l'ensemble de test:
Le deuxième morceau de code R est plus velu et commence par simuler quatre points de données d'entraînement, ce qui finira par aider à réduire l'écart entre les courbes possibles (antérieures) autour des zones où se trouvent ces points de données d'entraînement. La simulation de la valeur pour ces points de données est une fonction . On voit le "resserrement des courbes autour des points":
Le troisième morceau de code R concerne le tracé de la courbe des valeurs moyennes estimées (l'équivalent de la courbe de régression), correspondant à valeurs (voir calcul ci-dessous), et leurs intervalles de confiance:
QUESTION: Je veux demander une explication des opérations qui ont lieu lors du passage du GP précédent au postérieur.
Plus précisément, j'aimerais comprendre cette partie du code R (dans le deuxième morceau) pour obtenir les moyens et sd:
# Apply the kernel function to our training points (5 points):
K_train = kernel(Xtrain, Xtrain, param) #[5 x 5] matrix
Ch_train = chol(K_train + 0.00005 * diag(length(Xtrain))) #[5 x 5] matrix
# Compute the mean at our test points:
K_trte = kernel(Xtrain, Xtest, param) #[5 x 50] matrix
core = solve(Ch_train) %*% K_trte #[5 x 50] matrix
temp = solve(Ch_train) %*% ytrain #[5 x 1] matrix
mu = t(core) %*% temp #[50 x 1] matrix
Il y a deux noyaux (l'un de train ( ) contre train ( ), appelons-le , avec son Cholesky ( ), , colorant en orange tous les Cholesky à partir d'ici, et le second du train ( ) v test ( ), appelons-le ), et pour générer les moyennes estimées pour les points de l'ensemble de test, l'opération est:K_train
Ch_train
K_trte
# Compute the standard deviation:
tempor = colSums(core^2) #[50 x 1] matrix
# Notice that all.equal(diag(t(core) %*% core), colSums(core^2)) TRUE
s2 = diag(K_test) - tempor #[50 x 1] matrix
stdv = sqrt(s2) #[50 x 1] matrix
Comment cela marche-t-il?
Le calcul des lignes de couleur (GP postérieur) dans le graphique " Trois échantillons du GP postérieur " ci-dessus est également peu clair, où le Cholesky des ensembles de test et de formation semble se réunir pour générer des valeurs normales multivariées, éventuellement ajoutées à :
Ch_post_gener = chol(K_test + 1e-6 * diag(n) - (t(core) %*% core))
m_prime = matrix(rnorm(n * 3), ncol = 3)
sam = Ch_post_gener %*% m_prime
f_post = as.vector(mu) + sam
la source
Réponses:
Lorsqu'on leur donne un ensemble de test, , les valeurs attendues seront calculées en considérant une distribution conditionnelle de la valeur de la fonction pour ces nouveaux points de données, étant donné les points de données dans l'ensemble d'apprentissage, . L'idée exposée dans la vidéo est que nous aurions une distribution conjointe de et (dans la conférence indiquée par un astérisque, ) de la forme:e a a e ∗
Le conditionnel d'une distribution gaussienne multivariée a une moyenne . Maintenant, considérant que la première ligne de la matrice de blocs de covariances ci-dessus est pour , mais seulement pour , une volonté transposée être nécessaire pour rendre les matrices congruentes en:E(x1|x2)=μ1+Σ12Σ−122(x2−μ2) [50×50] Σaa [50×5] Σae
Entrez la décomposition de Cholesky (que je coderai encore en orange comme dans OP):
Si , alors , et nous nous retrouvons avec un système linéaire que nous pouvons résoudre, obtenant . Voici la diapositive clé de la présentation originale:m=Laa−1ytr Laam=ytr m
Puisque , Eq. (*) équivaut à l'équation de l'équation (1) dans l'OP:BTAT=(AB)T
étant donné que
Un raisonnement similaire serait appliqué à la variance, en commençant par la formule de la variance conditionnelle dans une gaussienne multivariée:
qui dans notre cas serait:
et en arrivant à l'équation (2):
Nous pouvons voir que l'équation (3) dans l'OP est un moyen de générer des courbes aléatoires postérieures conditionnelles aux données (ensemble d'apprentissage) et d'utiliser une forme de Cholesky pour générer trois tirages aléatoires normaux multivariés :
la source