몬티홀 문제 만으로도 얘기가 길어져서 여기로 따로 빼 두었다.

몬티홀은 베이지안 문제가 아니다. 그냥 확률 문제이다.

이걸 코드로 짜보니 이유를 알겠다.


import random


length = 100000

list = [random.randrange(0,3) for i in range(length)]

#print list


o_true_sum = 0

o_false_sum = 0

c_true_sum = 0

c_false_sum = 0

for i in range(length):

    select = random.randrange(0,3)

    if list[i] == select:

         

        #true_sum+=1

        temp = random.randrange(1,3) + list[i]

        if temp == 3:

            temp = 0

        #print list[i], 'correct', temp        

        o_true_sum+=1

        c_false_sum+=1

        

    else:

        #false_sum+=1

        temp = random.randrange(1,3) + list[i]

        if temp == 3:

            temp = 0

        #print list[i], 'false', temp             

        o_false_sum+=1

        c_true_sum+=1

        

    

print 100 * o_true_sum/length

print 100 * c_true_sum/length


허접하지만 코드를 만들어서 돌려보았다.

만들다 보니 알았다.

바꾸는 것이 맞을 확률이 더 높다. 


왜냐하면 바른 걸 선택할 확률은 1/3 즉 33.3%이다. 

만약 바꾸지 않으면 바른 걸 선택했다는 가정하에 맞출 확률은 100%이다.


틀린걸 선택할 확률은 2/3 즉 66.6%이다.

66.6%에서 선택을 바꾸지 않으면 맞출 확률은 0%

66.6%에서 선택을 바꾸면 맞출 확률은 100%이다. 

왜냐하면 몬티홀이 잘못된 거 하나를 빼주었기 때문이다.

따라서 틀린걸 선택한 경우 바꾸면 맞출 확률은 100%이다.


게스트는 처음 선택이 틀릴 확률이 66.6%로 맞출 확률이 33%보다 2배 높다.

그렇기 때문에 게스트는 자신이 처음에 틀렸다는 가정하에 결정을 해야 한다.

게스트가 자신이 틀렸다는 가정을 하고나서 결정을 해야 한다면 그렇다.

자신의 답을 바꾸면 맞출 확률이 100%가 되므로 선택을 바꾸는 것이 확률이 더 높다.



Posted by 공놀이나하여보세
,

1. virtualenv 및 virtualenvwrapper 설치

virtualenv : 해당 폴더에 환경 파일이 생김

virtualenv wrapper : 로컬에 환경 파일이 생겨서 wrapper를 사용하는 게 좋음



sudo pip install virtualenv

sudo pip install virtualenvwrapper


*환경 설정

mkdir ~/.python_virtual_envs

 

# 아래 내용을 ~/.bashrc 마지막에 저장한다.

export WORKON_HOME=~/.python_virtual_envs

source /usr/local/bin/virtualenvwrapper.sh # 각종 PATH 등을 설정해줌.


2. 사용 방법

mkvirtualenv STUDY : study라는 환경을 만듬

workon (tab) : 환경이 무엇이 있는지 검색

workon STUDY : study환경 시작

deactivate : 환경 종료


pip freeze > requirements.txt : 환경 설정 저장

pip install -r requirements.txt : 환경 설정 설치


sudo apt-get install python-dev 가 필요할 수도 있음


Posted by 공놀이나하여보세
,

중고나라 물품의 가격을 산정할 때

가격을 쉽게 가져올 수 있는가?

제품의 상태는 어떻게 판단하나?

A/S 


가격을 예측하는 모델을 만든다.

베이지안 분류기나 의사결정트리 SVM은 가격과 같은 많은 이질적인 속성들에 기반을 둔 숫자 데이터를 예측하기 어렵다.

가격 예측에는 여러 변수들의 최적 가중치를 찾아야 하는데 그것을 자동으로 결정하기 위해 5장에서 개발한 최적화 기법들을 사용


01. 예제 데이터 세트 만들기

와인을 이용한 가격 예측


02. kNN

- k-nearest neighbors : 가장 비슷한 것 몇 개를 찾아 가격들이 대강 같다고 가정하는 것. 

(1) 이웃 개수

- k : 마지막 결과를 얻기 위해 평균을 낼 물품의 개수

- 노이즈를 추가함 : 몇 사람은 싸게 구입할 것이고 어떤 사람은 비싸게 구입할 수도 있기 때문이다.

- 기술 변수를 적당하게 추가해야 한다. 최적화 기법으로 물품 개수를 선정해야 한다.

(2) 유사도 결정하기

- 유클리디안 거리를 사용한다.

* 다른 곳에서는 피어슨 상관계수, 코사인(자카드, 맨해튼 거리)(?) 사용 가능

* 어떤 걸 사용할 지에 대해서는 좀 알아봐야한다.

kNN은 계산량은 많지만 새로운 데이터가 추가될 때마다 새로 학습하지 않아도 되는 장점이 있다.


03. 물품 가중치

- 이유 : 적정한 거리의 군집을 만들기 위해서 가까운 건 더 가깝게 만들어 주고 먼 것은 더 멀게 만들어 주기 위해서

거리에 가중치를 주는 방법 3가지

- 역 함수 : 거리 값을 1에서 나눈다. 노이즈에 너무 민감할 수 있다.

- 빼기 함수 : 뺀 값이 0보다 작으면 0으로 한다. 하지만 0이 되는 경우 추천을 하지 못하는 경우 발생

- 가우스 함수 : 빨리 계산하기가 어렵지만 적당한 가중치를 만들어 줌

- 가중 kNN

결과들의 평균을 계산하는 대신에 가중 평균(weighted average)을 계산한다.

가중 평균은 각 물품의 가중치(여기서는 가우시안을 사용)에 값을 곱한 후 서로 더하고, 그것을 전체 가중치의 합으로 나눠서 계산


04. 교차 검증(cross-validation)

데이터를 학습 세트와 테스트 세트로 나누는 기법들을 총칭하는 이름

전체 데이터의 5% 정도를 테스트 세트로 만든다. 그러면 나머지 95% 학습 세트가 된다.

실제 결과와 예측의 차이를 구한다.


05. 이질 변수

(1) 축척 조정

거리를 실제 값에 근거하는 방법이 아니라 값을 정규화해서 그 값들이 모두 같은 공간에 있는 것처럼 만드는 방법


06. 축척 최적화

어닐링 최적화를 시도하여 교차 검증이 최적값을 될 수 있는 변수들의 가중치를 찾는다.


07. 불균등 분포

- 어디서 구매했는지에 따라 가격이 달라질 수 있으므로 해당 위치의 데이터를 더 면민히 관찰해야 한다.

- 확률 밀도 추정하기

단일 가격을 예측하기 보다는 물품이 특정 가격 범위 내에 떨어질 확률을 계산


뒷부분엔 이베이를 활용하여 가격을 예측하였다.



Posted by 공놀이나하여보세
,