Mô phỏng hậu thế của một quá trình Gaussian


8

Lần đầu tiên (xin lỗi / lỗi) tôi đã xem qua các quy trình của Gaussian , và cụ thể hơn, đã xem video này của Nando de Freitas . Các ghi chú có sẵn trực tuyến ở đây .

Tại một số điểm, anh ta rút ra mẫu ngẫu nhiên từ một thông thường đa biến được tạo bằng cách xây dựng ma trận hiệp phương sai dựa trên nhân Gaussian (hàm mũ của khoảng cách bình phương trong trục ). Các mẫu ngẫu nhiên này tạo thành các lô mịn trước đó trở nên ít lan truyền hơn khi dữ liệu có sẵn. Cuối cùng, mục tiêu là dự đoán bằng cách sửa đổi ma trận hiệp phương sai và thu được phân phối Gaussian có điều kiện tại các điểm quan tâm.10x

nhập mô tả hình ảnh ở đây

Toàn bộ mã có sẵn tại một bản tóm tắt xuất sắc của Kinda Bailey tại đây , đến lượt nó ghi nhận một kho lưu trữ mã của Nando de Freitas tại đây . Tôi đã đăng nó mã Python ở đây để thuận tiện.

Nó bắt đầu với (thay vì ở trên) các chức năng trước đó và giới thiệu một "tham số điều chỉnh".10310

Tôi đã dịch mã sang Python và [R] , bao gồm các lô:

Đây là đoạn mã đầu tiên trong [R] và biểu đồ kết quả của ba đường cong ngẫu nhiên được tạo thông qua nhân Gaussian dựa trên độ gần của các giá trị trong tập kiểm tra:x

! [nhập mô tả hình ảnh ở đây

Đoạn mã thứ hai của mã R là hairier và bắt đầu bằng cách mô phỏng bốn điểm dữ liệu huấn luyện, điều này cuối cùng sẽ giúp thu hẹp sự lây lan giữa các đường cong có thể (trước) xung quanh các khu vực nơi các điểm dữ liệu đào tạo này nằm. Mô phỏng giá trị cho các điểm dữ liệu này là hàm . Chúng ta có thể thấy "thắt chặt các đường cong xung quanh các điểm":tội lỗi ( )ysin()

nhập mô tả hình ảnh ở đây

Đoạn thứ ba của mã R liên quan đến việc vẽ đường cong của các giá trị ước tính trung bình (tương đương với đường hồi quy), tương ứng với giá trị (xem tính toán bên dưới) và khoảng tin cậy của chúng:50 μ

nhập mô tả hình ảnh ở đây

HỎI: Tôi muốn yêu cầu một lời giải thích về các hoạt động diễn ra khi đi từ GP trước đến sau.

Cụ thể, tôi muốn hiểu phần này của mã R (trong đoạn thứ hai) để lấy phương tiện và 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

Có hai hạt nhân (một trong các tàu ( ) v. Train ( ), hãy gọi nó là , với Cholesky ( ), , tô màu cam cho tất cả các Cholesky từ đây trở đi, và thử nghiệm thứ hai của tàu ( ) v ( ) , hãy gọi nó là ) và để tạo ra các phương tiện ước tính cho điểm trong thử nghiệm, thao tác là:một Σ một một L một một một e Σ một e μ 50aaK_trainΣaaCh_trainLaaaeK_trteΣaeμ^50

(Eq.1)μ^=[Laa1[5×5]Σae[5×50]]TLaa1[5×5]ytr[5×1]dimensions=[50×1]
# 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

(Eq.2)var^=diag(Σee)diag[[Laa1[5×5]Σae[5×50]]T[Laa1[5×5]Σae[5×50]]]=d[1111]d[[Laa1[5×5]Σae[5×50]]T[Laa1[5×5]Σae[5×50]]]dimensions=[50×1]

Cái này hoạt động ra sao?

Cũng không rõ ràng, là phép tính cho các vạch màu (Posterior GP) trong âm mưu " Ba mẫu từ GP sau " ở trên, trong đó Cholesky của các bộ kiểm tra và huấn luyện dường như kết hợp với nhau để tạo ra các giá trị thông thường, cuối cùng được thêm vào :μ^

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 

(Eq.3)fpost=μ^+[Lee[50×50][[Laa1[5×5]Σae[5×50]]T[Laa1[5×5]Σae[5×50]]]][N(0,1)[50×3]]dimensions=[50×3]

Trong âm mưu cuối cùng, không nên đặt khoảng tin cậy "nhúm" tại các điểm đã biết?
GeoMatt22

@ GeoMatt22 Họ làm gì, bạn không nghĩ sao?
Antoni Parellada

Câu trả lời:


2

Khi được cung cấp một tập kiểm tra, , các giá trị dự kiến ​​sẽ được tính toán dựa trên phân phối có điều kiện của giá trị của hàm cho các điểm dữ liệu mới này, với các điểm dữ liệu trong tập huấn luyện, . Ý tưởng được đưa ra trong video là chúng ta sẽ có một bản phân phối chung của và (trong bài giảng được biểu thị bằng dấu hoa thị, ) có dạng:eaae

[ae]N([μaμe],[ΣaaΣaeΣaeTΣee])
.

Điều kiện của phân phối Gaussian đa biến có trung bình . Bây giờ, xem xét rằng hàng đầu tiên của ma trận khối của hiệp phương sai ở trên là cho , nhưng chỉ cho , sẽ được chuyển đổi cần thiết để làm cho các ma trận phù hợp trong:E(x1|x2)=μ1+Σ12Σ221(x2μ2)[50×50]Σaa[50×5]Σae

E(e|a)=μe+ΣaeTΣaa1(yμa)
Vì mô hình được lên kế hoạch với , công thức đơn giản hóa thành :μa=μe=0

E(e|a)=ΣaeTΣaa1ytr

Nhập phân tách Cholesky (một lần nữa tôi sẽ mã màu cam như trong OP):

E(e|a)=ΣaeTΣaa1ytr<α>=ΣaeT(LaaLaaT)1ytr=ΣaeTLaaTLaa1ytr(*)=ΣaeTLaaTLaa1ytr<m>

Nếu , thì và chúng tôi kết thúc với một hệ thống tuyến tính mà chúng tôi có thể giải quyết, thu được . Đây là slide chính trong bản trình bày gốc:m=Laa1ytrLaam=ytrm


nhập mô tả hình ảnh ở đây


Vì , Eq. (*) tương đương với phương trình (1) trong OP:BTAT=(AB)T

μ^=[Laa1[5×5]Σae[5×50]]TLaa1[5×5]ytr[5×1]=(ΣaeTLaaT)(Laa1ytr)dimensions=[50×1]

cho rằng

[Laa1[5×5]Σae[5×50]]T=Σae[50×5]TLaa1T[5×5]

Lý luận tương tự sẽ được áp dụng cho phương sai, bắt đầu bằng công thức cho phương sai có điều kiện trong một Gaussian đa biến:

var(x1|x2)=Σ11Σ12Σ221Σ21

mà trong trường hợp của chúng tôi sẽ là:

varμ^e=ΣeeΣaeTΣaa1Σae=ΣeeΣaeT[LaaLaaT]1Σae=ΣeeΣaeT[Laa1]TLaa1Σae=Σee[Laa1Σae]TLaa1Σae

và đến phương trình (2):

varμ^e=d[Kee[Laa1[5×5]Σae[5×50]]T[Laa1[5×5]Σae[5×50]]]dimensions=[50×1]

Chúng ta có thể thấy rằng Phương trình (3) trong OP là cách tạo đường cong ngẫu nhiên sau có điều kiện trên dữ liệu (tập huấn luyện) và sử dụng dạng Cholesky để tạo ra ba lần rút ngẫu nhiên thông thường nhiều biến số :

fpost=μ^+[varμ^e][rnorm(0,1)]=μ^+[Lee[50×50][[Laa1[5×5]Σae[5×50]]T[Laa1[5×5]Σae[5×50]]]][rand.norm's[50×3]]dimensions=[50×3]

1
Đây là từ một cuốn sách hoặc giấy? Bạn có một cách mạnh mẽ để tính toán trung bình và phương sai có điều kiện khi ma trận hiệp phương sai bị điều hòa (nhưng không xóa hoặc hợp nhất bất kỳ điểm dữ liệu gần như phụ thuộc (gần đó) nào với độ chính xác kép không? Đa độ chính xác trong phần mềm hoạt động, nhưng có độ chậm từ 2,5 đến 3 bậc so với phần cứng Double Precision, do đó, ngay cả thuật toán độ chính xác kép "chậm" cũng sẽ tốt. Tôi không nghĩ Cholesky cắt nó. Tôi không nghĩ ngay cả QR cũng vậy khi ma trận hiệp phương sai rất có điều kiện. Sử dụng backsolves tiêu chuẩn, dường như cần độ chính xác ocutuple.
Mark L. Stone
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.