Xác suất có điều kiện (conditional probability) và ví dụ bằng Java

Xác suất có điều kiện (conditional probability) và ví dụ bằng Java

4 Tháng chín 2024 - 2:41 sáng
Xác suất có điều kiện là bài toán dùng để tính một sự kiện B có (hoặc không) khả năng xảy ra khi biết rằng sự kiện A đã xảy ra. Công thức dùng để tính xác xuất có điều kiện là P(B|A).

Xác suất có điều kiện (conditional probability) là bài toán được ứng dụng vào công tác mô hình hóa ngôn ngữ, dịch máy và nhận dạng giọng nói.

Công thức cơ bản của xác xuất có điều kiện là tính xác xuất vào điện kiện B, dựa trên xác xuất của điều kiện cho trước của sự kiện A. Cụ thể, trong xử lý ngôn ngữ tự nhiên, nó được dùng để dự đoán khả năng xuất hiện của một từ bằng cách dự đoán từ xuất hiện trước đó.

Ví dụ: nếu chúng ta có câu “I am going to the ___”, chúng ta có thể sử dụng xác suất có điều kiện để dự đoán từ tiếp theo. Chúng ta có thể tính xác suất của mỗi từ có thể có từ các từ trước đó trong câu và chọn từ có khả năng nhất.

Trong xử lý ngôn ngữ tự nhiên, mô hình trigrams được sử dụng để khai cụ thể thành giải pháp nhờ vào các công thức conditional probability.

Công thức tính xác suất có điều kiện

Xác suất có điều kiện là bài toán dùng để tính một sự kiện B có (hoặc không) khả năng xảy ra khi biết rằng sự kiện A đã xảy ra. Công thức dùng để tính xác xuất có điều kiện là P(B|A).

Sử dụng công thức xác suất có điều kiện

Bước 1: Tìm P(A)

Bước 2: Tìm P(B)

Bước 3: Tìm P(A∩B)

Bước 4: Điền các giá trị vào công thức P(A|B)=P(A∩B)P(B)

Trong trường hợp sự kiện A và B độc lập (trong đó sự kiện A không ảnh hưởng đến xác suất của sự kiện B ), xác suất có điều kiện của sự kiện B cho trước sự kiện A chỉ đơn giản là xác suất của sự kiện B , tức là P(B) . Nếu sự kiện A và B không độc lập thì xác suất giao nhau của A và B (xác suất xảy ra cả hai sự kiện) được xác định bởi P(A và B) = P(A)P(B|A).

Từ định nghĩa này, xác suất có điều kiện P(B|A) có thể dễ dàng thu được bằng cách chia cho P(A) :

Lưu ý: Biểu thức này chỉ đúng khi P(A) lớn hơn 0.

Ví dụ Java triển khai công thức xác suất có điều kiện với 2 sự kiện

import java.util.HashMap;
import java.util.Map;

public class ConditionalProbability {

    public static double calculate(Map probabilities, String event1, String event2) {
        return probabilities.get(event1) * probabilities.get(event2 + "|" + event1);
    }

    public static void main(String[] args) {
        Map probabilities = new HashMap<>();
        probabilities.put("sunny", 0.5);
        probabilities.put("rainy", 0.5);
        probabilities.put("umbrella|sunny", 0.2);
        probabilities.put("umbrella|rainy", 0.8);

        double probability = calculate(probabilities, "sunny", "umbrella");
        System.out.println("Xác suất trời nắng và có ô = " + probability);

        probability = calculate(probabilities, "rainy", "umbrella");
        System.out.println("Xác suất trời mưa và có ô = " + probability);
    }
}

 

Trong ví dụ này, chúng ta có dữ liệu sau:

  • Sự kiện 1: Trời nắng
  • Sự kiện 2: Có ô

Từ dữ liệu này, chúng ta có thể tính được xác suất có điều kiện sau:

  • P(B|A) = 0.2
  • P(B|Ac) = 0.8

Với dữ liệu và xác suất có điều kiện này, chúng ta có thể tính được xác suất cần tìm bằng cách sử dụng công thức:

P(A and B) = P(A)P(B|A)

Kết quả của ví dụ này như sau:

Xác suất trời nắng và có ô = 0.1
Xác suất trời mưa và có ô = 0.4

Công thức tính xác xuất có nhiều hơn hai điều kiện

Để tính xác suất giao nhau của nhiều hơn hai sự kiện, phải xem xét xác suất có điều kiện của tất cả các sự kiện trước đó. Trong trường hợp có ba sự kiện A , B và C ; Công thức tính xác suất giao nhau P(A và B và C) = P(A)P(B|A)P(C|A và B) .

Ví dụ: Một sinh viên làm đơn xin được trọ trong ký túc xá. Tuy nhiên, vì số lượng phòng ở có hạn chế nên chỉ vào khoản 60% sinh viên nộp đơn là có khả năng được duyệt, vậy tỷ lệ chia đều cho mỗi sinh viên nộp đơn là 0.80. Trong số các sinh viên được duyệt vào ký túc xá sẽ có 80% sống cùng sinh viên khác.  Nhiệm vụ của chúng ta là giúp bạn sinh viên này tính toán khả năng anh ta có được chổ ở tại ký túc xá và có được ở phòng đơn hay không?

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

Trong trường hợp này, các biến ngẫu nhiên A, B và C có ý nghĩa như sau:

- A: Sinh viên được chấp nhận (0.80)

- B: Sinh viên được chấp nhận nhận nhà ở ký túc xá (0.60)

- C: Sinh viên được chấp nhận nhận nhà ở ký túc xá và có ít nhất một bạn cùng phòng (0.80)

Bây giờ, chúng ta có thể tính P(A and B and C) bằng cách áp dụng công thức:

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

P(A and B and C) = 0.80 * 0.60 * 0.80

P(A and B and C) = 0.384

Vậy xác suất được chấp nhận và nhận nhà ở ký túc xá và không có bạn cùng phòng là 0.384 hoặc 38.4%.

Ví dụ bằng Java triển khai công thức tính xác suất có điều kiện

import java.util.HashMap;
import java.util.Map;

public class ConditionalProbability {

    public static double calculate(Map probabilities, String event1, String event2, String event3) {
        return probabilities.get(event1) * probabilities.get(event2 + "|" + event1) * probabilities.get(event3 + "|" + event1 + " and " + event2);
    }

    public static void main(String[] args) {
        Map probabilities = new HashMap<>();
        probabilities.put("accepted", 0.80);
        probabilities.put("dorm", 0.60);
        probabilities.put("no roommate", 0.20);

        double probability = calculate(probabilities, "accepted", "dorm", "no roommate");
        System.out.println("Xác suất được chấp nhận và nhận nhà ở ký túc xá và không có bạn cùng phòng = " + probability);
    }
}

Nguyễn Văn Hiến

Tôi là Nguyễn Văn Hiến, Founder của Tummosoft. Tôi có hơn 20 năm lập trình, vào thời điểm máy vi tính còn là tài sản quý giá của người giàu. Nhưng sức đam mê công nghệ của tôi đã giúp tôi vượt qua những khó khăn và theo đuổi nghề lập trình. Đối với tôi, sáng tạo các sản phẩm công nghệ bằng ngôn ngữ cũng giống như người nghệ sĩ sáng tác những họa phẩm.

Bài viết liên quan