카테고리 없음

베이지안 네트워크 Bayesian Network 파이썬 예시 코드

sohyunkim 2025. 6. 3. 22:22

어떤 복잡한 조건부 확률 분포를 추정하는 방법으로 베이지안 네트워크가 있다. 확률분포 간의 의존성과 독립성을 그래프 형태로 표현하여, 복잡한 확률 문제를 보다 체계적으로 다루는 방법이다.

 

위 사진은 간략한 베이지안 네트워크의 노드와 엣지를 표현한 그림이다. 각 노드와 엣지로 구성된 네트워크 구조를 통해, 직관적으로 각 확률변수 간의 조건, 독립 관계를 확인할 수 있다. 화살표가 나가는 노드를 부모 노드라고 할 때, 화살표를 받는 노드의 조건부 확률은 다음과 같다.

특징

베이지안 네트워크의 특징은 다음과 같다.

1. 모듈화

전체 확률 분포를 단일 고차원 분포로 다루는 것이 아니라, 그래프 구조에 따라 쪼개어 관리할 수 있다. 또한, 어떤 변수가 다른 변수에 의존하는지만 명확하면 구조적으로 쉽게 확률 모델을 구성할 수 있다.

2. 추론

부분적인 관측 정보를 기반으로, 우리가 모르는 다른 변수들의 확률 분포를 추정할 수 있다.

3. 학습

데이터로부터 네트워크 구조와 각 조건부 확률 분포를 추정할 수도 있다.

4. 설명 가능성

그래프 형태로 변수 간 관계를 시각화할 수 있어, 모델의 해석이 비교적 쉽다는 장점이 있다.

 

네트워크 설계 방법

네트워크를 설계하는 방법은 크게 두 가지로 나뉜다.

첫째, 데이터 기반 방법은 라벨이 포함된 데이터를 이용하여 각 노드 간의 구조를 자동으로 학습하고, 조건부 확률 테이블(CPT)을 추정하여 네트워크를 구축하는 방식.

둘째, 전문가 지식 기반 방법은 변수 간의 관계를 이미 알고 있는 경우, 각 노드의 구조를 수동으로 설정하고, 전문가의 지식을 바탕으로 CPT를 결정하는 방식.

이번 글에서는 데이터 기반 방법으로 베이지안 네트워크를 구축하는 파이썬 예제를 설명할 것이다.

 

네트워크 데이터 학습 파이썬 예제 코드

우선, 예제에서 가정하는 변수 사이 상관관계는 다음과 같다.

학습에 필요한 x1, x2, x3, x4, Label 데이터를 생성할 것이다. 우선 x1, x2는 각 3가지 경우를 특정 확률로 랜덤하게 생성하였다.

# 1) 데이터 생성
N = 5000

# X1, X2는 각각 3가지 범주를 가질 수 있다고 가정
X1_vals = ['low', 'medium', 'high']
X2_vals = ['A', 'B', 'C']

X1 = np.random.choice(X1_vals, size=N, p=[0.3, 0.4, 0.3])
X2 = np.random.choice(X2_vals, size=N, p=[0.25, 0.5, 0.25])

 

X1과 X2를 부모 노드로 하는 Label은 특정 규칙에 따라 결정된다.

여기서는 X1 = high이고 X2 = C인 경우, Label을 positive로 할당하고, 그 외의 경우는 negative로 설정한다.

단, 일정한 노이즈를 추가하여, X1 = high이고 X2 = C라고 하더라도 100% 확률로 positive가 되지는 않는다.

대신, 80% 확률로 positive, 20% 확률로 negative로 할당된다.

Label = []
for i in range(N):
    if X1[i] == 'high' and X2[i] == 'C':
        label_choice = np.random.choice(['positive', 'negative'], p=[0.8, 0.2]) # 양성 라벨이 될 확률을 80%로 설정 (20%는 negative)
    else:
        label_choice = np.random.choice(['negative', 'positive'], p=[0.7, 0.3]) # negative일 확률 70%, positive일 확률 30%
    Label.append(label_choice)

음으로 Label을 부모 노드로 하는 X4를 생성한다. 이때도 노이즈를 추가한다.

 

 

코드 전문은 네이버 블로그를 참고해주세요.

https://m.blog.naver.com/rlarlarlathgus/223792265880

 

[베이지안 추정 - 4] 베이지안 네트워크 Bayesian Network

어떤 복잡한 조건부 확률 분포를 추정하는 방법으로 베이지안 네트워크가 있다. 확률분포 간의 의존성과 독...

blog.naver.com