Phân phối theo cấp số nhân là một phân phối xác suất được sử dụng để mô hình hóa thời gian chúng ta phải đợi cho đến khi một sự kiện nhất định xảy ra.
Nếu một biến ngẫu nhiên x tuân theo phân phối theo cấp số nhân, thì chức năng phân phối tích lũy của & nbsp; có thể được viết là:he cumulative distribution function of X can be written as:
F [x; λ] = 1-e-λx
where:
- λ: tham số tốc độ [được tính là = 1/μ] the rate parameter [calculated as λ = 1/μ]
- E: Một hằng số gần bằng 2,718 A constant roughly equal to 2.718
Hướng dẫn này giải thích cách sử dụng phân phối theo cấp số nhân trong Python.
Cách tạo phân phối theo cấp số nhân
Bạn có thể sử dụng hàm expon.rvs [tỷ lệ, kích thước] từ thư viện SCIPY trong Python để tạo các giá trị ngẫu nhiên từ phân phối theo cấp số nhân với tham số tốc độ cụ thể và kích thước mẫu:expon.rvs[scale, size] function from the SciPy library in Python to generate random values from an exponential distribution with a specific rate parameter and sample size:
from scipy.stats import expon #generate random values from exponential distribution with rate=40 and sample size=10 expon.rvs[scale=40, size=10] array[[116.5368323 , 67.23514699, 12.00399043, 40.74580584, 34.60922432, 2.68266663, 22.70459831, 97.66661811, 6.64272914, 46.15547298]]
Lưu ý: Bạn có thể tìm thấy tài liệu đầy đủ cho thư viện SCIPY tại đây.: You can find the complete documentation for the SciPy library here.
Cách tính xác suất bằng cách sử dụng phân phối theo cấp số nhân
Giả sử số phút trung bình giữa các vụ phun trào đối với một mạch nước phun nhất định là 40 phút. Xác suất mà chúng ta sẽ phải đợi dưới 50 phút cho một vụ phun trào là gì?
Để giải quyết điều này, trước tiên chúng ta cần tính toán tham số tỷ lệ:
- = 1/μ
- = 1/40
- = .025
Chúng ta có thể cắm λ = .025 và x = 50 vào công thức cho CDF:
- P [x ≤ x] = 1-e-λx
- P [x ≤ 50] = 1-E-.025 [50]
- P [x ≤ 50] = 0,7135
Xác suất mà chúng tôi sẽ phải chờ ít hơn 50 phút cho vụ phun trào tiếp theo là & nbsp; 0,7135.0.7135.
Chúng ta có thể sử dụng hàm expon.cdf [] từ SCIPY để giải quyết vấn đề này trong Python:expon.cdf[] function from SciPy to solve this problem in Python:
from scipy.stats import expon #calculate probability that x is less than 50 when mean rate is 40 expon.cdf[x=50, scale=40] 0.7134952031398099
Xác suất mà chúng tôi sẽ phải chờ ít hơn 50 phút cho vụ phun trào tiếp theo là & nbsp; 0,7135.0.7135.
Chúng ta có thể sử dụng hàm expon.cdf [] từ SCIPY để giải quyết vấn đề này trong Python:
Điều này phù hợp với giá trị mà chúng tôi tính bằng tay.
Cách vẽ sơ đồ phân phối theo cấp số nhân
from scipy.stats import expon import matplotlib.pyplot as plt #generate exponential distribution with sample size 10000 x = expon.rvs[scale=40, size=10000] #create plot of exponential distribution plt.hist[x, density=True, edgecolor='black']
Bạn có thể sử dụng cú pháp sau để vẽ phân phối theo cấp số nhân với tham số tỷ lệ đã cho:
Tài nguyên bổ sung
Các hướng dẫn sau đây giải thích cách sử dụng các phân phối phổ biến khác trong Python:
How to Use the t Distribution in Python
How to Use the Uniform Distribution in Python
Phân phối theo cấp số nhân là phân phối xác suất của thời gian giữa các sự kiện trong quá trình điểm Poisson, tức là, một quá trình trong đó các sự kiện xảy ra liên tục và độc lập với tốc độ trung bình không đổi. Đó là một trường hợp cụ thể của phân phối gamma. Ví dụ: khách hàng đến cửa hàng, yêu cầu tệp trên máy chủ, v.v.
Hàm mật độ xác suất [PDF] của phân phối theo cấp số nhân được định nghĩa là:probability density function [pdf] of exponential distribution is defined as:
Trong đó, là tham số tỷ lệ là nghịch đảo của tham số tốc độ = 1/.
Một phân phối theo cấp số nhân có giá trị trung bình β và phương sai 2.
Hàm phân phối tích lũy [CDF] được đánh giá tại X, là xác suất mà biến ngẫu nhiên [x] sẽ có giá trị nhỏ hơn hoặc bằng x. CDF của phân phối theo cấp số nhân được định nghĩa là:cumulative distribution function [cdf] evaluated at x, is the probability that the random variable [X] will take a value less than or equal to x. The cdf of exponential distribution is defined as:
Hàm ngẫu nhiên numpy.Exential [] trả về các mẫu ngẫu nhiên từ phân phối theo cấp số nhân.random.exponential[] function returns random samples from a exponential distribution.
Cú pháp
numpy.random.exponential[scale=1.0, size=None]
Thông số
scale | from scipy.stats import expon #calculate probability that x is less than 50 when mean rate is 40 expon.cdf[x=50, scale=40] 0.71349520313980990Specify tham số tỷ lệ, = 1/. float hoặc mảng_Lik của phao. Phải không âm. Mặc định là 1.0. |
from scipy.stats import expon #calculate probability that x is less than 50 when mean rate is 40 expon.cdf[x=50, scale=40] 0.71349520313980991 | from scipy.stats import expon #calculate probability that x is less than 50 when mean rate is 40 expon.cdf[x=50, scale=40] 0.71349520313980990Specify hình dạng đầu ra. int hoặc tuple của ints. Nếu hình dạng đã cho là [m, n, k], thì các mẫu m * n * k được vẽ. Nếu kích thước không có [mặc định], một giá trị duy nhất được trả về nếu tỷ lệ là vô hướng. Mặt khác, np.array [tỷ lệ]. Các mẫu kích thước được rút ra. |
Giá trị trả về
Trả về các mẫu từ phân phối theo cấp số nhân được tham số hóa. ndarray hoặc vô hướng.
Ví dụ: Các giá trị từ phân phối theo cấp số nhân
Trong ví dụ dưới đây, hàm ngẫu nhiên
import numpy as np size = [5,3] sample = np.random.exponential[1, size] print[sample]
Đầu ra có thể của mã trên có thể là:
[[0.71318134 0.51261985 2.21255627] [0.38593481 0.54545811 0.39075276] [0.56583485 1.59475025 0.13879821] [0.82487244 0.20735562 1.33014896] [0.21085364 1.06640552 1.33323175]]
Ví dụ: Biểu đồ mật độ
Matplotlib là một thư viện sơ đồ cho python có thể được sử dụng để vẽ đồ thị hàm mật độ xác suất [PDF] của phân phối theo cấp số nhân sử dụng hàm hist [].
import matplotlib.pyplot as plt import numpy as np #fixing the seed for reproducibility #of the result np.random.seed[10] size = 10000 #drawing 10000 sample from #exponential distribution sample = np.random.exponential[1, size] bin = np.arange[0,10,0.1] plt.hist[sample, bins=bin, edgecolor='blue'] plt.title["Exponential Distribution"] plt.show[]
Đầu ra của mã trên sẽ là:
Ví dụ: So sánh PDFS
Nhiều hàm mật độ xác suất có thể được so sánh bằng đồ họa sử dụng hàm kdeplot [] seeborn. Trong ví dụ dưới đây, PDF của ba phân phối theo cấp số nhân [với yếu tố tỷ lệ 1, 2 và 3 tương ứng] được so sánh.kdeplot[] function. In the example below, pdf of three exponential distributions [with scale factor 1, 2 and 3 respectively] are compared.
import numpy as np import matplotlib.pyplot as plt import seaborn as sns #fixing the seed for reproducibility #of the result np.random.seed[10] size = 1000 #plotting 1000 sample from #different exponential distribution sns.kdeplot[np.random.exponential[1, size]] sns.kdeplot[np.random.exponential[2, size]] sns.kdeplot[np.random.exponential[3, size]] plt.legend[[r"$\beta = 1$", r"$\beta = 2$", r"$\beta = 3$"]] plt.show[]
Đầu ra của mã trên sẽ là:
Ví dụ: So sánh PDFS
Nhiều hàm mật độ xác suất có thể được so sánh bằng đồ họa sử dụng hàm kdeplot [] seeborn. Trong ví dụ dưới đây, PDF của ba phân phối theo cấp số nhân [với yếu tố tỷ lệ 1, 2 và 3 tương ứng] được so sánh.ecdfplot[] function. In the example below, cdf of three exponential distributions [with scale factor 1, 2 and 3 respectively] are compared.
import numpy as np import matplotlib.pyplot as plt import seaborn as sns #fixing the seed for reproducibility #of the result np.random.seed[10] size = 1000 #plotting 1000 sample from #different exponential distribution sns.ecdfplot[np.random.exponential[1, size]] sns.ecdfplot[np.random.exponential[2, size]] sns.ecdfplot[np.random.exponential[3, size]] plt.legend[[r"$\beta = 1$", r"$\beta = 2$", r"$\beta = 3$"]] plt.show[]
Đầu ra của mã trên sẽ là: