2015-05-26 33 views
5

Tôi cần thực hiện một số suy luận trên mạng Bayesian, chẳng hạn như ví dụ tôi đã tạo bên dưới. Bayesian networkSuy luận trong Mạng Bayesian

Tôi đã xem xét thực hiện một việc như thế này để giải quyết suy luận như P (F | A = True, B = True). Cách tiếp cận ban đầu của tôi là làm một cái gì đó như

For every possible output of F 
    For every state of each observed variable (A,B) 
    For every unobserved variable (C, D, E, G) 
     // Calculate Probability 

Nhưng tôi không nghĩ điều này sẽ làm việc vì chúng tôi thực sự cần phải đi qua nhiều biến cùng một lúc, không phải mỗi lần một.

Tôi đã nghe nói về thuật toán Ngọc trai để chuyển thư nhưng chưa tìm thấy mô tả hợp lý không quá dày đặc. Để biết thêm thông tin, các mạng Bayes này bị ràng buộc là không có nhiều hơn 15-20 nút và chúng tôi có tất cả các bảng xác suất có điều kiện, mã không thực sự phải nhanh hoặc hiệu quả.

Về cơ bản tôi đang tìm cách để thực hiện việc này, không nhất thiết là cách TỐT NHẤT để thực hiện việc này.

+0

Đồ thị của bạn chỉ là ví dụ hay tất cả các biến hàng đầu được quan sát? –

+0

Thuật toán truyền thông điệp của Pearl chỉ áp dụng cho các mạng không có vòng lặp. Có những thuật toán chính xác cho các mạng loopy của các biến rời rạc và Gaussian, nhưng chúng không đơn giản. Lời khuyên của tôi là tìm một số phần mềm để thực hiện các phép tính để tất cả những gì bạn phải làm là nhập vào mô tả mạng (các biến, các kết nối và các bảng xác suất) và chạy các truy vấn. Có cả phần mềm thương mại và phi thương mại cho việc này; xin lỗi, tôi không có đề xuất. –

+0

biểu đồ chỉ là một ví dụ, các biến hàng đầu không phải lúc nào cũng được quan sát chặt chẽ – suphug22

Trả lời

0

BN của bạn dường như không đặc biệt phức tạp và tôi nghĩ bạn nên dễ dàng loại bỏ bằng cách sử dụng phương pháp suy luận chính xác, chẳng hạn như thuật toán cây nối. Tất nhiên, bạn vẫn có thể làm liệt kê bạo lực, nhưng đó sẽ là một sự lãng phí tài nguyên CPU cho rằng có rất nhiều thư viện đẹp ngoài kia thực hiện các cách thông minh hơn và chính xác hơn trong các mô hình đồ họa.

Vì thẻ của bạn đề cập đến C++, đề xuất của tôi sẽ là libDAI. Đó là một thư viện được viết tốt, thực hiện nhiều suy luận chính xác và gần đúng trên các biểu đồ hệ số chung chung. Nó không có bất kỳ phụ thuộc kỳ lạ nào và rất dễ tích hợp vào dự án của bạn. Nó đặc biệt thích hợp cho các trường hợp rời rạc, chẳng hạn như của bạn, mà bạn có các bảng xác suất.

Bây giờ, bạn nhận thấy rằng tôi đã đề cập các biểu đồ yếu tố. Nếu bạn không quen với khái niệm này, tôi sẽ giới thiệu bạn đến Wikipedia, nhưng nguyên tắc rất đơn giản. Bạn nên đại diện cho BN của bạn như là một biểu đồ yếu tố và sau đó libDAI sẽ làm suy luận cho bạn.

EDIT:

Kể từ tài nguyên CPU dường như không phải là một vấn đề đối với bạn và đơn giản là chìa khóa, thay vào đó, bạn có thể luôn luôn đi với lực lượng vũ phu liệt kê. Ý tưởng rất đơn giản. Mạng Bayesian của bạn đại diện cho phân phối xác suất chung, mà bạn có thể viết ra dưới dạng phương trình, ví dụ:

P(A,B,C) = P(A|B,C) * P(B|C) * P(C) 

Giả sử bạn có bảng cho tất cả các phân bố xác suất có điều kiện của bạn, ví dụ: P(A|B, C)P(B|C)P(C) sau đó bạn chỉ có thể đi qua tất cả các giá trị có thể của các biến A, B, và C và tính toán đầu ra.

+0

Cảm ơn sự giúp đỡ, tôi đang tìm cách không sử dụng thư viện bên ngoài và mạng khá đơn giản, tôi tự hỏi liệu bạn có thể xây dựng ý nghĩa của bạn khi nói phương pháp suy luận chính xác hay không. chỉnh sửa - Tôi không lo lắng về việc lãng phí tài nguyên CPU vì đây không phải là một phần của chương trình lớn hơn, chỉ chương trình và hầu hết các nút sẽ chỉ nhận 2-3 biến tức là đúng, sai, có thể – suphug22

+0

Vâng, nếu bạn đang tìm kiếm một cái gì đó rất đơn giản, bạn có thể chỉ cần làm một liệt kê sức mạnh vũ phu mà bạn tự đề xuất. Làm điều đó và trở lại đây nếu phải mất quá nhiều thời gian :) –

+0

Vui lòng xem chỉnh sửa của tôi –