Importance Sampling 예제
xxxxxxxxxx17
1
md"""2
```math3
\begin{align*}4
F &= \int_a^b f(x) dx \\5
6
\eta &= \frac{f(\xi)}{p(\xi)}, \int_a^b p(\xi)d\xi = 1 \\7
8
\text{여기서 $p$ 는 probability density function(PDF)} \\9
E\left[\eta\right] &= E\left[ \frac{f(\xi)}{p(\xi)} \right] = \int_a^b \frac{f(x)}{p(x)}p(x) dx = \int_a^b f(x)dx = I \\10
11
E\left[\eta\right] &= F = E\left[ \frac{f(\xi)}{p(\xi)} \right] \approx \frac{1}{N}\sum_{i=0}^{N-1}\frac{f(x)}{p(x)} \\12
F &= \int_a^b f(x) dx \approx \langle F^N \rangle=\frac{1}{N}\sum_{i=0}^{N-1}\frac{f(X_i)}{p(X_i)}, X_i \sim p \\13
\text{$X_i$는 p 분포에서 샘플링한 값}14
15
\end{align*}16
```17
"""xxxxxxxxxx1
using Distributions, Plots, Random, LaTeXStrings 인 경우 즉 Uniform distribution
xxxxxxxxxx14
1
md"""2
###### $p(x) = \frac{2}{\pi}$ 인 경우 즉 Uniform distribution3
```math4
\begin{align*}5
f(x) &= \sin(x) \\6
p(x) &= \color{red} \frac{2}{π} \\7
CDF(x) & = \frac{2}{π}x \\8
r_i &= 0 \sim 1 = CDF(x_i) = \frac{2}{π}x_i\\9
x_i &= 0 \sim \frac{\pi}{2} = \color{red}\frac{π}{2}r_i \\10
\langle F^N \rangle &= \frac{1}{N}\sum_{i=0}^{N-1}\frac{\sin(x_i)}{p(x_i)} \\11
\end{align*} \\12
13
```14
""" 인 경우 즉 와 유사한 분포를 선택
xxxxxxxxxx14
1
md"""2
###### $p(x) = \frac{8x}{\pi^2}$ 인 경우 즉 $f(x)$ 와 유사한 분포를 선택3
```math4
\begin{align*}5
f(x) &= \sin(x) \\6
p(x) &= \color{red} \frac{8}{\pi^2}x \\7
CDF(x) & = \frac{4x^2}{\pi^2} \\8
r_i &= 0 \sim 1 = CDF(x_i) = \frac{4x_i^2}{\pi^2}\\9
x_i &= 0 \sim \frac{\pi}{2} = \color{red}\frac{\pi}{2}\sqrt{r_i} \\10
\langle F^N \rangle &= \frac{1}{N}\sum_{i=0}^{N-1}\frac{\sin(x_i)}{p(x_i)} \\11
\end{align*} \\12
13
```14
"""0x0000000d
1942364238
1073583280
1215809738
1073453074
-1714420386
1073447762
-356802344
1073021814
-1864483401
1072881260
-907949491
1073359987
-1244669560
1073165764
1337556723
1073246322
-1210519819
1073123387
-492659270
1073326154
-56294547
1072963348
654307797
1073646794
598513278
-416580782
1018899645
745312242
382
0
0.0
0.0
0.0
0.0
0.0
0.0
0.0
0.0
0.0
0.0
0.0
0.0
0.0
0.0
0.0
0.0
0.0
0.0
0.0
0.0
0.0
0.0
0.0
0.0
0.0
0.0
0.0
0.0
0.0
0.0
0x00000000000000000000000000000000
0x00000000000000000000000000000000
0x00000000000000000000000000000000
0x00000000000000000000000000000000
0x00000000000000000000000000000000
0x00000000000000000000000000000000
0x00000000000000000000000000000000
0x00000000000000000000000000000000
0x00000000000000000000000000000000
0x00000000000000000000000000000000
0x00000000000000000000000000000000
0x00000000000000000000000000000000
0x00000000000000000000000000000000
0x00000000000000000000000000000000
0x00000000000000000000000000000000
0x00000000000000000000000000000000
0x00000000000000000000000000000000
0x00000000000000000000000000000000
0x00000000000000000000000000000000
0x00000000000000000000000000000000
0x00000000000000000000000000000000
0x00000000000000000000000000000000
0x00000000000000000000000000000000
0x00000000000000000000000000000000
0x00000000000000000000000000000000
0x00000000000000000000000000000000
0x00000000000000000000000000000000
0x00000000000000000000000000000000
0x00000000000000000000000000000000
0x00000000000000000000000000000000
1002
0
xxxxxxxxxx1
1
Random.seed!(13)f (generic function with 1 method)xxxxxxxxxx1
1
f(x) = sin(x)p₁ (generic function with 1 method)x
1
p₁(x) = 2/πp₂ (generic function with 1 method)xxxxxxxxxx1
1
p₂(x) = 8x/π^216xxxxxxxxxx1
1
N=16100xxxxxxxxxx1
1
epoch = 100mean (generic function with 92 methods)x
1
begin2
const π² = π*π3
const ∑ = sum4
const σ = std5
const μ = mean 6
endx
1
begin2
x = 0:0.01:π/23
plot(x,x->2/π,linewidth=2,label=L"p_1(x)=2/\pi")4
plot!(x,x->8x/π²,linewidth=2,label=L"p_2(x)=8x/\pi^2")5
plot!(x,x->sin(x),linewidth=2,label=L"f(x)=sin(x)",legend=:bottomright)6
endxxxxxxxxxx1
begin 2
arrF₁ = Array{Float64,1}()3
arrF₂ = Array{Float64,1}() 4
for i in 1:epoch5
r = rand(N)6
x₁ = π * r / 27
x₂ = π * .√(r) / 28
F₁ = ∑(sin.(x₁)./p₁.(x₁)) / N9
F₂ = ∑(sin.(x₂)./p₂.(x₂)) / N10
push!(arrF₁,F₁)11
push!(arrF₂,F₂)12
end 13
plot([1:epoch],x->1,line = (:dot, 2),label=L"F")14
plot!(arrF₁,label=L"uniform\;sampling:\langle F^N_1 \rangle",linewidth=2,marker =(:hex,3))15
plot!(arrF₂,label=L"importance\;sampling:\langle F^N_2 \rangle",linewidth=2,yticks=(-0.5:0.1:1.5),marker=(:circle,3),legend=:topright ) 16
end0.989533
1.00255
xxxxxxxxxx1
1
μ(arrF₁), μ(arrF₂)0.119664
0.0324535
xxxxxxxxxx1
1
σ(arrF₁),σ(arrF₂)0.0892865
0.00655753
x
1
begin2
mse₁ = ∑( (arrF₁ .- 1).^2 ) / N3
mse₂ = ∑( (arrF₂ .- 1).^2 ) / N4
mse₁,mse₂5
end6
"Mean squre error of (arrF₁, arrF₂) : (0.08928651574771553, 0.006557529878748583)"x
1
"Mean squre error of (arrF₁, arrF₂) : ($mse₁, $mse₂)"