(Python) 기대치 · 몬테카를로 샘플링을 정중하게 이해하려고했습니다

소개



베이즈 통계학을 배우는 데 기대치를 드러냈습니다.

하기 책을 참고로 했습니다.
  • 기계 학습 시작 시리즈 베이즈 추론을 통한 기계 학습 시작
  • 패턴 인식 및 기계 학습 (베이즈 이론에 의한 통계적 예측)

  • 기대치란?



     
    기대치(expectation)란, 어느 함수 $f(x)$의 확률 분포 $p(x)$ 아래에서의 $f(x)$의 평균치를 가리킵니다. 표기법으로는 $E[f]$라고 씁니다.

    이산 분포에서는 다음과 같이 나타냅니다.
    
    E[f] = \sum_x p(x)f(x)
    
    

    반면 연속 변수의 경우 적분으로 표현할 수 있습니다.
    
    E[f] = \int p(x)f(x)dx
    
    

    엔트로피



    확률 분포 $p(x)$에 대한 다음과 같은 기대치를 엔트로피(entropy)라고 합니다.
     
    \begin{align}
    H[p(x)]& = - \sum_x p(x) ln(p(x))\\
    
    \end{align}
    
    

    유한화에서의 근사(몬테카를로 샘플링)



    분포 $p(x)$에서 독립적으로 추출된 샘플 집합을 $\bf {z}^{(n)} (n = 1,...,N)$로 했을 때 기대값은 처럼 근사할 수 있습니다.
    
    E[f] = \frac{1}{L} \sum_{n=1}^{N}f(\bf{z}^{(N)})
    
    

    됩니다.

    여기서 예제로 생각합니다.
    예제
     $p(x=1)=0.3,p(x=1)=0.7$가 되는 이산 분포를 생각합니다.

    엔트로피의 정의에서 엔트로피는
    \begin{align}
    H[p(x)]& = - \sum_x p(x) ln(p(x))\\
    &=-(p(x=1)lnp(x=1) + p(x=0)lnp(x=0) )\\
    &= -(\frac{3}{10}ln\frac{3}{10}+\frac{7}{10}ln\frac{7}{10})\\
    &=0.610
    \end{align}
    
    

    됩니다.
    음, 이것을 유한화로 근사하는 경우의 계산을 해 보겠습니다. random.uniform 메소드에 의해 0~1의 무작위인 값을 출력시켜, 그것이 $p(x=1)=0.3$보다 커지는지 어떤지로 $x=1$인가 $x=2$인가 어떤가 판별하고 있습니다.
    그리고, $x=1,2$가 되는 횟수를 cnt 로 세게 하는 것을 하고 있습니다.
     
     아래와 같은 프로그램이 됩니다. 시험에 1000회 계산하고 있습니다.
    cnt = []
    proba_1  =[]
    proba_2  =[]
    time = 1000
    a = random.uniform(0,1)
    exp =[]
    
    for i in range(time):
        a = random.uniform(0,1)
        if a > p1:
            cnt = np.append(cnt,1)
        else:
            cnt = np.append(cnt, 0)
        proba_1 = np.append(proba_1, (i+1-sum(cnt))/(i+1))
        proba_2 = np.append(proba_2, sum(cnt)/(i+1))
        exp = np.append(exp, -(((i+1-sum(cnt))*math.log(p1))+((sum(cnt))*math.log(p2)))/(i+1))
    
    plt.xlabel('time')
    plt.ylabel('probability')
    plt.plot(time_plot, proba_2, label="p2")
    plt.plot(time_plot, proba_1, label="p1")
    plt.legend()       
    
    



    $p(x=1)=0.3,p(x=2)=0.7$에 대략 100회 이후 수렴해 나가는 것을 알았습니다.



    이쪽도 100회 이후로 원래 요구하고 있던 기대치(=엔트로피)의 0.61당에 수렴하고 있는 것을 알았습니다.

    확실히 이 기대치 근사의 수법이 문제없는 것을 확인할 수 있었습니다.

    끝에



    이번은 매우 간단한 예제였기 때문에, 산출 및 확인하는 것이 용이했습니다. 그러나 실제 문제에서는 기대치가 해석적으로 구하기 어려운 경우가 대부분입니다.
    따라서, 이 몬테카를로 샘플링으로 근사하는 것을 기억해 두면 유익하다고 생각합니다.
      

    프로그램 전문은 여기입니다.
    htps : // 기주 b. 코m/후미오-에이씨/ゔぃ20200520

    좋은 웹페이지 즐겨찾기