2010-01-16 4 views
23

평균 0과 시그마 1이있는 정규 분포를 생성하기 위해 boost :: normal_distribution을 사용하려고합니다.부스트 정규 분포 클래스를 사용하는 방법은 무엇입니까?

일부 값은 -1 이상 1 이하이므로 다음 코드는 작동하지 않습니다. 해서는 안됩니다.). 내가 잘못하고있는 것을 지적 해 주실 수 있습니까? 내 컴퓨터에

#include <boost/random.hpp> 
#include <boost/random/normal_distribution.hpp> 

int main() 
{ 
    boost::mt19937 rng; // I don't seed it on purpouse (it's not relevant) 

    boost::normal_distribution<> nd(0.0, 1.0); 

    boost::variate_generator<boost::mt19937&, 
          boost::normal_distribution<> > var_nor(rng, nd); 

    int i = 0; for (; i < 10; ++i) 
    { 
    double d = var_nor(); 
    std::cout << d << std::endl; 
    } 
} 

결과는 다음과 같습니다

0.213436 
-0.49558 
1.57538 
-1.0592 
1.83927 
1.88577 
0.604675 
-0.365983 
-0.578264 
-0.634376 

모든 값이 -1과 1

사전에 여러분 모두 감사합니다 사이에 없습니다 볼 수 있듯이!

편집 : 이것은 연습을하기 전에 마감일을 지키고 이론을 공부하지 않을 때 일어납니다.

+7

나는 거의 모든 통계를 배제했으나 분산 (분포의 ctor의 두 번째 매개 변수)은 반드시 범위에 대한 절대적인 컷오프를 지정하지 않습니다. 그것은 밖으로 펼쳐지는 일의 척도입니다. –

+0

@Neil Butterworth : 생성자의 두 번째 매개 변수는 표준 편차 (분산의 제곱근)입니다. – jason

+0

글쎄, 나는 거의 모든 것을 잊어 버렸다고 말했어! –

답변

29

일부 값은 -1 이상 1 이하이므로 다음 코드는 작동하지 않습니다. 내가 잘못하고있는 것을 지적 해 주실 수 있습니까?

아니오, 이것은 표준 편차의 오해 정규 분포 (생성자 1 두 번째 파라미터)이다.

정규 분포는 친숙한 종 곡선입니다. 이 커브는 사실상 값의 분포를 알려줍니다. 벨 커브가 가장 가까운 지점에 가까운 값은 멀리있는 값 (분포의 꼬리)보다 가능성이 큽니다.

표준 편차는 값의 분산 정도를 나타냅니다. 숫자가 작을수록 평균값 주변에 더 집중된 값이 있습니다. 숫자가 클수록 집중도가 낮아집니다. 아래 이미지에서 빨간색 곡선에는 분산 (분산은 표준 편차의 제곱입니다)이 0.2 인 것을 볼 수 있습니다. 이것을 평균이 같지만 분산이 1.0 인 녹색 곡선과 비교하십시오. 녹색 커브의 값이 빨간색 커브와 관련하여 더 넓어지는 것을 볼 수 있습니다. 자주색 곡선의 분산 값은 5.0이고 값은 더욱 분산되어 있습니다.

따라서 값이 [-1, 1]으로 제한되지 않는 이유를 설명합니다. 그러나 68 %의 값이 항상 평균의 표준 편차 이내라는 것은 흥미로운 사실입니다. 그래서 재미있는 테스트로서 mean 0과 variance 1을 가진 정규 분포로부터 많은 수의 값을 그리고 평균의 표준 편차 이내의 수를 세는 프로그램을 작성하십시오. 68 %에 가까운 수치를 얻어야합니다 (좀 더 정확하려면 68.2689492137 %).

1

alt text

: 부스트 documentation에서 :

normal_distribution(RealType mean = 0, RealType sd = 1);

가 정규 분포를 구축은 평균 및 표준 편차 SD 의미.

8

당신은 아무 잘못도 없습니다. 정규 분포의 경우 시그마는 범위가 아닌 표준 편차를 지정합니다. 충분한 샘플을 생성하면 그 중 약 68 %는 [평균 - 시그마, 평균 + 시그마], 2 시그마 내에서 약 95 %, 및 3 시그마 내에서 99 % 이상이라는 것을 알 수 있습니다.