1. Phân phối đa thức trong Numy

Phân phối đa thức là một phân phối được xây dựng dựa vào dạng tổng quát của phân phối nhị thức, chúng được sử dụng trong tính toán kết quả các thử nghiệm liên quan đến từ hai biến trở lên..

Trong khi, phân phối nhị thức chỉ có thể đặt được hai kết quả có thể xảy ra, ví dụ như đúng/sai hoặc ngửa/sấp (khi tung đồng xu) – thì phân phối đa thức lại là một thử nghiệm có thể có nhiều hơn 2 kết quả có thể xảy ra.

Ví dụ khi tung 1 quân xúc sắc khả năng xuất hiện mặt 1 chấm là 1/6, khả năng xuất hiện 2 chấm là 1/6, khả năng xuất hiện 3 chấm là 1/6, khả năng xuất hiện 4 chấm là 1/6, khả năng xuất hiện 5 chấm là 1/6, khả năng xuất hiện 6 chấm là 1/6. 

Trong Numpy, để tạo ra mảng dựa theo phân phối đa thức ta sẽ cần sử dụng hàm random.multinomial() – hàm này yêu cầu 3 tham số:

  • Tham số n – là số kết quả có thể xảy ra (Ví dụ: Có 6 kết quả khi tung quân xúc sắc)
  • Tham số pvals – danh sách các xác suất của từng kết quả (Ví dụ: [1/6, 1/6, 1/6, 1/6, 1/6, 1/6] cho xác suất xuất hiện của các mặt 1,2,3,4,5,6 chấm)
  • Tham số size – là kích thước mảng cần trả về

Ví dụ dưới đây, sử dụng hàm random.multinomial() để tạo ra một mảng 1 chiều có kích thước 1 x 6, các giá trị theo phân phối đa thức số lượng kết quả có thể sảy ra là 6 (nghĩa là n = 6) và xác suất của từng kết quả là pvals = [1/6, 1/6, 1/6, 1/6, 1/6, 1/6]  như sau:

from numpy import random

x = random.multinomial(n=6, pvals=[1/6, 1/6, 1/6, 1/6, 1/6, 1/6])

print(x)

Kết quả:

[1 1 3 1 0 0]

Lưu ý: Phân phối đa thức sẽ KHÔNG tạo ra một giá trị duy nhất! Thay vào đó, chúng sẽ tạo ra một giá trị cho mỗi pval.

2. Trực quan hóa phân phối đa thức

Chúng ta có thể trực quan hóa các phân phối đa thức thông qua hàm sns.distplot() trong mô-đun Seaborn.

Ví dụ dưới đây, trực quan hóa phân phối đa thức trong mảng 1 chiều có kích thước 1 x 6 có số lượng kết quả có thể sảy ra là 6 (nghĩa là n = 6) và xác suất của từng kết quả là pvals = [1/6, 1/6, 1/6, 1/6, 1/6, 1/6] thông qua hàm sns.distplot() như sau:

from numpy import random
import matplotlib.pyplot as plt
import seaborn as sns

sns.distplot(random.multinomial(n=6, pvals=[1/6, 1/6, 1/6, 1/6, 1/6, 1/6]), hist=False)

plt.show()