ฉันจะให้คำตอบทั่วไป n- มิติที่เหมาะกับกรณีสองมิติด้วย ในสามมิติอะนาล็อกของดิสก์คือปริมาตรของลูกบอลทึบ (ทรงกลม)
มีสองวิธีที่ฉันจะพูดถึง หนึ่งในนั้นที่ฉันเรียกว่า"แม่นยำ"และคุณจะได้คำตอบที่สมบูรณ์ในอาร์ตัวที่สองที่ฉันเรียกว่าฮิวริสติกกและเป็นเพียงความคิดเท่านั้นไม่มีวิธีแก้ปัญหาที่สมบูรณ์
โซลูชัน "แม่นยำ"
ทางออกของฉันอยู่บนพื้นฐานของMarsaglia และมุลเลอร์ผลงาน โดยทั่วไปมันเกิดขึ้นเพื่อให้เวกเตอร์เกาส์นอร์มัลไลซ์ตามปกติของมันจะให้จุดกระจายอย่างสม่ำเสมอบนไฮเปอร์สเฟียร์ d-มิติ:
d1 /วัน
n <- 1e4
rho <- sqrt(runif(n))
# d - # of dimensions of hyperdisk
d = 2
r = matrix(rnorm(n*d),nrow=n,ncol=d)
x = r/rep(sqrt(rowSums(r^2))/rho,1)
plot(x[,1], x[,2], pch=19, cex=0.6, col="#00000020")
นี่คือข้อมูลโค้ดสำหรับกรณี 3 มิตินั่นคือลูกบอลทึบ:
library(scatterplot3d)
n <- 1e3
# d - # of dimensions of hyperdisk
d=3
rho <- (runif(n))^(1/d)
r = matrix(rnorm(n*d),nrow=n,ncol=d)
x = r/rep(sqrt(rowSums(r^2))/rho,1)
scatterplot3d(x[,1], x[,2], x[,3])
วิธีการแก้ปัญหา
Vn( R ) = πn2Γ ( n2+ 1 )Rn
Rnในการเรียนรู้ของเครื่อง
Σdi = 1x2ผม< R2 2ปัญหาคือว่าสำหรับมิติที่สูง d เกือบทุกจุดจะอยู่นอกวง! คุณจะต้องทิ้งตัวอย่างส่วนใหญ่ของคุณ
1d+ 2√ 2ดังนั้นแทนที่จะเลือกจุดอย่างสม่ำเสมอจากลูกบาศก์เราจะสุ่มตัวอย่างพิกัดคาร์ทีเซียนโดยใช้ Gaussian จากนั้นใช้การสุ่มตัวอย่างปฏิเสธกับพวกมัน ด้วยวิธีนี้เราจะไม่ต้องสูญเสียความหลากหลายที่สร้างขึ้นแบบสุ่ม นี่จะเป็นรูปแบบของเทคนิคการสุ่มตัวอย่างที่สำคัญ