pymc3을 사용한 Bayesian-Modelling-in Python 및 번역(0-2장)

오류가 있을 수 있으니 발견하면 지적해 주세요.
이번에는 기계 학습에서 피할 수 없는 아이디어인 베스를 소개한다.
아래의 보도에 근거하여 해설을 기술하다.
참조:
https://github.com/markdregan/Bayesian-Modelling-in-Python

이 기사를 통해 얻은 지식


1:보배의 생각
2:ipythhon notebook을 사용하여 베이스의 이론을 체험
3: 베이스 이론 최적화 모델을 이용한 평가 방법

도대체 베스가 왜 필요한지


기계 학습의 목적은 데이터 학습 모델에서 미지의 데이터에 대응하는 것이다. 완벽한 데이터는
"완전, 일관, 정확, 내용 설명"
이런 경우는 매우 드물기 때문에 사전에 지식을 주고 이상한 데이터에 휘둘리기 쉽지 않다는 생각에 가깝다.
나는 사람이 행동할 때도 예측하고 행동하며 피드백을 개선할 것이라고 생각한다.
하지만 미리 예측을 잘못하면 좋지 않은 결과가 기다리고 있으니 주의해야 한다.
예를 들어 저는 여성들에게 인기 있는 육류 요리점을 찾고 싶습니다(독단과 편견에 기초하여)

*20대 초반 여성: 경험이 없는 패션숍이나 평소 경험하지 못했던 물건을 제공하는 숍에 가져가면 된다
*20대 후반 여성: 패션숍은 어느 정도 다녀왔고, 단순히 패션숍을 찾는 것도 어렵다.은둔하는 가게랑 자주 가는 가게가 있었으면 좋겠어요.
이처럼 여성들에게 인기가 많다면 연령에 따라 동료의 전 분포도 다르기 때문에 이 사전 분포를 잘못 알았다면 말도 안 된다.

자습서


이번에는 추적 공식이 아닌 실제 데이터를 활용해 베스의 생각을 이해하는 튜토리얼이 영어판인 만큼 학습의 일환으로 일본어로 번역하면서 실천하는 메모를 먼저 남겼다.
3장 이후의 내용은 비교적 고급스러워 2장까지 제어할 수 있다면 모델 제작부터 평가까지 모두 진행할 수 있다.
이 편을 신경쓰시는 분들은 다음 내용을 보시면 될 것 같습니다.

데이터 가져오기: Section 0.Introduction.ipynb


이 자습서에서 자신의 Google Hangout 데이터를 얻었습니다.
데이터를 얻는 데 시간이 걸리기 때문에 다른 작업을 하면서 데이터를 얻는 것을 권장합니다.
또한psyhon 환경이 없는 사람은 아래requirement.txt로 필요한 프로그램 라이브러리를 다운로드할 수 있다.
numpy==1.9.2
ipython==4.0.0
notebook==4.0.4
jinja2==2.8
pyzmq==14.7.0
tornado==4.1
matplotlib
simplejson
pandas
seaborn
datetime
scipy
patsy
statsmodels
git+https://github.com/pymc-devs/pymc3
OSX 환경에서 시험해 봤는데 다음과 같은 오류가 발생했습니다.
RuntimeError**: Python is not installed as a framework. The Mac OS X backend will not be able to function correctly if Python is not installed as a framework. See the Python documentation for more information on installing Python as a framework on Mac OS X. Please either reinstall Python as a framework, or try one of the other backends.
대응 방법은 다음과 같다.
얻을 수 있는 json 파일의 삽입이 매우 심하기 때문에 데이터 필드의 간단한 정보를 아래에 열거합니다.
Field
Description
Example
conversation_id
Conversation id representing the chat thread
Ugw5Xrm3ZO5mzAfKB7V4AaABAQ
participants
List of participants in the chat thread
[Mark, Peter, John]
event_id
Id representing an event such as chat message or video hangout
7-H0Z7-FkyB7-H0au2avdw
timestamp
Timestamp
2014-08-15 01:54:12
message
Content of the message sent
Went to the local wedding photographer today
sender
Sender of the message
Mark Regan
강좌에서 json의 데이터를 지우고 메일마다 Pandas의 데이터 프레임워크로 수정합니다.
다음 코드는 작성자와 Alison Darcy에 데이터를 집중하고 댓글을 달지 않으면 데이터가 나오지 않습니다.
messages = messages[(messages['sender'] == 'Mark Regan') & (messages['participants_str'] != 'Alison Darcy, Mark Regan')]

해결하고 싶은 문제


1: 반응시간이 누구와 이야기하느냐에 영향을 미친다
2: 반응 시간에 영향을 주는 주요 원인은?
3:반응이 가장 안 좋았던 날은?
Google Hangout을 잘 사용하지 않습니다. 결과는 다음과 같습니다.

이번에는 해결하고 싶은 문제에 쓸 수 없기 때문에 교과서의 데이터로 자료를 만들기로 했다.
*참고: Export data for usage througout tutorial에서 자체 데이터를 출력하기 위해 자습서 데이터를 사용하려면 이 처리를 하지 않는 것이 좋습니다.

모델 매개변수 예측: Section 1: Estimation model parameters


여기서부터는 걸프 강좌의 정편이다.
그림을 사용하면 결과가 알기 쉬워지고 재미있는 곳이다.
먼저 베스탄의 생각을 진술했다.
예를 들면 다음과 같습니다.
소년은 하루 종일 집 앞을 지나가는 차의 수를 노트에 썼다.그의 노트에는 지나가는 차의 수가 쓰여 있다.
베스는 관측된 데이터는 무작위로 만들어진다고 생각하지만, 이것은 어떤 확률로 분포되어 만들어진 것이다.
예에서 보듯이 이산적인 상황에서 파송 분포를 이용하여 고려한다.
예에는 평균 5, 20, 40개의 상자가 실렸다.

녹색은 평균 5확률, 주황색은 평균 20확률, 핑크색은 평균 40확률로 분포한다.
지난번의 반응 시간을 파송 분포의 구조에 응용하여 Bays 예측 파라미터를 통해 이번에 쏟아진 의문을 해결하는 데 도전한다.

최대 유사 추정 (대수) 을 통해 파송 분포의 평균치를 추산하다.
이번 추정의 가능성과 추정해야 할 파송 분포의 평균치는 아래에서 확인할 수 있다.

평균치가 20에 가깝고 유사치가 가장 높다는 것을 확인할 수 있다.
응답 시간의 파송 분포는 다음과 같습니다. 최대 18초간 되돌아옵니다.

이번 예에서 베이즈에 적용되는 정보를 미리 알고 있으면 10에서 60 범위 내에서 데이터를 수집할 수 있다.주제는 그에 대한 파송 분포를 정의하고 가장 유사한 추측에 따라 구하는 것이다.

MCMC


이번 평균치를 수치로 변동해 가능성을 극대화할 때까지 반복하는 기술이다.이 방법의 장점은 데이터가 없는 상태에서도 사전 분포에서 추정할 파라미터를 확정하고 무작위로 값을 추정할 수 있으며 가능성을 최대화하더라도 멈출 수 있다는 것이다.
그러나 추정되는 매개변수가 많은 상황에서 수렴하기 어려운 점과 사전 분포가 부적절한 경우 효과를 발휘하기 어렵다는 단점이 있다.

iptython notebook에서 실행하면 데이터를 생성하면서 파라미터를 추측하는 과정을 알 수 있습니다. 꼭 시도해 보세요.
MCMC에서 실제 추정한 결과다.
데이터는 17과 19 사이에서 발생했고 평균치도 18을 조금 넘었기 때문에 단순한 베이스가 추정한 정밀도와 차이가 많지 않다.

MCMC가 극대화한 유사궤적은 다음과 같다.
예상 평균치가 예상대로 수렴되지는 않기 때문에 이 추적을 통해 어떤 변화가 일어났는지 확인할 수 있다. 

샘플로 출력한 값과 지금까지 출력한 값 사이의 관계수를 파악해야 한다.

모델 체크:Section 2: Model checking


검사의 관점은 두 가지가 있다
1: 모델이 데이터를 나타낼지 여부
2: 모델 비교
데이터와 예측의 분포를 검사하다.
분포의 가장 빈번한 값과 빈도가 높은 응답 시간은 일치하지 않습니다.이번 상황에서 이 모형은 적합하지 않다는 것을 알 수 있다.

따라서 파송 분포와 상대적으로 비슷한 마이너스 두 가지 분포를 사용하면 평균치뿐만 아니라 분산성도 처리할 수 있기 때문에 교체를 시도해 본다.
분포는 다음과 같다.

마이너스 2항의 분포는 다음과 같다.α및μ를 입력합니다.

예측치는 다음과 같다.α의 값은 1.4에서 2.4로 분포의 표현력은 분산의 작용에 따라 높아진다.

다음은 방금 예상한 것이다α및μ매개변수가 생성한 분포 및 응답 시간의 그림입니다.
분포와 응답 시간의 분포가 비슷하여 그 특징을 더욱 잘 나타낼 수 있다.

우리는 또 파송과 마이너스 2항식의 분포를 결합시켜 사용하는 방법을 제시했다.

Bays 팩스를 계산하여 다음 기준에 따라 어떤 모델을 사용하는 것이 좋을지 결정하였습니다.

이번에 2장까지 기본 부분이 진행됐지만 3장부터는 발전판으로 바뀔 테니 꼭 도전해보세요.

참고 자료


야채 수프
https://www.pakutaso.com/
Stan에서 통계 모델링 학습(2): 원래 MC가 뭐였지?
http://tjo.hatenablog.com/entry/2014/02/08/173324
베스가 짐작한 지식을 아는 척하다
http://www.anlyznews.com/2012/01/blog-post_31.html
Bayesian-Modelling-in-Python
https://github.com/markdregan/Bayesian-Modelling-in-Python

다음 기사


tksarah OpenStack LIBERTY로 DRBD Cinder Volume Driver 동작 확인!!

좋은 웹페이지 즐겨찾기