ผมอยากจะได้อย่างมีประสิทธิภาพวาดตัวอย่างจากภายใต้ข้อ จำกัด ที่|| x || _2 = 1
ผมอยากจะได้อย่างมีประสิทธิภาพวาดตัวอย่างจากภายใต้ข้อ จำกัด ที่|| x || _2 = 1
คำตอบ:
การแก้ไขปัญหาอย่างเป็นทางการของปัญหานี้ก่อนต้องมีคำนิยามที่เหมาะสมของ
" การกระจายขึ้นอยู่กับข้อ จำกัด ที่ "
วิธีธรรมชาติคือการกำหนดกระจายของเงื่อนไขใน||และจะใช้เงื่อนไขนี้กับกรณี 1 ถ้าเราใช้พิกัดเชิงขั้ว ,
สรุป:ความหนาแน่นนี้แตกต่างจากการใช้ความหนาแน่นปกติกับจุดบนหน่วยทรงกลมเนื่องจากยาโคเบียน
ขั้นตอนที่สองคือการพิจารณาความหนาแน่นของเป้าหมาย และการออกแบบห่วงโซ่มาร์คอฟอัลกอริทึม Monte Carlo ในการสำรวจพื้นที่พารามิเตอร์ปี่] ความพยายามครั้งแรกของฉันจะอยู่ที่ตัวอย่างกิ๊บส์เริ่มต้นที่จุดบนทรงกลมใกล้กับนั่นคือและดำเนินการทีละหนึ่งมุมในลักษณะ Metropolis-within-Gibbs:
เครื่องชั่ง , , ,สามารถปรับขนาดกับอัตราการยอมรับของขั้นตอนไปสู่เป้าหมายในอุดมคติของ\%
นี่คือรหัส R เพื่อแสดงด้านบนพร้อมค่าเริ่มต้นสำหรับและ :
library(mvtnorm)
d=4
target=function(the,mu=1:d,sigma=diag(1/(1:d))){
carte=cos(the[1])
for (i in 2:(d-1))
carte=c(carte,prod(sin(the[1:(i-1)]))*cos(the[i]))
carte=c(carte,prod(sin(the[1:(d-1)])))
prod(sin(the)^((d-2):0))*dmvnorm(carte,mean=mu,sigma=sigma)}
#Gibbs
T=1e4
#starting point
mu=(1:d)
mup=mu/sqrt(sum(mu^2))
mut=acos(mup[1])
for (i in 2:(d-1))
mut=c(mut,acos(mup[i]/prod(sin(mut))))
thes=matrix(mut,nrow=T,ncol=d-1,byrow=TRUE)
delta=rep(pi/2,d-1) #scale
past=target(thes[1,]) #current target
for (t in 2:T){
thes[t,]=thes[t-1,]
for (j in 1:(d-1)){
prop=thes[t,]
prop[j]=prop[j]+runif(1,-delta[j],delta[j])
prop[j]=prop[j]%%(2*pi-(j<d-1)*pi)
prof=target(prop)
if (runif(1)<prof/past){
past=prof;thes[t,]=prop}
}
}
เป็นไปไม่ได้อย่างเคร่งครัดเนื่องจากเป็นตัวแปรสุ่ม (ต่อเนื่อง) หากคุณต้องการให้มันมีความแปรปรวนเท่ากับ 1 นั่นคือ (โดยที่ตัวหนอนหมายความว่าเราประมาณค่าความแปรปรวน) จากนั้นคุณจะต้องกำหนดความแปรปรวนให้เป็นn} อย่างไรก็ตามความต้องการนี้อาจขัดแย้งกับ\นั่นคือเพื่อให้ได้ตัวอย่างที่มีความแปรปรวนนี้คุณต้องมีเส้นทแยงมุมของจะเท่ากับ{n}
ต้องการตัวอย่างแบบฟอร์มการกระจายนี้โดยทั่วไปคุณสามารถสร้าง IID ปกติมาตรฐานและจากนั้นคูณด้วย , รากที่สองของแล้วเพิ่มหมายถึง\