Viết hàm để lấy mẫu từ Python phân phối đa thức

Trong bài đăng này, chúng tôi tiếp tục về chủ đề tương tự, nhưng bây giờ là phân phối Multinoulli và Multinomial. Họ đã khái quát hóa Bernoulli và Nhị thức tương ứng bằng cách cho phép các biến ngẫu nhiên có kết quả phân loại, thay vì kết quả nhị phân. Theo phân loại ở đây, điều đó có nghĩa là thay vì chỉ có khả năng k=0 [thất bại, không, vắng mặt, v.v.] hoặc k=1 [thành công, có, hiện diện], có thể có nhiều giá trị rời rạc, chẳng hạn như $

Phân bố nhiều hạt

Phân phối này còn được gọi là phân phối danh nghĩa, vì nó có thể được sử dụng để mô hình hóa các sự kiện với K kết quả có thể xảy ra. Phân phối Bernoulli có thể được coi là một trường hợp cụ thể của Multinoulli, trong đó số kết quả có thể xảy ra K là 2

Trong học máy, multinoullli có thể được sử dụng để mô hình hóa lớp dự kiến ​​của một mẫu thành một tập K lớp. Chẳng hạn, người ta có thể muốn dự đoán loài $k$ nào trong tập hợp $K$ mà một bông hoa thuộc về dựa trên thuộc tính của nó. Sau đó, loài K tuân theo phân bố multinoulli

Xét xác suất $p[x=k]$ mà mẫu $x$ thuộc lớp k. Ở đây $x$ có thể là thuộc tính của một bông hoa trong ví dụ trên, hoặc một mặt của con súc sắc trong cuộn của nó. Nếu tập hợp các lớp là $K \in {1,2,3,4,…,K}$, thì xác suất của mỗi kết quả có thể được viết là

$p[x=1] = p_1$

$p[x=2] = p_2$

$p[x=3] = p_3$

$p[x=K] = p_K$

Đương nhiên, tổng xác suất bằng 1. 0 [$\sum_i^{K} p[x=i] = 1. 0$]

Quay lại ví dụ về phân loại hoa, giả sử rằng đối với một mẫu $x$, các xác suất sau đây thu được cho mỗi trong số 3 loại

$p[x=1] = 0. 1$

$p[x=2] = 0. 3$

$p[x=3] = 0. 6$

Rõ ràng, $\sum_{i=1}^{3} p[x=i] = 1$ và người ta sẽ nói rằng mẫu có nhiều khả năng nhất từ ​​lớp 3

Phân phối đa thức

Phân phối đa thức mô tả các thử nghiệm Multinoulli lặp đi lặp lại và độc lập. Nó là sự tổng quát hóa của phân phối nhị thức, trong đó có thể có K kết quả có thể xảy ra [thay vì nhị thức

Như một ví dụ trong học máy và NLP [xử lý ngôn ngữ tự nhiên], phân phối đa thức mô hình số lượng từ trong tài liệu

Tương tự như Multinoulli, chúng ta nói rằng một mẫu x có thể có K kết quả có thể xảy ra, mỗi kết quả có khả năng xảy ra $p_K$, sau n phép thử liên tiếp

Xác suất [pmf] của một kết quả nhất định có thể được mô hình hóa bằng công thức

$$ p[X=k] = \frac{n. }{x_1. x_2. …x_k. }p_1^{x_1}\cdot p_2^{x_2}…p_k^{x_k} $$

Trong đó $n$ là số lần thử nghiệm, $x_i$ là số lần sự kiện $i$ xảy ra và $p_i$ là xác suất xảy ra sự kiện $i$ tại mỗi lần thử nghiệm độc lập

Ví dụ, hãy xem xét một vấn đề có thể có 3 kết quả ở mỗi lần thử. Xác suất đạt được một kết quả cụ thể có thể được viết là

$$ p[X=k] = \frac{n. }{x_1. x_2. x_3. }p_1^{x_1}\cdot p_2^{x_2}\cdot p_3^{x_3} $$

Điều này có thể được sử dụng để lập mô hình, ví dụ, xác suất của một kết quả cụ thể trong một giải đấu cờ vua. Giả sử rằng chúng ta muốn xác định xác suất là bao nhiêu để sau 12 ván đấu, người chơi 1 sẽ có 7 trận thắng, người chơi 2 sẽ có 2 trận thắng và các ván còn lại sẽ kết thúc với tỷ số hòa. Vì vậy, giả sử rằng xác suất Người chơi 1 thắng là 0. 4, Người chơi 2 là 0. 35 và hòa có xác suất 0. 25. Vì vậy, chúng tôi có,

BiếnValuen12x17x22x33p10. 4p20. 35p30. 25

Thay thế điều đó trong công thức hiển thị ở trên

$$ p[X=k] = \frac{12. }{7. 2. 3. }0. 4^{7}\cdot 0. 35^{2}\cdot 0. 25^{3} = 0. 0248 $$

Do đó, xác suất của kết quả cụ thể này trong giải đấu cờ vua này là khoảng 2. 5%

Ví dụ Python về phân phối đa thức

Hãy sử dụng Python để thực hiện một thí nghiệm và mô phỏng ví dụ trên, để có được xác suất cuối cùng mà không cần sử dụng công thức Đa thức. Điều này có thể được thực hiện bằng cách sử dụng hàm numpy.random.multinomial[n, pvals, size=None], trong đó n là số lượng thử nghiệm, pvals là danh sách các xác suất liên quan đến từng kết quả trong một thử nghiệm và size là số lượng mô phỏng được thực hiện

Đối với giải đấu cờ vua, chúng ta có n=12 thử nghiệm, pvals = [0.4, 0.35 0.25] là vectơ [hoặc danh sách] hoặc xác suất và đối với size, chúng ta có thể muốn mô phỏng các số khác nhau ở đây và trực quan hóa sự hội tụ của xác suất đối với giá trị “phân tích”

import numpy as np
import matplotlib.pyplot as plt
plt.rcParams.update[{'font.size': 22, 'figure.autolayout': True, 'figure.figsize': [15,5]}]
# set seed for reproductibility
np.random.seed[999] 

#%% Multinoulli example

n = 12                      # number of trials [games in one tourment]
pvals = [0.4, 0.35, 0.25]   # probabilities on a single trial
 

sizes =[] # number of tournments played
p = []    # a list to hold ratios [converge to prob] that player 1 wins 7 times, player 2 wins 2 times and 3 ties

for size in np.logspace[2,4]:
    # the line below is where we actually generate discrete random variables according the multinomial distribution
    outcomes = np.random.multinomial[n, pvals, size=int[size]]
    
    # let's count the ratio of the expected outcome over all the outcomes - this will lastly converge to the probability
    prob = sum[[outcomes[:,0]==7]&[outcomes[:,1]==2]&[outcomes[:,2]==3]]/len[outcomes]
    
    p.append[prob]
    sizes.append[int[size]]

# Plotting
fig1 = plt.figure[]
plt.plot[sizes,p,'o-']
plt.plot[sizes,[0.0248]*len[sizes],'--r']
plt.grid[]
plt.xlim[xmin=0]
plt.xlabel['Number of Drawings']
plt.ylabel['p[X=K]']
plt.title['Theoretical p[X=K] = 0.0248']

#%% save figures

fig1.savefig['multinomial.png']
Hình 1 - Thí nghiệm phân phối đa thức - Xác suất người chơi 1 thắng 7 lần, người chơi 2 thắng 2 lần và có 3 lần hòa

Tóm lược

Trong bài đăng này, bạn đã thấy một chút về phân phối Multinoulli hoặc Multinomial là gì. Có thể nói rằng các phân phối này tổng quát hóa các phân phối Bernoulli và Nhị thức, cho phép mô hình hóa các biến ngẫu nhiên rời rạc với $K$ kết quả có thể xảy ra

Multinoulli có thể được sử dụng để mô tả kết quả của một biến ngẫu nhiên duy nhất $x$, có thể nhận kết quả $K$

Mặt khác, Đa thức tổng quát hóa phân phối multinoulli, cho phép lập mô hình thử nghiệm $n$ của biến ngẫu nhiên $x$, có thể nhận kết quả $K$

Như đã đề cập, các khái niệm này có nhiều ứng dụng trong Machine Learning, đặc biệt khi các biến rời rạc được sử dụng, chẳng hạn như trong các bài toán phân loại

đọc thêm

Phân phối xác suất rời rạc - Machine Learning Mastery

API

cục mịch. ngẫu nhiên. đa thức

Xác suất học máy

Tiến sĩ Euan RussanoGia sư Machine Learning, Trí tuệ nhân tạo, Thống kê,…

Tôi dạy và đào tạo sinh viên, chuyên gia và công ty về Python, R, Học máy, Khoa học dữ liệu và Thống kê, cùng các chủ đề quan tâm khác

Chủ Đề