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 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) và ví dụ bằng Java
Xác suất có điều kiện (conditional probability) và ví dụ bằng Java
Nguyễn Văn Hiến
15:18 ngày 01/11/2023
0
0

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<String, Double> probabilities, String event1, String event2) {
        return probabilities.get(event1) * probabilities.get(event2 + "|" + event1);
    }

    public static void main(String[] args) {
        Map<String, Double> 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<String, Double> 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<String, Double> 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);
    }
}

 

 

Tác giả

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.

Tổng quan về xử lý ngôn ngữ tự nhiên

Chatbot ngày nay đã vượt qua vai trò là công cụ tiêu khiển, nó thông minh hơn, hiểu biết nhiều vấn đề hơn, biết lập trình và biết xử lý cả tình huống…. Và để có được thành tựu như hôm nay, chatbot đã khởi đầu bằng công nghệ kiểu như robot ELIZA.

Hệ thống lý luận Bayesian

Từ những năm 1960, việc sử dụng kho ngữ liệu lớn để xử lý ngôn ngữ tự nhiên bắt đầu được định hình. Bộ sưu tập Ameriacan English đã tổng hợp được hơn một triệu văn bản từ các tạp chí, báo, tiểu thuyết...

Mô hình xác xuất The Noisy Channel, giải pháp xử lý tín hiệu bị nhiễu sau truyền dẫn

Giai đoạn thứ 3 (1970-1983) chứng kiến sự phát triển mạnh mẽ của ngành xử lý ngôn ngữ tự nhiên và nhận dạng tiếng nói và đồng thời các thuật toán và mô hình đã được phát triển đó vẫn được duy trì phát triển.

Mô hình ẩn Hidden Markov Model (HMM), bước tiến lớn trong lĩnh vực trí tuệ nhân tạo

Mô hình ẩn Hidden Markov Model (HMM) được phát triển trên lý thuyết xác xuất thông kê, giả định rằng: Có 2 nguồn thông tin: (1) Một nguồn thì có thể thu thập được; và nguồn thứ (2) thì không thu thập được (bị ẩn). Và chúng ta có thể giải mã nguồn thông tin thứ 2 qua xác xuất và suy luận.

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 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).

Automata không có gì khó hiểu!

Khi nhắc đến Lý thuyết tính toán (Theory of Computation) nghĩa là chúng ta đang bàn đến một nhánh của Khoa học máy tính (Coputer Science), lĩnh vực có thể giải quyết các vấn đề tính toán bằng cách sử dụng thuật toán (algorithm) và các mô hình tính toán (model of computation).