확률 관련 계산을 다루는 클래스를 파이썬으로 구현하는 것은 유용한 프로젝트입니다. 아래는 간단한 확률 클래스를 만들어 기본적인 확률 계산, 조합, 그리고 베르누이 분포를 다루는 예제입니다. 이 클래스는 확률을 다루기 위해 다음과 같은 기능을 제공합니다:
- 확률 계산: 특정 사건의 확률을 계산하는 메서드.
- 조합 계산: n개 중 k개를 선택하는 조합 수를 계산하는 메서드.
- 베르누이 확률: 주어진 성공 확률에 대한 베르누이 분포를 계산하는 메서드.
확률 클래스 구현
import math
class Probability:
def __init__(self):
pass
@staticmethod
def probability(event_outcomes, total_outcomes):
""" 특정 사건의 확률을 계산합니다. """
if total_outcomes <= 0:
raise ValueError("총 경우의 수는 0보다 커야 합니다.")
if event_outcomes < 0:
raise ValueError("사건의 경우의 수는 음수일 수 없습니다.")
return event_outcomes / total_outcomes
@staticmethod
def combination(n, k):
""" n개 중 k개를 선택하는 조합 수를 계산합니다. """
if k > n or n < 0 or k < 0:
raise ValueError("n은 k보다 크거나 같아야 하며, 두 값 모두 0 이상이어야 합니다.")
return math.comb(n, k)
@staticmethod
def bernoulli_distribution(p, n, k):
""" 베르누이 분포의 확률을 계산합니다. """
if p < 0 or p > 1:
raise ValueError("성공 확률 p는 0과 1 사이의 값이어야 합니다.")
if n < 0 or k < 0 or k > n:
raise ValueError("n과 k는 0 이상이어야 하며, k는 n보다 작거나 같아야 합니다.")
# 베르누이 확률 질량 함수
q = 1 - p # 실패 확률
return (Probability.combination(n, k) * (p ** k) * (q ** (n - k)))
# 사용 예시
if __name__ == "__main__":
prob = Probability()
# 특정 사건의 확률 계산
event_outcomes = 3
total_outcomes = 10
print(f"확률: {prob.probability(event_outcomes, total_outcomes):.2f}")
# 조합 계산
n = 5
k = 2
print(f"{n}C{k} = {prob.combination(n, k)}")
# 베르누이 분포 확률 계산
p = 0.6 # 성공 확률
n = 10 # 시행 횟수
k = 6 # 성공 횟수
print(f"베르누이 분포 확률: {prob.bernoulli_distribution(p, n, k):.4f}")
설명
probability 메서드:
- 사건의 경우의 수와 총 경우의 수를 받아 해당 사건의 확률을 계산합니다.
- 총 경우의 수가 0 이하이거나 사건의 경우의 수가 음수인 경우,
ValueError
를 발생시킵니다.
combination 메서드:
- 조합을 계산하는 메서드로,
math.comb
를 사용하여 n개 중 k개를 선택하는 조합 수를 계산합니다. - n이 k보다 작거나, 두 값이 음수인 경우
ValueError
를 발생시킵니다.
- 조합을 계산하는 메서드로,
bernoulli_distribution 메서드:
- 주어진 성공 확률, 시행 횟수, 성공 횟수에 대한 베르누이 분포의 확률을 계산합니다.
- 성공 확률이 0과 1 사이가 아닐 경우 또는 n, k가 음수이거나 k가 n보다 클 경우
ValueError
를 발생시킵니다.
사용 예시
- 위의 코드에서 클래스의 메서드를 호출하여 사건의 확률, 조합 수, 그리고 베르누이 확률을 계산할 수 있습니다.
- 이 코드는 직접 실행하면 확률을 계산하는 예시 결과를 출력합니다.
이와 같은 확률 클래스를 통해 다양한 확률 관련 계산을 쉽게 수행할 수 있습니다. 필요한 경우 이 클래스를 확장하여 추가적인 확률 분포나 통계 계산을 추가할 수 있습니다.
'확률 분포 생성 및 방법' 카테고리의 다른 글
[확률 분포 생성 및 방법] 확률 분포 클래스 2 (0) | 2024.10.20 |
---|---|
[확률 분포 생성 및 방법] 연속 확률 분포 설명 및 예제 코드 (1) | 2024.10.19 |
[확률 분포 생성 및 방법] 이산 확률 분포 (0) | 2024.10.17 |
[확률 분포 생성 및 방법] 파이썬 희소행렬 예제 코드 1 (0) | 2024.10.16 |
[확률 분포 생성 및 방법] 확률과 확률분포 (0) | 2024.10.15 |