Trong bài đăng này, tôi sẽ chỉ cho bạn cách làm việc với phân phối xác suất bằng cách sử dụng
normal.rvs[size=10,random_state=143]
>> array[[ 87.50268488, 118.56536514, 62.86403442, 84.42053641,
114.91967271, 102.67337385, 92.6638058 , 93.36867073,
96.22587266, 92.97029531]]
5. Chúng tôi sẽ bắt đầu bằng cách nhập các gói có liên quanimport scipy.stats as stats
import numpy as np
%matplotlib inline
import matplotlib.pyplot as plt
Mô-đun
normal.rvs[size=10,random_state=143]
>> array[[ 87.50268488, 118.56536514, 62.86403442, 84.42053641,
114.91967271, 102.67337385, 92.6638058 , 93.36867073,
96.22587266, 92.97029531]]
6 của normal.rvs[size=10,random_state=143]
>> array[[ 87.50268488, 118.56536514, 62.86403442, 84.42053641,
114.91967271, 102.67337385, 92.6638058 , 93.36867073,
96.22587266, 92.97029531]]
7 cung cấp nhiều bản phân phối để bạn nhất định tìm thấy những gì bạn đang tìm kiếm. Chúng được tổ chức thành ba loại. Liên tục, rời rạc và đa biến. Đây là danh sách đầy đủ. Trong bài đăng trên blog này, chúng tôi sẽ tập trung vào [hai] phân phối liên tục và [hai] phân phối rời rạcPhân phối liên tục
Chúng ta sẽ bắt đầu với bản phân phối được cho là nổi tiếng nhất. Phân phối bình thường [Gaussian]
Chúng ta bắt đầu với việc tạo một thể hiện của lớp
normal.rvs[size=10,random_state=143]
>> array[[ 87.50268488, 118.56536514, 62.86403442, 84.42053641,
114.91967271, 102.67337385, 92.6638058 , 93.36867073,
96.22587266, 92.97029531]]
8 và khởi tạo đối tượng này để có giá trị trung bình là 100 và độ lệch chuẩn là 15normal.rvs[size=10,random_state=143]
>> array[[ 87.50268488, 118.56536514, 62.86403442, 84.42053641,
114.91967271, 102.67337385, 92.6638058 , 93.36867073,
96.22587266, 92.97029531]]
9Tiếp theo, chúng ta có thể tạo một mẫu ngẫu nhiên bằng cách gọi phương thức
normal_sample = normal.rvs[size=1000,random_state=123]
plt.hist[normal_sample,density=True,label="Sample"]
plt.title["Normal Distribution"]
plt.ylabel["Density"]
plt.legend[]
plt.show[]
0 trên đối tượng này để tạo 10 số ngẫu nhiênnormal.rvs[size=10,random_state=143]
>> array[[ 87.50268488, 118.56536514, 62.86403442, 84.42053641,
114.91967271, 102.67337385, 92.6638058 , 93.36867073,
96.22587266, 92.97029531]]
normal_sample = normal.rvs[size=1000,random_state=123]
plt.hist[normal_sample,density=True,label="Sample"]
plt.title["Normal Distribution"]
plt.ylabel["Density"]
plt.legend[]
plt.show[]
1 chỉ để kết quả có thể lặp lại được. Nếu bạn bao gồm điều này, kết quả này sẽ luôn giống nhau. Nếu bạn muốn lặp lại và nhận được kết quả khác, chỉ cần bỏ qua phần này để mã của bạn đọc là normal_sample = normal.rvs[size=1000,random_state=123]
plt.hist[normal_sample,density=True,label="Sample"]
plt.title["Normal Distribution"]
plt.ylabel["Density"]
plt.legend[]
plt.show[]
2Điều đó thật dễ dàng. Bây giờ kẻo tạo ra 1000 số ngẫu nhiên từ phân phối này và tạo biểu đồ
normal_sample = normal.rvs[size=1000,random_state=123]
plt.hist[normal_sample,density=True,label="Sample"]
plt.title["Normal Distribution"]
plt.ylabel["Density"]
plt.legend[]
plt.show[]
Đây là kết quả
Biểu đồ gồm 1000 số ngẫu nhiên được tạo từ phân phối chuẩn
Bây giờ hãy tập trung vào PDF, hàm mật độ xác suất. Sử dụng cùng một đối tượng [phân phối] mà chúng tôi đã tạo, chúng tôi có thể truy cập PDF thông qua phương thức
normal_sample = normal.rvs[size=1000,random_state=123]
plt.hist[normal_sample,density=True,label="Sample"]
plt.title["Normal Distribution"]
plt.ylabel["Density"]
plt.legend[]
plt.show[]
3. Đối số đầu tiên có thể là vô hướng của một mảng giá trịprint[normal.pdf[120]]
print[normal.pdf[[120,130,140]]]
>> 0.010934004978399577
>> [0.010934 0.0035994 0.00075973]
Tiếp theo, hãy xem cách vẽ đồ thị PDF. Đầu tiên tạo một số giá trị cho trục hoành. Chúng tôi sẽ sử dụng
normal_sample = normal.rvs[size=1000,random_state=123]
plt.hist[normal_sample,density=True,label="Sample"]
plt.title["Normal Distribution"]
plt.ylabel["Density"]
plt.legend[]
plt.show[]
4 để tạo ra các số ____6_______5 cách đều nhau giữa ____6_______6 và ____6_______7. Các giá trị có liên quan cho trường hợp của chúng tôi dường như nằm trong khoảng từ 50 đến 150. normal_sample = normal.rvs[size=1000,random_state=123]
plt.hist[normal_sample,density=True,label="Sample"]
plt.title["Normal Distribution"]
plt.ylabel["Density"]
plt.legend[]
plt.show[]
8. Chúng sẽ đóng vai trò là giá trị ngang [x] cho cốt truyệnĐể có được các giá trị dọc [y], chúng ta có thể tính toán PDF trên các giá trị này.
normal_sample = normal.rvs[size=1000,random_state=123]
plt.hist[normal_sample,density=True,label="Sample"]
plt.title["Normal Distribution"]
plt.ylabel["Density"]
plt.legend[]
plt.show[]
9. Dưới đây, chúng tôi có mã kết hợp tất cả những thứ này lại với nhau và cung cấp cho chúng tôi một biểu đồ PDF bình thườngt = np.linspace[50,150,100]
plt.plot[t,normal.pdf[t],label="PDF"]
plt.legend[]
plt.show[]
Một cốt truyện của một PDF bình thường
Cuối cùng, chúng ta có thể phủ biểu đồ này lên trên biểu đồ để xem trình tạo số ngẫu nhiên đã hoạt động tốt như thế nào
Biểu đồ của một mẫu từ phân phối chuẩn và biểu đồ tương ứng của PDF
Điều đó có vẻ khá tốt
Một bản phân phối phổ biến khác là bản phân phối Beta. Đây cũng là một phân phối liên tục và được sử dụng để mô hình hóa các biến ngẫu nhiên trong khoảng từ 0 đến 1. Vì vậy, ví dụ, nếu biến ngẫu nhiên là xác suất thành công, thì đây có thể là một phân phối tốt để sử dụng. Bản phân phối Beta có hai tham số, a và b. Do đó, để tạo một đối tượng phân phối beta trong
print[normal.pdf[120]]
print[normal.pdf[[120,130,140]]]
>> 0.010934004978399577
>> [0.010934 0.0035994 0.00075973]
0, chúng tôi đặt print[normal.pdf[120]]
print[normal.pdf[[120,130,140]]]
>> 0.010934004978399577
>> [0.010934 0.0035994 0.00075973]
1. Mã bên dưới tạo một mẫu ngẫu nhiên từ phân phối nàybeta=stats.beta[a=2,b=5]
beta.rvs[size=5,random_state=133]
>>array[[0.13580999, 0.55628319, 0.39061464, 0.51549706, 0.3439727 ]]
Như trước đây, hãy lấy 1000 số từ phân phối này, tạo biểu đồ và phủ tệp PDF của nó
beta_sample=beta.rvs[size=1000,random_state=133]
t=np.linspace[0,1,100]
plt.hist[beta_sample,density=True,label="Sample"]
plt.plot[t,beta.pdf[t],label="PDF"]
plt.legend[]
plt.ylabel["Density"]
plt.title["Beta Distribution"]
plt.savefig["beta_hist_pdf.png"]
plt.show[]
Biểu đồ của một mẫu từ bản phân phối beta và biểu đồ tương ứng của PDF
Phân phối rời rạc
Đôi khi, chúng ta cần làm việc với các bản phân phối rời rạc. Chúng tôi sẽ chứng minh hai. Nhị thức và Poisson. Phân phối nhị thức được sử dụng để mô hình hóa số lần thành công với thử nghiệm lặp lại trong đó mỗi thử nghiệm có thể dẫn đến “thành công” hoặc “thất bại”, xác suất thành công không đổi từ thử nghiệm này sang thử nghiệm khác, các thử nghiệm độc lập với nhau và . Một ví dụ điển hình là số lần tung đồng xu cố định. Đây là cách chúng tôi lấy các đối tượng phân phối nhị thức trong
print[normal.pdf[120]]
print[normal.pdf[[120,130,140]]]
>> 0.010934004978399577
>> [0.010934 0.0035994 0.00075973]
0 và tạo một số số ngẫu nhiênbinomial=stats.binom[n=10,p=0.4]
binomial.rvs[size=10,random_state=143]
>> array[[5, 3, 4, 4, 4, 6, 1, 1, 3, 2]]
Hãy nhớ rằng một bản phân phối rời rạc không có PDF. Hàm tương ứng là Hàm khối lượng xác suất hoặc PMF. Trong
print[normal.pdf[120]]
print[normal.pdf[[120,130,140]]]
>> 0.010934004978399577
>> [0.010934 0.0035994 0.00075973]
0, chúng ta có thể truy cập chức năng này cho một đối tượng phân phối như sau. print[normal.pdf[120]]
print[normal.pdf[[120,130,140]]]
>> 0.010934004978399577
>> [0.010934 0.0035994 0.00075973]
4. Giống như đối với PDF, chúng ta có thể tính toán PMF của một số hoặc cho một danh sách các sốbinomial.pmf[2]
binomial.pmf[[2,3,4]]
>>> 0.12093235199999994
>>> [0.12093235 0.21499085 0.25082266]
Tiếp theo, hãy vẽ sơ đồ PMF. Vì nó rời rạc nên chúng ta sẽ sử dụng
print[normal.pdf[120]]
print[normal.pdf[[120,130,140]]]
>> 0.010934004978399577
>> [0.010934 0.0035994 0.00075973]
5 thay vì print[normal.pdf[120]]
print[normal.pdf[[120,130,140]]]
>> 0.010934004978399577
>> [0.010934 0.0035994 0.00075973]
6. Ngoài ra, PMF bằng 0 ngoại trừ sự hỗ trợ của phân phối này xảy ra là 0, 1, 2, …, 10. Thay vì print[normal.pdf[120]]
print[normal.pdf[[120,130,140]]]
>> 0.010934004978399577
>> [0.010934 0.0035994 0.00075973]
7 được sử dụng để tạo các số từ một phạm vi liên tục, chúng tôi sẽ sử dụng print[normal.pdf[120]]
print[normal.pdf[[120,130,140]]]
>> 0.010934004978399577
>> [0.010934 0.0035994 0.00075973]
8 để tạo các giá trị theo một tập hợp rời rạc. Đối với chúng tôi, đây sẽ làt=np.arange[0,11]
t
>> array[[ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]]
Lưu ý cách chúng ta phải đặt
print[normal.pdf[120]]
print[normal.pdf[[120,130,140]]]
>> 0.010934004978399577
>> [0.010934 0.0035994 0.00075973]
9 thay vì t = np.linspace[50,150,100]
plt.plot[t,normal.pdf[t],label="PDF"]
plt.legend[]
plt.show[]
0 vì nó không trả về số cuối cùng. Bây giờ, bằng cách sử dụng các giá trị này, chúng ta có thể vẽ đồ thị PMF của phân phối nhị thức của chúng tanormal.rvs[size=10,random_state=143]
>> array[[ 87.50268488, 118.56536514, 62.86403442, 84.42053641,
114.91967271, 102.67337385, 92.6638058 , 93.36867073,
96.22587266, 92.97029531]]
0Bây giờ chúng tôi sẽ tạo 1000 số ngẫu nhiên từ phân phối này
t = np.linspace[50,150,100]
plt.plot[t,normal.pdf[t],label="PDF"]
plt.legend[]
plt.show[]
1và tạo một biểu đồ. Vì chúng tôi đang xử lý các số rời rạc, chúng tôi phải thêm một số tùy chọn để kiểm soát cách tính toán biểu đồt = np.linspace[50,150,100]
2 để đảm bảo chúng ta có 11 ngăn, mỗi ngăn cho một số 0,1,…,10
plt.plot[t,normal.pdf[t],label="PDF"]
plt.legend[]
plt.show[]t = np.linspace[50,150,100]
3 để đảm bảo các lớp tương ứng là [0,1], [1,2], …, [10,11]
plt.plot[t,normal.pdf[t],label="PDF"]
plt.legend[]
plt.show[]t = np.linspace[50,150,100]
4 để đảm bảo rằng thanh được căn chỉnh với PMF [bạn sẽ thấy lý do tại sao sau này khi chúng tôi phủ lên mọi thứ
plt.plot[t,normal.pdf[t],label="PDF"]
plt.legend[]
plt.show[]t = np.linspace[50,150,100]
5 vì vậy các thanh của biểu đồ là 75% chiều rộng của lớp. Điều này sẽ đảm bảo rằng các thanh không chạm vào nhau để thông báo rằng chúng tôi đang làm việc với dữ liệu rời rạc
plt.plot[t,normal.pdf[t],label="PDF"]
plt.legend[]
plt.show[]t = np.linspace[50,150,100]
6 để các thanh ở dạng bán trong suốt để lớp phủ trông đẹp mắt
plt.plot[t,normal.pdf[t],label="PDF"]
plt.legend[]
plt.show[]
Đây là mã đầy đủ
normal.rvs[size=10,random_state=143]
>> array[[ 87.50268488, 118.56536514, 62.86403442, 84.42053641,
114.91967271, 102.67337385, 92.6638058 , 93.36867073,
96.22587266, 92.97029531]]
1Biểu đồ của 1000 số ngẫu nhiên từ phân phối nhị thức
Cuối cùng, đây là mã đặt PMF và biểu đồ cùng nhau
normal.rvs[size=10,random_state=143]
>> array[[ 87.50268488, 118.56536514, 62.86403442, 84.42053641,
114.91967271, 102.67337385, 92.6638058 , 93.36867073,
96.22587266, 92.97029531]]
2Biểu đồ của một mẫu ngẫu nhiên từ phân phối nhị thức và biểu đồ của PMF liên quan
Phân phối Poisson cũng được sử dụng rất phổ biến trong thực tế. Nó được sử dụng để mô hình hóa số lượng các sự kiện [chẳng hạn như tai nạn xe hơi] xảy ra trong một khoảng thời gian [hoặc không gian] cố định. Các giá trị mà biến ngẫu nhiên này có thể nhận là 0,1,2,… [nó kéo dài mãi mãi]. Trong
print[normal.pdf[120]]
print[normal.pdf[[120,130,140]]]
>> 0.010934004978399577
>> [0.010934 0.0035994 0.00075973]
0, chúng ta có thể thiết lập một đối tượng phân phối Poisson bằng cách t = np.linspace[50,150,100]
plt.plot[t,normal.pdf[t],label="PDF"]
plt.legend[]
plt.show[]
8. Tạo số ngẫu nhiên giống như các bản phân phối khácnormal.rvs[size=10,random_state=143]
>> array[[ 87.50268488, 118.56536514, 62.86403442, 84.42053641,
114.91967271, 102.67337385, 92.6638058 , 93.36867073,
96.22587266, 92.97029531]]
3Dựa trên mọi thứ chúng tôi đã thực hiện ở trên, chúng tôi có thể tạo 1000 số ngẫu nhiên từ phân phối này, vẽ biểu đồ và PMF cùng nhau trên cùng một biểu đồ. Cố gắng tự làm điều này trước khi xem mã bên dưới. Để khuyến khích bạn, trước tiên tôi sẽ hiển thị kết quả cuối cùng và sau đó là mã
Biểu đồ của một mẫu ngẫu nhiên từ phân phối Poisson và đồ thị của PMF liên quan_______0_______4
Một phần khó khăn ở đây là vì sự hỗ trợ của biến ngẫu nhiên Poisson không có điểm kết thúc, chúng ta phải quyết định nơi dừng tính toán. Đối với chúng tôi, đây sẽ là giá trị lớn nhất của dữ liệu mẫu của chúng tôi;