Zum ersten Mal (entschuldigen Sie Ungenauigkeit / Fehler) habe ich mir Gaußsche Prozesse angesehen und mir dieses Video von Nando de Freitas genauer angesehen . Die Notizen sind hier online verfügbar .
Irgendwann zieht er Zufallsstichproben aus einer multivariaten Normalen, die durch Konstruktion einer Kovarianzmatrix basierend auf einem Gaußschen Kern (Exponential der quadratischen Abstände in der Achse) erzeugt wurden. Diese Zufallsstichproben bilden die vorherigen glatten Diagramme, die mit der Verfügbarkeit von Daten weniger verbreitet werden. Letztendlich besteht das Ziel darin, durch Modifizieren der Kovarianzmatrix und Erhalten der bedingten Gaußschen Verteilung an den interessierenden Punkten vorherzusagen.
Der gesamte Code ist in einer ausgezeichneten Zusammenfassung von Katherine Bailey hier verfügbar , die wiederum ein Code-Repository von Nando de Freitas hier gutschreibt . Ich habe den Python-Code hier zur Vereinfachung veröffentlicht.
Es beginnt mit (anstelle von 10 oben) vorherigen Funktionen und führt einen "Abstimmungsparameter" ein.
Ich habe den Code in Python und [R] übersetzt , einschließlich der Diagramme:
Hier ist der erste Codeabschnitt in [R] und die resultierende Darstellung von drei zufälligen Kurven, die über einen Gaußschen Kernel basierend auf der Nähe der Werte im Testsatz generiert wurden :
Der zweite Teil des R-Codes ist haariger und beginnt mit der Simulation von vier Punkten von Trainingsdaten, die schließlich dazu beitragen, die Streuung zwischen den möglichen (vorherigen) Kurven um die Bereiche, in denen diese Trainingsdatenpunkte liegen, einzugrenzen. Die Simulation des Werts für diese Datenpunkte erfolgt als sin ( ) -Funktion. Wir können die "Verschärfung der Kurven um die Punkte" sehen:
Der dritte Teil des R-Codes befasst sich mit der Darstellung der Kurve der geschätzten Mittelwerte (das Äquivalent der Regressionskurve), die μ- Werten entspricht (siehe Berechnung unten), und ihrer Konfidenzintervalle:
FRAGE: Ich möchte um eine Erklärung der Operationen bitten, die stattfinden, wenn ich vom vorherigen Hausarzt zum hinteren Hausarzt gehe.
Insbesondere möchte ich diesen Teil des R-Codes (im zweiten Block) verstehen, um die Mittel und SD zu erhalten:
# 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
Es gibt zwei Kernel (einen von Zug ( ) gegen Zug ( a ), nennen wir es Σ a a mit seinem Cholesky ( ), L a a , der von nun an alle Cholesky orange färbt, und den zweiten von Zug ( a ) v - Test ( e ) , nennen sie es & Sgr; eine e ) und das geschätzte Mittel zur Erzeugung & mgr; für die 50 Punkte in dem Prüfgerät die Operation: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
Wie funktioniert das?
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