읽기일기

Think Bayes (2) 계산 통계


파이썬을 활용한 베이지안 통계, 앨런 B. 다우니 지음, 권정민 옮김/한빛미디어

2.1 분포

통계에서 분포는 어떤 값과 그 값이 나타날 확률의 집합이다. 예를 들어, 주사위를 굴렸을 때 가능한 숫자의 집한은 1부터 6까지이고, 각 값에 대한 확률은 1/6이다.

파이썬으로 분포를 나타내고자 한다면 각 값과 확률을 연결하는 딕셔너리를 사용하면 된다. 이를 위해 책에서는 Pmf라는 클래스를 만들었다. 이는 확률 질량 함수 (Probability Mass Function) 에서 이름을 가져왔다. Pmf는 http://thinkbayes.com/thinkbayes.py 에서 받으면 된다.

사용하려면 다음처럼 Pmf를 임포트하여 사용하면 된다.

주사위의 결과 분포를 나타내어보자.
Pmf 객체를 생성하고 Set 명령을 통해 각 값에 1/6의 확률을 설정한다.

다음은 각 단어가 등장한 횟수를 세는 코드이다.
Incr은 단어마다 확률을 1 높이며, 단어가 없으면 이를 추가한다.

실은 위의 코드에서 확률은 정규화되지 않았다. 즉 확률의 합이 1이 되지 않았으므로 확률이라고 할 수가 없다. 따라서 단어의 전체 수로 나누어 주어야 확률을 계산할 수 있다. Pmf는 이를 위해 Normalize 메서드를 제공한다.

Pmf 객체를 한 번 만들면, 어느 값에 대한 확률을 물어볼 수 있다.

2.2 쿠키 문제

베이즈 이론의 쿠키 문제를 Pmf를 이용하여 연결하여보자. 쿠키 문제의 가설은 B1과 B2이다.

이것은 각 가설에 대한 사전 확률을 나타내는 사전 분포이다.

새로운 데이터(바닐라 쿠키)에 근거하여 이 분포를 갱신하려면 각 사전 확률과 이에 해당하는 우도를 곱한다. 그릇 1에서 바닐리 쿠키를 집는 것에 대한 우도는 3/4이고, 그릇 2에서의 우도는 1/2이다.

아직 확률이 정규화되지 않았으니 다시 한 번 정규화를 해 준다.

결과는 사후 확률을 나타내는 사후 분포이다.

마지막으로 그릇 1의 사후 확률을 출력하여 보자.

정답은 0.6이다.

http://thinkbayes.com/cookie.py

2.3 베이지안 프레임워크

다음 문제로 넘어가기 전에 코드를 일반화 해보자. 캡슐화 하여 클래스로 만들어보고자 한다. 아래 소스를 참고하자.

http://thinkbayes.com/cookie2.py

2.4 몬티 홀 문제

몬티 홀 또한 새로운 클래스로 작성해 보았다.

http://thinkbayes.com/monty.py

2.5 프레임워크 캡슐화

이를 다시 캡슐화 하여 보자.

http://thinkbayes.com/monty2.py

실은 책에서 제공하는 Suite이라는 클래스가 있다. 이를 사용하려면 이를 상속 받고, Likelihood 메서드를 추가하여 작성하면 된다.

2.6 M&M 문제

M&M 문제 역시 마찬가지로 Suite를 사용할 수 있다.

http://thinkbayes.com/m_and_m.py

2.7 토의

이 장에서 살펴보면 Suite은 실제로 완전히 구현되지 않은 인터페이스를 가지는 추상적 타입이다. 따라서 Likelihood의 내용은 없으므로 구현을 해야한다.

다음 장의 예제들도 동일한 패턴을 따를 것이다. 각각의 문제에서 Suite를 확장하고, Update를 상속 받고, Likelihood를 작성하는 새로운 클래스를 정의할 것이다. 때로는 성능 향상을 위해 Update를 오버라이드하기도 할 것이다.


Add a Comment Trackback