Niềm tin tiên nghiệm

Phân tích dữ liệu Bayesian với Python

Michal Oleszak

Machine Learning Engineer

Phân phối tiên nghiệm

  • Phân phối tiên nghiệm phản ánh hiểu biết về tham số trước khi có dữ liệu:
    • không biết gì   →   phân phối đều (mọi giá trị như nhau)
    • hậu nghiệm cũ   →   có thể cập nhật với dữ liệu mới

 

  • Có thể chọn bất kỳ phân phối xác suất nào làm tiên nghiệm để đưa thông tin ngoài vào mô hình:
    • ý kiến chuyên gia
    • kiến thức chung
    • nghiên cứu trước đây
    • niềm tin chủ quan
Phân tích dữ liệu Bayesian với Python

Tác động của tiên nghiệm

Hai biểu đồ mật độ chồng lên nhau: một cho tiên nghiệm, một cho hậu nghiệm. Tiên nghiệm đều; hậu nghiệm hình chuông, cao hơn nhẹ.

Hai biểu đồ mật độ chồng lên nhau: một cho tiên nghiệm, một cho hậu nghiệm. Tiên nghiệm đều; hậu nghiệm hình chuông, cao hơn nhẹ và lệch phải.

Hai biểu đồ mật độ chồng lên nhau: một cho tiên nghiệm, một cho hậu nghiệm. Tiên nghiệm đều; hậu nghiệm hình chuông, cao hơn nhiều.

Hai biểu đồ mật độ chồng lên nhau: một cho tiên nghiệm, một cho hậu nghiệm. Tiên nghiệm đều; hậu nghiệm hình chuông, cao hơn rất nhiều.

Phân tích dữ liệu Bayesian với Python

Phân phối tiên nghiệm

  • Chọn phân phối tiên nghiệm trước khi quan sát dữ liệu.
  • Chọn tiên nghiệm có thể ảnh hưởng kết quả hậu nghiệm (nhất là khi ít dữ liệu).
  • Tránh chọn lọc thiên lệch, tiên nghiệm cần:
    • nêu rõ ràng,
    • có thể giải thích: dựa trên nghiên cứu trước, giả định hợp lý, ý kiến chuyên gia, v.v.
Phân tích dữ liệu Bayesian với Python

Chọn tiên nghiệm phù hợp

Tiên nghiệm của ta: sấp có khả năng cao hơn

Biểu đồ mật độ hình chuông lệch trái, đỉnh khoảng 0,25.

Một số lựa chọn tốt hơn!

 

Biểu đồ mật độ hình chuông lệch trái, đỉnh khoảng 0,25, hẹp hơn một chút so với biểu đồ trước.

Phân tích dữ liệu Bayesian với Python

Tiên nghiệm liên hợp

  • Một số tiên nghiệm, khi nhân với một số khả năng (likelihood) nhất định, cho hậu nghiệm đã biết.
  • Chúng gọi là tiên nghiệm liên hợp.
  • Với tung đồng xu:
    • nếu chọn tiên nghiệm Beta(a, b),
    • thì hậu nghiệm là Beta(#sấp + a, #lần tung - #sấp + b)
  • Có thể lấy mẫu từ hậu nghiệm bằng numpy.
  • get_heads_prob() từ Chương 1:
    def get_heads_prob(tosses):
      num_heads = np.sum(tosses)
      # prior: Beta(1,1)
      return np.random.beta(num_heads + 1, len(tosses) - num_heads + 1, 1000)
    
Phân tích dữ liệu Bayesian với Python

Hai cách lấy hậu nghiệm

Mô phỏng

  • Nếu biết hậu nghiệm, có thể lấy mẫu bằng numpy:
    draws = np.random.beta(2, 4, 1000)
    
  • Kết quả: mảng 1000 mẫu hậu nghiệm:
    array([0.05941031, ..., 0.70015975])
    
  • Có thể vẽ bằng
    sns.kdeplot(draws)
    

Tính toán

  • Nếu không biết hậu nghiệm, có thể tính bằng xấp xỉ lưới (grid).
  • Kết quả: xác suất hậu nghiệm cho mỗi ô lưới:
           head_prob  posterior_prob
    0           0.00        0.009901
    1           0.01        0.003624
               ...           ...
    10199       0.99        0.003624
    10200       1.00        0.009901
    
  • Có thể vẽ bằng
    sns.lineplot(df["head_prob"], df["posterior_prob"])
    
Phân tích dữ liệu Bayesian với Python

Hãy thực hành với tiên nghiệm!

Phân tích dữ liệu Bayesian với Python

Preparing Video For Download...