개념 정리

베이즈 확률 문제 해결 ( 과일 상자 ) python

명징직조지훈 2022. 11. 5. 21:56

2022.11.04 - [개념 정리] - 확률론

 

확률론

확률의 두 가지 기본 법칙 합의 법칙과 곱의 법칙 X와 Y라는 두 가지 확률 변수가 존재 X는 xi 중 아무 값이나 취할 수 있고, Y 는 yj 중 아무 값이나 취할 수 있다. X와 Y 각각에서 표본을 추출하려는

teach-meaning.tistory.com

2022.11.05 - [개념 정리] - python_probablity_bayesian

 

python_probablity_bayesian

2022.11.04 - [개념 정리] - 확률론 5, 5 크기의 정수 데이터 생성 import numpy as np np.random.seed(0) data = np.random.randint(10, size = (5,5)) data >>> array([[5, 0, 3, 3, 7], [9, 3, 5, 2, 4], [7, 6, 8, 8, 1], [6, 7, 7, 8, 1], [5, 9, 8, 9,

teach-meaning.tistory.com

과일 꺼내기 문제

빨간색 상자 안에는 두 개의 사과와 여섯 개의 오렌지

파란색 상자 안에는 세 개의 사과와 한 개의 오렌지가 있다.

빨간색 상자를 고를 확률이 40%, 파란색 상자를 고를 확률이 60% , 상자 안에서 각각의 과일을 고를 확률을 동일하다고 가정한다.

빨간색 상자를 선택하거나 파란색 상자를 선택할 확률

p(B=r) = 4/10, p(B=b) = 6/10

어떤 한 상자를 선택했는데 그것이 파란색 상자였다. 그 경우 사과를 고를 확률을 3/4 로 p(a|b)=3/4 이다. 이와 같이 상자당 사과, 오렌지를 선택할 확률을 적을 수 있다.

p(a|r) = 1/4, p(o|r) = 3/4, p(a|b) = 3/4, p(o|b) = 1/4

이제 확률의 합의 법칙과 곱의 법칙을 적용하여 사과를 고를 전체 확률을 계산할 수 있다. 

p(F=a) = p(F=a|B=r)p(B=r) + p(F=a|B=b)p(B=b) = 11/20

어떤 한 종류의 과일을 선택했는데 그것이 오렌지고, 이 오렌지가 어떤 상자에서 나왔는지 알고 싶다고 가정, 

p(r|o), p(b|o) 의 계산 베이즈 정리를 적용하여 조건부 확률을 뒤집어 이 문제를 해결한다.

파이썬 구현

데이터의 행렬 표현

box = np.array([[0.4],[0.6]]) #빨, 파

fruits = np.array([[2/8,6/8],[3/4,1/4]]) # 사과, 오렌지

box
>>>
array([[0.4],
       [0.6]])
       
fruits
>>>
array([[0.25, 0.75],
       [0.75, 0.25]])

전체 경우의 수에 대한 각 확률을 구할 수 있다.

fruits*box
>>>
array([[0.1 , 0.3 ],
       [0.45, 0.15]])

 

 

위 행렬의 각 요소는 p(fruit) * p(box) 에 대한 값으로 원소들의 합을 통해 과일을 고를 전체 확률을 구할 수 있다.

사과의 경우 첫번째 열의 합으로 sum(p(apple)*box) 의 벡터 표현을 통해 일반화가 가능하다.

과일이 나왔을 때, 해당 과일이 어떤 상자에서 나왔는지에 대한 확률의 경우 열 값들에 대한 비를 통해 계산할 수 있다.

result2 = result
for i in range(result.shape[1]):
  sum = 0
  for j in range(result.shape[0]):
    sum += result[j][i]
  for j in range(result.shape[0]):
    result2[j][i] = result[j][i] / sum
result2
>>>
array([[0.10891089, 0.65810429],
       [0.89108911, 0.34189571]])

위 행렬의 각 열 값은 특정 과일에 대해 해당 상자일 확률로 열 데이터들의 총 합은 1이 된다.