확률이란
- 특정 사건이 발생할 가능성(0~1) 사이의 실수로 표현
기계 학습 모델을 확률적으로 이해
- N개의 학습 데이터로 기계학습 모델을 학습
- 일반적으로 기계학습 모델의 출력은 "확률"형태
ex1) 이미지 분류 모델이 이미지 x에 대하여 75% 라는 확률로 고양이라고 예측
경우의 수
- 다양한 상황의 확률 계산을 위해서 경우의 수 계산이 필수
- 경우의 수 계산법으로 순열(permutation), 조합(combination)이 있다.
순열
- 서로 다른 n개에서 r개를 중복 없이 뽑아 특정한 순서로 나열
- 순열 공식
nPr = n!/(n-r)!(만일 n=r이라면 n!)
순열 예시
- 기계학습 모델 학습을 위해 N개의 데이터로 학습 진행
- 매번(epoch) 모델에 학습 데이터를 넣을 순서를 섞어서 학습을 진행한다.(epoch: 학습 데이터 세트에 포함된 모든 데이터가 한 번씩 모델을 통과한 횟수)
ex1) N = 4 개의 이미지가 있을 때 2개를 뽑아 임의의 순서로 나열하는 모든 경우의 수는?
경우의 수 4P2 = 4X3 = 12
파이썬을 이용한 순열 계산
from itertools import permutations
arr = ["A", "B", "C"]
# 원소 중에서 2개를 뽑는 모든 순열 계산
result = list(permutations(arr,2))
print(result) # [('A', 'B'), ('A', 'C'), ('B', 'A'), ('B', 'C'), ('C', 'A'), ('C', 'B')]
조합
- 서로 다른 n개에서 r개를 중복 없이 순서를 고려하지 않고 뽑는 것을 의미
- 모든 조합의 수(경우의 수) 공식
nCr = n!/(r!X(n-r)!) = nCn-r
조합 예시
- 딥러닝 아키텍처 중에서 샴 네트워크가 있다.
- 두개의 이미지를 받아서 두 이미지가 유사하다면 1 다르다면 0을 출력
- 이때 N개의 이미지로 구성된 데이터 세트가 있을 때 매번 2개의 이미지를 뽑아서 2개의 이미지를 네트워크의 입력으로 넣는다. 이때 두 이미지의 순서는 상관 없다.
ex1) 4개의 이미지가 있을 때 순서를 고려하지 않고 2개의 이미지를 뽑는 경우의 수는?
4X3/2 = 6
파이썬을 이용한 조합 계산
from itertools import combinations
arr = ["A", "B", "C"]
# 원소 중에서 2개를 뽑는 모든 조합 계산
result = list(combinations(arr,2))
print(result) # [('A', 'B'), ('A', 'C'), ('B', 'C')]
중복순열
- 서로 다른 n개에서 중복을 포함해 r개를 뽑아 특정한 순서로 나열
- 중복 순열 공식
nπr = n^r
중복 순열 예시
- 3개의 숫자 1,2,3을 이용해 만들 수 있는 두자리 자연수의 개수?
3^2 = 9
파이썬을 이용한 중복 순열 계산
from itertools import product
arr = ["A", "B", "C"]
# 원소 중에서 2개를 뽑는 모든 중복 순열 계산
result = list(product(arr,repeat = 2))
print(result) # [('A', 'A'), ('A', 'B'), ('A', 'C'), ('B', 'A'), ('B', 'B'), ('B', 'C'), ('C', 'A'), ('C', 'B'), ('C', 'C')]
중복 조합
- 서로 다른 n개에서 중복을 포함해 순서를 포함하지 않고 r개를 뽑는 것
- 중복 조합 공식
nHr = n+r-1Cr
중복 조합 예시
- 딥러닝에서 학습된 여러 모델의 결과를 활용하여 최종적인 결과를 생성하는 앙상블(ensemble) 방법이 존재
- 서로 다른 딥러닝 아키텍처 1,2,3번이 있다
- 중복을 허용하여 4개를 골라 딥러닝 모델 4개를 학습하고자 할 때 가능한 조합의 수?
- 같은 아키텍처를 여러번 사용하거나, 선택되지 않는 아키텍처가 있어도 된다.
4H4 = 7C4 = 7C3 = 35
파이썬을 이용한 중복 조합 계산
from itertools import combinations_with_replacement
arr = ["A", "B", "C"]
# 원소 중에서 2개를 뽑는 모든 중복 조합 계산
result = list(combinations_with_replacement(arr, 2))
print(result) # [('A', 'A'), ('A', 'B'), ('A', 'C'), ('B', 'B'), ('B', 'C'), ('C', 'C')]
확률
- S를 전체 사건(event)의 집합(표본 공간 = sample space)이라고 하자
- 사건 X가 일어날 확률 P(X)는 다음과 같다.
- P(X) = 사건X가 일어나는 경우의 수/ 전체 경우의 수 = n(X)/n(S)
- 앞면에 1 뒷면에 0이 쓰여 있는 2개의 동전을 2번 던졌을 때 눈금의 합이 1일 확률?
2/4 = 0.5
통계적 확률
- 시행 횟수가 무한히 많아지면 동일 시행 N번 반복한 사건 X가 발생한 횟수 R의 X의 통계적확률은 R/N이 되계된다.