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, 4]])
각 행의 행렬 요소는 각각의 확률 분포에 대한 등장 횟수,
N = np.sum(data)
N
>>>
135
표본의 추출 횟수 N은 모든 행들의 합
for i in range(data.shape[0]):
for j in range(data.shape[1]):
data[i, j]
각각의 취할 수 있는 값들에 대해서 X = xi, Y = yj 인 시도의 횟수는 data 행렬의 data[i,j] 요소
sum_x = 0
sum_y = 0
x_i = []
y_i = []
for i in range(data.shape[0]):
sum_x = 0
sum_y = 0
for j in range(data.shape[1]):
sum_x += data[i][j]
sum_y += data[j][i]
x_i.append(sum_x)
y_i.append(sum_y)
x_i
>>>
[18, 23, 30, 29, 35]
y_i
>>>
[32, 25, 31, 30, 17]
각각의 취할 수 있는 값들에 대해서 X = xi, Y = yj 인 시도의 횟수는 data 행렬의 data[i,j] 요소
X = xi 인 시도를 x_i, Y = yj 인 시도의 숫자를 y_i로 표현한다.
def joint_probability(data, i, j):
"""
X=xi, Y=yj 일 결합 확률
Args:
data : 행렬 형태의 전체 데이터
i : 행의 개수
j : 열의 개수
Return
X=xi, Y=yj 일 결합 확률값
"""
N = np.sum(data)
return data[i,j]/N
joint_probability(data, 1,1)
>>>
0.022222222222222223
X가 xi, Y가 yj 일 확률을 p(X=xi, Y=yj) 로 적고 이를 X=xi, Y=yj 일 결합 확률이라 한다.
이는 i, j 칸에 있는 포인트의 숫자를 전체 포인트들의 숫자로 나눠서 구할 수 있다.
def joint_probability_row(data, n):
"""
n 행의 값을 가질 확률
Args:
data : 행렬 형태의 전체 데이터
n : 행 번호
Return
n 행의 값을 가질 확률
"""
sum = 0
N = np.sum(data)
for i in range(data.shape[0]):
sum += data[n,i]
return sum/N
joint_probability_row(data, 1)
>>>
0.17037037037037037
X가 xi 값을 가질 확률도 구할 수 있다. 해당 행에 있는 포인트들의 숫자를 전체 포인트들의 숫자로 나눠서 구한다.
sum = 0
for i in range(data.shape[1]):
sum += joint_probability(data, 1, i)
sum
>>>
0.1703703703703704
i행에 있는 사례의 숫자는 해당 행의 각 칸에 있는 사례의 숫자 합이다. 이것이 확률의 합의 법칙이다.
결과가 동일한 것을 확인할 수 있다.
조건부 확률
조건부 확률 X = xi 인 사례들 중 Y = yj 인 사례들의 비율을 생각해 볼 수 있다.
이를 조건부 확률이라고 한다.
def conditional_probability(data, i, j):
"""
조건부 확률의 계산
Args:
data :
i : 행
j : 열
Return :
조건부 확률의 계산값
"""
return joint_probability(data, i, j) / joint_probability_row(data, i)
conditional_probability(data, 1, 2)
>>>
0.21739130434782608
이 확률은 i행에 있는 전체 포인트 수와 (i, j) 칸에 있는 포인트 수의 비율을 통해서 계산할 수 있다.
이를 통해 곱의 법칙을 도출해 낼 수 있다.
joint_probability(data, 1, 2)
>>>
0.037037037037037035
conditional_probability(data, 2, 1) * joint_probability_row(data, 1)
>>>
0.03584229390681004
python 의 실수 표현 한계 때문에 오차의 발생
conditional_probability(data, 1, 2)
>>>
0.21739130434782608
conditional_probability(data, 2, 1)*joint_probability_col(data, 1)/joint_probability_row(data, 2)
>>>
0.16666666666666666
'개념 정리 > implement_python' 카테고리의 다른 글
python_matrix (0) | 2022.11.18 |
---|---|
CNN_python_implement (0) | 2022.11.03 |
backpropagation python 구현 (0) | 2022.10.30 |