개별적인 베이지안 네트워크를 효율적으로 저장하는 데이터 구조의 조합은 무엇입니까?


22

베이지안 네트워크의 이론을 이해하고 실제로 구축하기 위해 무엇이 필요한지 궁금합니다. 이 예제에서 100 개의 이산 랜덤 변수로 구성된 베이지안 (지시) 네트워크가 있다고 가정 해 봅시다. 각 변수는 최대 10 개의 값 중 하나를 사용할 수 있습니다.

모든 노드를 DAG에 저장하고 각 노드마다 CPT (Conditional Probability Table)를 저장합니까? 일부 CPT가 변경 될 때 (DAG에서 사용 된 것 외에) 값을 효율적으로 계산하기 위해 사용해야하는 다른 데이터 구조가 있습니까?


DB는 테이블을 처리하기위한 효율적인 알고리즘과 데이터 구조를 가지고 있기 때문에 CP 테이블을 저장하기 위해 메모리 sqlite 데이터베이스에서 사용하고 있습니다. 잘 작동합니다! :)
Pratik Deoghare

효율적인 (메모리, 성능 등) 의미를 정의하고 제약 조건을 포함하십시오. 그것들이 없으면 이것은 가장 효율적인 경쟁을 쉽게 끝내고 일상의 작업에서 다루고 싶지 않은 암호 코드로 저하 될 수 있습니다.
저스틴 Bozonier

1
@JustinBozonier는 적은 메모리를 필요로하며 빠릅니다?
Pratik Deoghare

답변:


12

"최상의"데이터 구조는 해결하려는 특정 문제에 따라 달라질 수 있습니다. 여기에 내가 보았고 사용했던 한 가지 접근 방식이 있습니다.이 방법은 단순히 모든 정보를 저장하고 처리 방법을 알고리즘에 맡깁니다.

  1. 먼저 0에서 n-1 사이의 고유 정수로 노드를 색인화합니다. 그런 다음 각 노드에 대해 부모 목록을 정수 배열로 저장합니다. 예를 들어 C ++에서는 std::vector<std::vector<int> >노드 위에 첫 번째 벡터가 있고 두 번째 벡터에 각 부모가 나열됩니다. 전체 DAG 구조를 캡처합니다.

  2. 또한 각 노드에는 정확히 하나의 조건부 확률 테이블이 연관되어 있으므로 동일한 정수 ID를 가진 노드를 색인화 할 수 있습니다. 각 확률 테이블에 대해 범위, 즉 정의 된 임의 변수 세트를 저장해야합니다. 둘째, 실제 조건부 확률을 포함하는 하나의 큰 부동 소수점 숫자 목록이있을 수 있습니다 (인덱싱 권한을 얻는 것이 좋습니다). C ++ 예제를 다시 제공하려면 다음과 같이하십시오.

    struct CondProbTable {
        std::vector<int> scope;    // list of random variables the CPT is defined over
        std::vector<double> table; // appropriately sized and indexed table of
                                   // conditional probabilities
    };
    

    이를 통해 a std::vector<CondProbTable>를 사용하여 모든 CPT를 저장할 수 있습니다 .

다시, 이것은 기본적으로 베이 즈 네트 만 저장하며, 당신이 그것으로하고 싶은 것에 대해 아무것도 가정하지 않습니다. CondProbTable에 CPT 범위를 포함하는 것은 포인트 1에 설명 된 상위 노드 목록에서 유추 할 수 있기 때문에 다소 중복됩니다.


0

기본적으로 이산 CPT는 하이퍼 매트릭스이므로 이러한 방식으로 살펴 봐야합니다.

하이퍼 매트릭스를 나타내는 매우 일반적인 방법은 문자열 인덱스를 사용하여 해시 테이블을 사용하는 것입니다. 예를 들어 2 차원에서 t [1] [2]는 t.get ( "1_2")입니다.

보다 효율적인 메모리 솔루션이 가능합니다. 하이퍼 매트릭스가 희소 한 경우 특수 희소 표현 (예 : Fuchs 72)을 사용할 수 있습니다. 구조가 있으면 ADD (대수적 결정 다이어그램) 또는 논리 기반 규칙을 사용할 수 있습니다.

마지막 질문은 명확하지 않지만 CPT가 자주 변경 될 것으로 예상되는 경우 테이블이나 해시 테이블을 사용하여 CPT를 평평하게 표현하면 더 나을 것입니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.