결합확률분포란?
이산확률변수가 두개인 확률질량함수
데이터공간 x,y에에서 데이터공간에서 결합분포P(x,y)는 데이터 공간을 정의
p(x)는 입력 x에 대한 주변확률분포이고 y의 정보를 포함하고 있지 않다.(x의 관점)
조건확률분포 P(x|y)는 데이터 공간에서 x,y의 관계를 표현한다.
출처
Pattern Recognition and Machine Learning, Bishop
import math
total = 100000
radius = 1
# low값은 포함, high값은 포함되지 않음
x = np.random.uniform(low = 0, high = 1, size = total)
y = np.random.uniform(low = 0, high = 1, size = total)
dist = np.sqrt(x**2 + y**2)
n = sum(dist < radius) #거리 < 반지름인 점
print(n / total) #추정한 원의 넓이
print(math.pi / 4) #실제 원의 넓이
몬테카를로 방법을 이용하여 기대값을 구할 수 있는데 이는 다음과 같은 식이 성립한다.
몬테카를로 방법을 이용하여 기대값을 구하여 어려운 적분값을 도출 할 수 있다.
해당 식은 가우시안 함수로써 적분하기 어려운 함수이다.
따라서, 직접적으로 적분을 하지 않고 기댓값으로 넓이를 대략적으로 구할 수 있는데 기댓값의 공식은 다음과 같다.
해당 식이 의미하는바를 그래프로 그려보게 되면 다음과 같다.
이를 이용하여 수식을 도출해 보게 된다면 다음과 같다.
위와 같은 방식으로 적분의 값을 쉽게 구할 수 있다.
import numpy as np
def gaussian_fun(x):
return np.exp(-x ** 2)
class MonteCarloTestPerformer:
def __init__(self):
self.repeat = 100000 # 반복 연산 횟수 지정
# 범위는 -1 부터 1사이의 값으로 고정
def solution1(self):
cnt = 0
for i in range(self.repeat): # 점을 무작정 다 찍어주는 방법 (0 ~ 1사이)
x = gaussian_fun(np.random.uniform(0, 1))
y = np.random.uniform(0, 1)
if x - y >= 0:
cnt += 1
print((cnt / 100000) * 2)
# 범위는 -1 부터 1사이의 값으로 고정
def solution2(self):
low = -1
high = 1
int_len = np.abs(high - low) # 범위를 고려한 구현
stat = []
for _ in range(self.repeat):
x = np.random.uniform(low=low, high=high, size=1)
stat.append(gaussian_fun(x))
print(np.mean(stat) * int_len)
if __name__ == '__main__':
performer = MonteCarloTestPerformer()
performer.solution1()
performer.solution2()
출처
Naver BoostCamp AI Tech - edwith 강의
Naver BoostCamp AI Tech - edwith 강의
https://bskyvision.com/455
http://blog.naver.com/PostView.nhn?blogId=mykepzzang&logNo=220836609004
https://datacookbook.kr/59
https://ko.wikipedia.org/wiki/%EB%B6%84%EC%82%B0
https://m.blog.naver.com/PostView.nhn?blogId=s2ak74&logNo=220616766539&proxyReferer=https:%2F%2Fwww.google.com%2F
https://m.blog.naver.com/PostView.nhn?blogId=chochila&logNo=40144022678&proxyReferer=https:%2F%2Fwww.google.com%2F
https://destrudo.tistory.com/15
https://m.blog.naver.com/PostView.nhn?blogId=keebh&logNo=20115141888&proxyReferer=https:%2F%2Fwww.google.com%2F