Randomized 된 function shape을 만드는 방법은 첨부된 파일의 두가지 방법이 있으며,
기본적으로 uniform한 [0,1]사이의 랜덤넘버를 이용합니다. 가우시안과 같이 기본적인
함수는 첫번째 transformation method로 가능하며, 단지 하나의 uniform한 랜덤넘버를 사용합니다.
Buzzly님이 첫번째로 제시하신 링크에 보시면, 첫번째 수식 아래 부분에 2개의 독립인 확률변수 (X1, X2)를 가지고 시작한다고 써있습니다.
X1, X2가 모두 균일분포에서 생성된 확율변수이긴 하지만, 둘은 연관이 없는 2개의 확률변수 입니다.
또한, 그 수식도 제가 처음에 올렸던 수식과 똑같은 것 같습니다.
그리고, 두번째 링크에 보시면 Z1과 Z2 (문서에서는 Y1, Y2로 표현했습니다.)가 어떻게 정규분포가 되는지 설명하는 내용이 있습니다.
일반 rand 함수가
정규분포로 알고있는데요.
아니죠. 그건
아니죠. 그건 균일분포예요.
변환해도 되겠죠
rand함수가 "만약" 그냥 균일한 분포로 주어지면, 그걸 가우시안 함수 exp(-a*x^2)에 넣고 돌리면 되지 않을까요?
---------------------------
snowall의 블로그입니다.
http://snowall.tistory.com
피할 수 있을때 즐겨라! http://melotopia.net/b
아 생각해보니 아니군요.
오래간만에 용어를 접하니 정규분포라는 말 자체가 헛갈렸네요.
균등분포(?) 리스트가 들어오면 정규분포 리스트로 변환해주는 국적불명의 코드입니다.
C++로 적고싶었는데 오래간만에 쓰니깐 STL이랑 문법이 생각이 안나네요.
대충 의미만 파악하시면 될 듯 합니다.
기호 때문에 짤렸네요.
TYPELIST normdist_sampler(TYPELIST d, TYPE mean, TYPE sigma) {
TYPE firstRN = - log(d.next());
TYPE secondRN = - log(d.next());
if( 2 * firstRN >= pow(secondRN - 1, 2) ) {
if( d.next() < 0.5 ) {
TYPELIST r;
r.push_front(-sigma * secondRN + mean);
return r;
} else {
TYPELIST r;
r.push_front(sigma * secondRN + mean);
r.insert(normdist_sampler(d, mean, sigma);
return r;
}
}
}
출근하기전에 급하게 올린거라...
설명을 하자면 d는 균등(균일?)분포의 리스트고 출력은 정규분포의 리스트입니다.
mean과 sigma는 평균과 표준편차입니다.
본의 아니게 도배를 해서 죄송합니다
코드는 C++도 아니고 Java도 아닙니다. 급하게 끄적이다 보니까 대충 생각나는데로 적었습니다. C++로 적으려고 했는데 오래간만에 C++으로 쓰려고 하니 STL이 기억이 안나네요. 원래 이 말을 코드와 함께 붙여넣었는데 어디론가 사라져있어서 확인하고 다시 적습니다.
gsl 써보세요
http://www.gnu.org/software/gsl/
X1, X2 ~ U(0,1) 이라고
X1, X2이 각각 ~ U(0,1) 이라고 한다면,
Z1 = sqrt(-2*ln(X1))*cos(2*pi*X2);
Z2 = sqrt(-2*ln(X1))*sin(2*pi*X2); 이면,
Z1, Z2는 각각 ~N(0, 1) 입니다.
Randomized 된 function
Randomized 된 function shape을 만드는 방법은 첨부된 파일의 두가지 방법이 있으며,
기본적으로 uniform한 [0,1]사이의 랜덤넘버를 이용합니다. 가우시안과 같이 기본적인
함수는 첫번째 transformation method로 가능하며, 단지 하나의 uniform한 랜덤넘버를 사용합니다.
일반적으로 누적밀도
일반적으로 누적밀도 함수의 역함수는 균일분포를 따릅니다.
하지만, 정규분포의 확률밀도 함수를 가지고 누적밀도함수를 구하는 것은 쉽지가 않기 때문에 약간의 트릭을 사용합니다.
위에 hokim님이
위에 hokim님이 설명하신 transformation method로
Gaussian random number를 만들어 낼 수 있는 방법입니다.
http://www.taygeta.com/random/gaussian.html
Numerical Recipe( in C) 를 보시면 C로 된 소스코드도
살짝 나와있습니다.
http://www.nrbook.com/b/bookcpdf/c7-2.pdf
Buzzly님이 첫번째로
Buzzly님이 첫번째로 제시하신 링크에 보시면, 첫번째 수식 아래 부분에 2개의 독립인 확률변수 (X1, X2)를 가지고 시작한다고 써있습니다.
X1, X2가 모두 균일분포에서 생성된 확율변수이긴 하지만, 둘은 연관이 없는 2개의 확률변수 입니다.
또한, 그 수식도 제가 처음에 올렸던 수식과 똑같은 것 같습니다.
그리고, 두번째 링크에 보시면 Z1과 Z2 (문서에서는 Y1, Y2로 표현했습니다.)가 어떻게 정규분포가 되는지 설명하는 내용이 있습니다.
댓글 달기