Importance Sampling 예제
xxxxxxxxxx
17
1
md"""
2
```math
3
\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
"""
xxxxxxxxxx
1
using Distributions, Plots, Random, LaTeXStrings
인 경우 즉 Uniform distribution
xxxxxxxxxx
14
1
md"""
2
###### $p(x) = \frac{2}{\pi}$ 인 경우 즉 Uniform distribution
3
```math
4
\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
"""
인 경우 즉 와 유사한 분포를 선택
xxxxxxxxxx
14
1
md"""
2
###### $p(x) = \frac{8x}{\pi^2}$ 인 경우 즉 $f(x)$ 와 유사한 분포를 선택
3
```math
4
\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
xxxxxxxxxx
1
1
Random.seed!(13)
f (generic function with 1 method)
xxxxxxxxxx
1
1
f(x) = sin(x)
p₁ (generic function with 1 method)
x
1
p₁(x) = 2/π
p₂ (generic function with 1 method)
xxxxxxxxxx
1
1
p₂(x) = 8x/π^2
16
xxxxxxxxxx
1
1
N=16
100
xxxxxxxxxx
1
1
epoch = 100
mean (generic function with 92 methods)
x
1
begin
2
const π² = π*π
3
const ∑ = sum
4
const σ = std
5
const μ = mean
6
end
x
1
begin
2
x = 0:0.01:π/2
3
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
end
xxxxxxxxxx
1
begin
2
arrF₁ = Array{Float64,1}()
3
arrF₂ = Array{Float64,1}()
4
for i in 1:epoch
5
r = rand(N)
6
x₁ = π * r / 2
7
x₂ = π * .√(r) / 2
8
F₁ = ∑(sin.(x₁)./p₁.(x₁)) / N
9
F₂ = ∑(sin.(x₂)./p₂.(x₂)) / N
10
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
end
0.989533
1.00255
xxxxxxxxxx
1
1
μ(arrF₁), μ(arrF₂)
0.119664
0.0324535
xxxxxxxxxx
1
1
σ(arrF₁),σ(arrF₂)
0.0892865
0.00655753
x
1
begin
2
mse₁ = ∑( (arrF₁ .- 1).^2 ) / N
3
mse₂ = ∑( (arrF₂ .- 1).^2 ) / N
4
mse₁,mse₂
5
end
6
"Mean squre error of (arrF₁, arrF₂) : (0.08928651574771553, 0.006557529878748583)"
x
1
"Mean squre error of (arrF₁, arrF₂) : ($mse₁, $mse₂)"