Deeper Learning

Monte Carlo Method 본문

Statistics & Math

Monte Carlo Method

Dlaiml 2021. 1. 29. 13:12

Monte Carlo Method

난수를 이용하여 함수의 값을 확률적으로 계산하는 알고리즘 이다.

 

확률분포를 모를 때 주어진 데이터를 사용하여 기대값을 계산하기 위해 몬테카를로 샘플링 방법이 사용된다.

 

Monte Carlo Method Formula

독립추출이 보장된다면 대수의 법칙에 의하여 모평균으로의 수렴이 보장된다.

 

 Examples

위키백과: 몬테 카를로 방법 

정사각형에 내부의 사분면에서 Monte Carlo 방법을 사용해서 pi의 값을 추정할 수 있다.

정사각형 위에 x, y 좌표가 각각 0~1 범위의 균일분포를 따르도록 점을 찍는다.

사분면 내부의 점의 개수를 세어 전체 점 개수와 비교하여 비율을 계산하여 4를 곱하여 pi의 근사치를 계산할 수 있다.

 

 

위와 같은 수식의 값도 Monte Carlo 방법을 사용하여 추정할 수 있다.

구간의 길이가 -1 ~ 1로 2가 되기 때문에 위의 수식의 1/2를 곱한 값을 구하는 방식으로 계산이 가능하다.

 

위의 식의 우변은 균등분포에서 추출한 x(i)를 함수에 넣어 y축의 값들이 생성되고 이를 평균내어 y=a 형태의 함수를 생성한다. 

새로 만들어진 함수의 적분값은 x축 구간의 길이인 2 * a로 이는 실제 적분값과 유사하다. 

 

import numpy as np

def monte_carlo(f, x_min, x_max, sample_size=100, repeat=20):
	x_len = x_max - x_min
    stat = []
    for _ in range(repeat):
    	x = np.random.uniform(low=x_min, high=x_max, size=sample_size)
        y = f(x)
        area = x_len * np.mean(y)
        stat.append(area)
    return np.mean(stat), np.std(stat)
    
 def f(x):
 	return np.exp(-x**2)
    
 print(monte_carlo(f,-1,1,100,20))
 
 # 1.4938... , 0.0039...
 
        

 

True value

실제 값과 큰 차이를 보이지 않는것을 볼 수 있다. (오차범위 이내)

균일하게 샘플링 된 정도, 샘플링 한 size가 클 수록 오차는 줄어든다.

 

 

 

'Statistics & Math' 카테고리의 다른 글

Eigenvector & Eigenvalue  (0) 2021.07.20
Community Detection  (0) 2021.02.25
PageRank  (0) 2021.02.24
Graph  (0) 2021.02.23
Bayes' theorem Introduction  (0) 2021.02.01
Comments