์๋ฌด๋์ด ๊ธธ์ ๋ฐ๋ผ ๊ฐ๊ณ ์ถ์ดํ๋ ๊ฒฝ์ฐ์ ๋๋น ํ์ฌ์ด ์ง๋ฌธ ์์ ์์ต๋๋ค .
๊ธฐ๋ณธ์ ์ผ๋ก ๋๋ ๊ฐ ๊ฐ์ฒด์ ์ฃผ์ด์ง ์์ ์ธก์ ๊ฐ์ด ๋ถ์ด์๋ N ๊ฐ์ ๊ฐ์ฒด ๋ก ๊ตฌ์ฑ๋ ๋ฐ์ดํฐ ์ธํธ ์ ๊ฐ์ง๊ณ ์์ต๋๋ค (์ด ๊ฒฝ์ฐ 2 ๊ฐ).
ฮฉN
I๋ ํ๋ฅ ์ ๊ฒฐ์ ํ๋ ๋ฐฉ๋ฒ์ด ํ์ ์๋ก์ด ์ค๋ธ์ ํธ ์ ์ํ๋ ฮฉ I๋ ํ๋ฅ ๋ฐ๋ ์๋ ์ง๋ฌธ์ ์๋ขฐ ๊ทธ๋์ F ๋ด๊ฐ ์ด๋ฏธ ํ๋จ ์ปค๋ ๋ฐ๋ ์ถ์ ๊ธฐ ํตํด์ .
p[xp,yp]ฮฉ
f^
์ ๋ชฉํ๋์ด ์๋ก์ด ์ค๋ธ์ ํธ์ ํ๋ฅ (ํ๋ํ๊ธฐ ๋๋ฌธ์ ์ค์ ์ด 2D ๋ฐ์ดํฐ์ ์ํ๋) ฮฉ์ , I๋ PDF๋ก ํตํฉ ๋ค์๋ค F๋ฅผ โ์์ ์ง์ง์ฒด์ ๊ฐ๋๋ ๋ฐ๋ โ ๊ด์ฐฐ ํ ๊ฒ๋ณด๋ค ์ ์ต๋๋ค โ. ์ โ๊ด์ฐฐโ๋ฐ๋๊ฐ f๋ฅผ ์๋ก์ด ๊ฐ์ฒด ํ๊ฐ (P) , ์ฆ : F ( X์ P , Y , P ) . ๋ฐ๋ผ์ ๋ฐฉ์ ์์ ํ์ด์ผํฉ๋๋ค.
p[xp,yp]ฮฉ
f^
f^
p
f^(xp,yp)
๋ด 2D ๋ฐ์ดํฐ ์ธํธ (python์ stats.gaussian_kde ๋ชจ๋์ ํตํด ์ป์)์ PDF๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
์ฌ๊ธฐ์ ๋นจ๊ฐ ์ ์ ๋ด ๋ฐ์ดํฐ ์ธํธ์ PDF ์์ ๊ทธ๋ ค์ง ์ ๊ฐ์ฒด ๋ํ๋ ๋๋ค .
p[xp,yp]๊ทธ๋์ ์ง๋ฌธ์ : pdf๊ฐ ๊ทธ๋ ๊ฒ ๋ณด์ผ ๋ ํ๊ณ ๋ํด ์์ ์ ๋ถ์ ์ด๋ป๊ฒ ๊ณ์ฐํ ์ ์์ต๋๊น?
x,y:f^(x,y)<f^(xp,yp)๋ํ๋ค
์๊ฒฌ ์ค ํ๋์์ ์ธ๊ธ ํ Monte Carlo ๋ฐฉ๋ฒ์ด ์ผ๋ง๋ ์ ์๋ํ๋์ง ํ์ธํ๊ธฐ ์ํด ๋ช ๊ฐ์ง ํ ์คํธ๋ฅผ ์ํํ์ต๋๋ค. ์ด๊ฒ์ด ๋ด๊ฐ ์ป์ ๊ฒ์ ๋๋ค :
์ ๋์ญํญ ์์ญ์ ๊ฒฝ์ฐ ๋ ๋์ญํญ์ด ๊ฑฐ์ ๋์ผํ ๋ณ๋์ ๋ํ๋ด๋ ๊ฐ์ด ์ฝ๊ฐ ๋ ํฌ๊ฒ ๋ํ๋ฉ๋๋ค. ํ์์์ ๊ฐ์ฅ ํฐ ๋ณํ๋ ์ฐจ์ด ์ค๋ค ์ค๋ฒ์ VS 2,500 1,000 ์ํ ๊ฐ์ ๋น๊ต ์ (x, y) = (2.4,1.5) ๋ฐ์ 0.0126
๋๋ ~1.3%
. ์ ๊ฒฝ์ฐ์๋ ์ด๊ฒ์ด ๋๋ถ๋ถ ํ์ฉ๋ฉ๋๋ค.
ํธ์ง : ๋ฐฉ๊ธ 2 ์ฐจ์์์ Scott์ ๊ท์น์ด ์ฌ๊ธฐ์ ์ฃผ์ด์ง ์ ์์ ๋ฐ๋ผ Silverman์ ๊ท์น๊ณผ ๋์ผํ๋ค๋ ๊ฒ์ ์์ ์ต๋๋ค .
๋ต๋ณ
๊ฐ๋จํ ๋ฐฉ๋ฒ์ ์ ๋ถ ์์ญ์ ๋์คํฐ ํํ๊ณ ์ ๋ถ์ ๋ํ ์ด์ฐ ๊ทผ์ฌ๋ฅผ ๊ณ์ฐํ๋ ๊ฒ์ ๋๋ค.
์ฃผ์ํด์ผ ํ ์ฌํญ์ด ์์ต๋๋ค.
-
ํฌ์ธํธ์ ๋ฒ์๋ณด๋ค ๋ ๋ง์ ๊ฒ์ ํฌํจํด์ผํฉ๋๋ค. ์ปค๋ ๋ฐ๋ ์ถ์ ์น๊ฐ ์ธ์ ๊ฐ๋ฅํ ๊ฐ์ ๊ฐ์ง ๋ชจ๋ ์์น๋ฅผ ํฌํจํด์ผํฉ๋๋ค. ์ฆ, ํฌ์ธํธ์ ๋ฒ์๋ฅผ ์ปค๋ ๋์ญํญ์ 3 ~ 4 ๋ฐฐ๋ก ํ์ฅํด์ผํฉ๋๋ค (๊ฐ์ฐ์ค ์ปค๋์ ๊ฒฝ์ฐ).
-
๋์คํฐ์ ํด์๋์ ๋ฐ๋ผ ๊ฒฐ๊ณผ๊ฐ ์ฝ๊ฐ ๋ค๋ฅผ ์ ์์ต๋๋ค. ํด์๋๋ ๋์ญํญ์ ์์ ๋ถ๋ถ์ด์ด์ผํฉ๋๋ค. ๊ณ์ฐ ์๊ฐ์ ๋์คํฐ์ ์ ์์ ๋น๋กํ๊ธฐ ๋๋ฌธ์ ์๋ ํ ๊ฒ๋ณด๋ค ๊ฑฐ์น ํด์๋๋ฅผ ์ฌ์ฉํ์ฌ ์ผ๋ จ์ ๊ณ์ฐ์ ์ํํ๋ ๋ฐ ๊ฑฐ์ ์๊ฐ์ด ๊ฑธ๋ฆฌ์ง ์์ต๋๋ค. ์ต๊ณ ์ ํด์๋. ๊ทธ๋ ์ง ์์ ๊ฒฝ์ฐ ๋ ์ ๋ฐํ ํด์๋๊ฐ ํ์ํ ์ ์์ต๋๋ค.
๋ค์์ 256 ํฌ์ธํธ์ ๋ฐ์ดํฐ ์ธํธ์ ๋ํ ๊ทธ๋ฆผ์ ๋๋ค.
ํฌ์ธํธ๋ ๋ ๊ฐ์ ์ปค๋ ๋ฐ๋ ์ถ์ ์น์ ๊ฒน์ณ์ง ๊ฒ์ ์ ์ผ๋ก ํ์๋ฉ๋๋ค. 6 ๊ฐ์ ํฐ ์ ์ ์ ์ ์๊ณ ๋ฆฌ์ฆ์ด ํ๊ฐ๋๋ "ํ๋ก๋ธ"์ ๋๋ค. ์ด๊ฒ์ 1000 x 1000 ์ ์ ํด์๋์์ 4 ๊ฐ์ ๋์ญํญ (๊ธฐ๋ณธ์ ์ผ๋ก 1.8 (์์ง)๊ณผ 3 (์ํ), 1/2, 1, 5 ๋จ์)์ ๋ํด ์ํ๋์์ต๋๋ค. ๋ค์ ์ฐ์ ๋ ๋งคํธ๋ฆญ์ค๋ ๊ฒฐ๊ณผ๊ฐ 6 ๊ฐ์ง ํ๋ก๋ธ ํฌ์ธํธ์ ๋์ญํญ์ ์ผ๋ง๋ ๊ฐํ ์ํฅ์ ๋ฏธ์น๋์ง๋ฅผ ๋ณด์ฌ์ค๋๋ค.
๋ณํ์ ๋ ๊ฐ์ง ์ด์ ๋ก ๋ฐ์ํฉ๋๋ค. ๋ถ๋ช ํ ๋ฐ๋ ์ถ์ ์น๊ฐ ๋ค๋ฅด๋ฏ๋ก ํ ๊ฐ์ง ํํ์ ๋ณ๋์ด ๋ฐ์ํฉ๋๋ค. ๋ ์ค์ํ ๊ฒ์ ๋ฐ๋ ์ถ์ ์น์ ์ฐจ์ด๊ฐ ๋จ์ผ ( "ํ๋ก๋ธ") ์ง์ ์์ ํฐ ์ฐจ์ด๋ฅผ ๋ง๋ค ์ ์๋ค๋ ๊ฒ ์ ๋๋ค. ํ์์ ๋ณํ์ ์ ๊ตฐ์ง์ ์ค๊ฐ ๋ฐ๋ "์ ์ง"์ฃผ์์์ ๊ฐ์ฅ ํฝ๋๋ค.์ด ๊ณ์ฐ์ด ๊ฐ์ฅ ๋ง์ด ์ฌ์ฉ๋๋ ์์น์ ๋๋ค.
์ด๋ ์ด๋ฌํ ๊ณ์ฐ ๊ฒฐ๊ณผ๋ฅผ ์ฌ์ฉํ๊ณ ํด์ ํ ๋ ์๋นํ์ฃผ์๊ฐ ํ์ํ๋ค๋ ๊ฒ์ ๋ณด์ฌ์ค๋๋ค. ์ด๋ ์๋์ ์ผ๋ก ์์์ ๊ฒฐ์ (์ฌ์ฉํ ๋์ญํญ)์ ๋งค์ฐ ๋ฏผ๊ฐ ํ ์ ์๊ธฐ ๋๋ฌธ์ ๋๋ค.
R ์ฝ๋
์ด ์๊ณ ๋ฆฌ์ฆ์ ์ฒซ ๋ฒ์งธ ํจ์์ 6 ์ค์ ํฌํจ๋์ด f
์์ต๋๋ค. ์ฌ์ฉ๋ฒ์ ์ค๋ช
ํ๊ธฐ ์ํด ๋๋จธ์ง ์ฝ๋๋ ์์ ๊ทธ๋ฆผ์ ์์ฑํฉ๋๋ค.
library(MASS) # kde2d
library(spatstat) # im class
f <- function(xy, n, x, y, ...) {
#
# Estimate the total where the density does not exceed that at (x,y).
#
# `xy` is a 2 by ... array of points.
# `n` specifies the numbers of rows and columns to use.
# `x` and `y` are coordinates of "probe" points.
# `...` is passed on to `kde2d`.
#
# Returns a list:
# image: a raster of the kernel density
# integral: the estimates at the probe points.
# density: the estimated densities at the probe points.
#
xy.kde <- kde2d(xy[1,], xy[2,], n=n, ...)
xy.im <- im(t(xy.kde$z), xcol=xy.kde$x, yrow=xy.kde$y) # Allows interpolation $
z <- interp.im(xy.im, x, y) # Densities at the probe points
c.0 <- sum(xy.kde$z) # Normalization factor $
i <- sapply(z, function(a) sum(xy.kde$z[xy.kde$z < a])) / c.0
return(list(image=xy.im, integral=i, density=z))
}
#
# Generate data.
#
n <- 256
set.seed(17)
xy <- matrix(c(rnorm(k <- ceiling(2*n * 0.8), mean=c(6,3), sd=c(3/2, 1)),
rnorm(2*n-k, mean=c(2,6), sd=1/2)), nrow=2)
#
# Example of using `f`.
#
y.probe <- 1:6
x.probe <- rep(6, length(y.probe))
lims <- c(min(xy[1,])-15, max(xy[1,])+15, min(xy[2,])-15, max(xy[2,]+15))
ex <- f(xy, 200, x.probe, y.probe, lim=lims)
ex$density; ex$integral
#
# Compare the effects of raster resolution and bandwidth.
#
res <- c(8, 40, 200, 1000)
system.time(
est.0 <- sapply(res,
function(i) f(xy, i, x.probe, y.probe, lims=lims)$integral))
est.0
system.time(
est.1 <- sapply(res,
function(i) f(xy, i, x.probe, y.probe, h=1, lims=lims)$integral))
est.1
system.time(
est.2 <- sapply(res,
function(i) f(xy, i, x.probe, y.probe, h=1/2, lims=lims)$integral))
est.2
system.time(
est.3 <- sapply(res,
function(i) f(xy, i, x.probe, y.probe, h=5, lims=lims)$integral))
est.3
results <- data.frame(Default=est.0[,4], Hp5=est.2[,4],
H1=est.1[,4], H5=est.3[,4])
#
# Compare the integrals at the highest resolution.
#
par(mfrow=c(1,1))
panel <- function(x, y, ...) {
points(x, y)
abline(c(0,1), col="Red")
}
pairs(results, lower.panel=panel)
#
# Display two of the density estimates, the data, and the probe points.
#
par(mfrow=c(1,2))
xy.im <- f(xy, 200, x.probe, y.probe, h=0.5)$image
plot(xy.im, main="Bandwidth=1/2", col=terrain.colors(256))
points(t(xy), pch=".", col="Black")
points(x.probe, y.probe, pch=19, col="Red", cex=.5)
xy.im <- f(xy, 200, x.probe, y.probe, h=5)$image
plot(xy.im, main="Bandwidth=5", col=terrain.colors(256))
points(t(xy), pch=".", col="Black")
points(x.probe, y.probe, pch=19, col="Red", cex=.5)
๋ต๋ณ
์ ์ ํ ์์ ๊ด์ธก์น๊ฐ์๋ ๊ฒฝ์ฐ ํตํฉ์ ์ ํ ์ํํ์ง ์์๋๋ฉ๋๋ค. ์๋ก์ด ํฌ์ธํธ๊ฐ . ๋น์ ์ด ๋ฐ๋ ์ถ์ ์ด ๊ฐ์ ; ๋ํ ๊ด์ธก์น ์ ๋ฅผ ์์ฝ ํ๊ณ ํ๋ณธ ํฌ๊ธฐ๋ก ๋๋๋๋ค. ์ด๊ฒ์ ํ์ํ ํ๋ฅ ์ ๋ํ ๊ทผ์ฌ์น๋ฅผ ์ ๊ณตํฉ๋๋ค.
x0f^
x
f^(x)<f^(x0)
์ด๊ฒ์ ๊ฐ "๋๋ฌด ์์ง ์๋ค"๊ณ ์ํ ํฌ๊ธฐ๊ฐ ์ ๋ฐ๋ ์ง์ญ์์ ์ ์ ํ ์ถ์ ์น๋ฅผ ์ ๊ณตํ๊ธฐ์ ์ถฉ๋ถํ ํฌ๊ณ (ํ์ฐ ๋ ์ ๋๋ก) ๊ฐ์ ํฉ๋๋ค. ์ด๋ณ ๋ ๊ฒฝ์ฐ 20000 ๊ฑด์ด ์ถฉ๋ถํ ์ปค ๋ณด์ ๋๋ค .
f^(x0)x