Hướng dẫn poisson process python code - mã python quy trình poisson

Tôi cần viết một hàm trong Python 3, trả về một mảng các vị trí (x, y) trên trường hình chữ nhật (ví dụ: 100x100 điểm) nằm rải rác theo quy trình Poisson không gian đồng nhất.

Nội phân chính

  • Giới thiệu
  • Quá trình Poisson là gì
  • Phân phối Poisson là gì?
  • Ví dụ phân phối Poisson
  • Poisson PMF (Hàm khối xác suất)
  • Poisson CDF (chức năng phân phối tích lũy)
  • Ví dụ phân phối Poisson trong Python
  • Poisson PMF (Chức năng khối xác suất) trong Python
  • Lô poisson pmf sử dụng python
  • Poisson cdf (chức năng phân phối tích lũy) trong Python
  • Lô poisson cdf sử dụng python

Cho đến nay tôi đã tìm thấy tài nguyên này với mã Python, nhưng thật không may, tôi không thể tìm/cài đặt Scipy cho Python 3:

http://connor-johnson.com/2014/02/25/spatial-point-processes/

Nó đã giúp tôi hiểu quá trình Poisson Point thực sự là gì và nó hoạt động như thế nào.

Tôi đã chơi xung quanh với numpy.random.poisson một thời gian, nhưng tôi đang có một thời gian khó khăn để giải thích những gì nó trở lại.

http://docs.scipy.org/doc/numpy/reference/generated/numpy.random.poisson.html

>>> import numpy as np
>>> np.random.poisson(1, (1, 5, 5))
array([[[0, 2, 0, 1, 0],
        [3, 2, 0, 2, 1],
        [0, 1, 3, 3, 2],
        [0, 1, 2, 0, 2],
        [1, 2, 1, 0, 3]]])

Những gì tôi nghĩ rằng lệnh đó là tạo ra một trường 5x5 = (1, 5, 5) và các đối tượng tán xạ với tốc độ lambda = 1 trên trường đó. Các số được hiển thị trong ma trận kết quả là xác suất của một đối tượng nằm trên vị trí cụ thể đó.

Làm thế nào tôi có thể phân tán, nói, mười đối tượng trên trường 5x5 đó theo một quá trình Poisson không gian đồng nhất? Dự đoán đầu tiên của tôi sẽ là lặp lại toàn bộ mảng và chèn một đối tượng vào mọi vị trí với "3", sau đó là một vị trí khác với "2", v.v. nên sử dụng để xác định xem một đối tượng có nên được chèn hay không.

Theo tài nguyên sau, tôi có thể mô phỏng 10 đối tượng được phân tán trên một trường với tốc độ 1 bằng cách nhân tỷ lệ và số lượng đối tượng (10*1 = 10) và sử dụng giá trị đó làm lambda của tôi, tức là.

>>> np.random.poisson(10, (1, 5, 5))
array([[[12, 12, 10, 16, 16],
        [ 8,  6,  8, 12,  9],
        [12,  4, 10,  3,  8],
        [15, 10, 10, 15,  7],
        [ 8, 13, 12,  9,  7]]])

Tuy nhiên, tôi không thấy làm thế nào điều đó sẽ làm cho mọi thứ dễ dàng hơn. Tôi chỉ tăng tốc độ mà các đối tượng xuất hiện theo 10 theo cách đó.

Quá trình Poisson Point ở Matlab

Tóm lại, câu hỏi chính của tôi là: Làm thế nào tôi có thể sử dụng

>>> np.random.poisson(10, (1, 5, 5))
array([[[12, 12, 10, 16, 16],
        [ 8,  6,  8, 12,  9],
        [12,  4, 10,  3,  8],
        [15, 10, 10, 15,  7],
        [ 8, 13, 12,  9,  7]]])
6 để mô hình hóa số
>>> np.random.poisson(10, (1, 5, 5))
array([[[12, 12, 10, 16, 16],
        [ 8,  6,  8, 12,  9],
        [12,  4, 10,  3,  8],
        [15, 10, 10, 15,  7],
        [ 8, 13, 12,  9,  7]]])
7 của các đối tượng bị phân tán trên trường 2 chiều
>>> np.random.poisson(10, (1, 5, 5))
array([[[12, 12, 10, 16, 16],
        [ 8,  6,  8, 12,  9],
        [12,  4, 10,  3,  8],
        [15, 10, 10, 15,  7],
        [ 8, 13, 12,  9,  7]]])
8?

Trong bài viết này, chúng tôi sẽ khám phá quá trình phân phối Poisson và Poisson trong Python.

Mục lục

  • Giới thiệu
  • Quá trình Poisson là gì
  • Phân phối Poisson là gì?
  • Ví dụ phân phối Poisson
    • Poisson PMF (Hàm khối xác suất)
    • Poisson CDF (chức năng phân phối tích lũy)
  • Ví dụ phân phối Poisson trong Python
    • Poisson PMF (Chức năng khối xác suất) trong Python
    • Lô poisson pmf sử dụng python
    • Poisson cdf (chức năng phân phối tích lũy) trong Python
    • Lô poisson cdf sử dụng python
  • Cho đến nay tôi đã tìm thấy tài nguyên này với mã Python, nhưng thật không may, tôi không thể tìm/cài đặt Scipy cho Python 3:

Giới thiệu

Nó đã giúp tôi hiểu quá trình Poisson Point thực sự là gì và nó hoạt động như thế nào.

Tôi đã chơi xung quanh với numpy.random.poisson một thời gian, nhưng tôi đang có một thời gian khó khăn để giải thích những gì nó trở lại.


pip install scipy
pip install numpy
pip install matplotlib

Quá trình Poisson là gì

Những gì tôi nghĩ rằng lệnh đó là tạo ra một trường 5x5 = (1, 5, 5) và các đối tượng tán xạ với tốc độ lambda = 1 trên trường đó. Các số được hiển thị trong ma trận kết quả là xác suất của một đối tượng nằm trên vị trí cụ thể đó.

Làm thế nào tôi có thể phân tán, nói, mười đối tượng trên trường 5x5 đó theo một quá trình Poisson không gian đồng nhất? Dự đoán đầu tiên của tôi sẽ là lặp lại toàn bộ mảng và chèn một đối tượng vào mọi vị trí với "3", sau đó là một vị trí khác với "2", v.v. nên sử dụng để xác định xem một đối tượng có nên được chèn hay không.

Theo tài nguyên sau, tôi có thể mô phỏng 10 đối tượng được phân tán trên một trường với tốc độ 1 bằng cách nhân tỷ lệ và số lượng đối tượng (10*1 = 10) và sử dụng giá trị đó làm lambda của tôi, tức là.

Tuy nhiên, tôi không thấy làm thế nào điều đó sẽ làm cho mọi thứ dễ dàng hơn. Tôi chỉ tăng tốc độ mà các đối tượng xuất hiện theo 10 theo cách đó.

Quá trình Poisson Point ở Matlab

Tóm lại, câu hỏi chính của tôi là: Làm thế nào tôi có thể sử dụng

>>> np.random.poisson(10, (1, 5, 5))
array([[[12, 12, 10, 16, 16],
        [ 8,  6,  8, 12,  9],
        [12,  4, 10,  3,  8],
        [15, 10, 10, 15,  7],
        [ 8, 13, 12,  9,  7]]])
6 để mô hình hóa số
>>> np.random.poisson(10, (1, 5, 5))
array([[[12, 12, 10, 16, 16],
        [ 8,  6,  8, 12,  9],
        [12,  4, 10,  3,  8],
        [15, 10, 10, 15,  7],
        [ 8, 13, 12,  9,  7]]])
7 của các đối tượng bị phân tán trên trường 2 chiều
>>> np.random.poisson(10, (1, 5, 5))
array([[[12, 12, 10, 16, 16],
        [ 8,  6,  8, 12,  9],
        [12,  4, 10,  3,  8],
        [15, 10, 10, 15,  7],
        [ 8, 13, 12,  9,  7]]])
8?


Phân phối Poisson là gì?

Trong bài viết này, chúng tôi sẽ khám phá quá trình phân phối Poisson và Poisson trong Python.

  1. Mục lục
  2. Phân phối Poisson là gì

Sự kết luận

Để tiếp tục làm theo hướng dẫn này, chúng tôi sẽ cần các thư viện Python sau: Scipy, Numpy và Matplotlib.

PMF (hàm khối lượng xác suất) của phân phối Poisson được đưa ra bởi:

$$ p (k, \ lambda) = \ frac {\ lambda^{k} e^{-\ lambda}} {k!} $$

ở đâu:

  • \ (\ lambda \) là một số dương thực sự được đưa ra bởi \ (\ lambda = e (x) = \ mu \)
  • \ (k \) là số lần xuất hiện
  • \ (e = 2.71828 \)

\ (Pr (x = k) \) có thể được đọc là: Xác suất Poisson của K sự kiện trong một khoảng thời gian.

Và CDF (hàm phân phối tích lũy) của phân phối Poisson được đưa ra bởi:

$$ f (k, \ lambda) = \ sum^{k} _ {i = 0} \ frac {\ lambda^{i} e^{-\ lambda}} {i!} $$


Ví dụ phân phối Poisson

Bây giờ chúng ta đã biết một số công thức để làm việc, hãy để đi qua một ví dụ chi tiết.

Nhớ lại dữ liệu bão mà chúng tôi đã đề cập trong các phần trước. Chúng tôi biết rằng tần số lịch sử của bão là 7 mỗi năm (đó là tốc độ, \ (\ mu \) và điều này tạo thành giá trị \ (\ lambda \) của chúng tôi (vì \ (\ lambda = \ mu \)):

$$ \ lambda = 7 $$

Câu hỏi chúng ta có thể có là xác suất quan sát chính xác 5 cơn bão trong năm nay là gì? Và điều này tạo thành giá trị \ (k \) của chúng tôi:

$$ k = 5 $$

Sử dụng công thức từ phần trước, chúng ta có thể tính toán xác suất Poisson:

$$ P (5, 7) = \ frac {(7^{5}) (e^{-7})} {5!} = 0.12772 \ xấp xỉ 12,77 \%$$ $$

Do đó, xác suất quan sát chính xác 5 cơn bão vào năm tới bằng 12,77%.

Đương nhiên, chúng tôi tò mò về xác suất của các tần số khác.


Poisson PMF (Hàm khối xác suất)

Hãy xem xét bảng dưới đây cho thấy xác suất Poisson của tần số bão (0-15):

\ (k \) \ (p (k, \ lambda) \)Phần trăm
0 0.00091 0,09%
1 0.00638 0,64%
2 0.02234 2,23%
3 0.05213 5,21%
4 0.09123 9,12%
5 0.12772 12,77%
6 0.14900 14,9%
7 0.14900 14,9%
8 0.13038 13,04%
9 0.10140 10,14%
10 0.07098 7,01%
11 0.04517 4,52%
12 0.02635 2,64%
13 0.01419 1,42%
14 0.00709 0,71%
15 0.00331 0,33%
16 0.00145 0,15%

Sử dụng bảng trên, chúng ta có thể tạo hình ảnh sau đây về hàm khối lượng xác suất Poisson cho ví dụ này:

Hướng dẫn poisson process python code - mã python quy trình poisson

Poisson PMF

Poisson CDF (chức năng phân phối tích lũy)

Hãy xem xét bảng dưới đây cho thấy xác suất tích lũy Poisson của tần số bão (0-15):

\ (k \) \ (p (k, \ lambda) \)Phần trăm
0 0.00091 0,09%
1 0.00730 0,64%
2 0.02964 2,23%
3 0.08177 5,21%
4 0.17299 9,12%
5 0.30071 12,77%
6 0.44971 14,9%
7 0.59871 13,04%
8 0.72909 10,14%
9 0.83050 7,01%
10 0.90148 4,52%
11 0.94665 2,64%
12 0.97300 1,42%
13 0.98719 0,71%
14 0.99428 0,33%
15 0.99759 0,15%
16 0.99904 Sử dụng bảng trên, chúng ta có thể tạo hình ảnh sau đây về hàm khối lượng xác suất Poisson cho ví dụ này:

Poisson PMF

Poisson CDF (chức năng phân phối tích lũy)

Hãy xem xét bảng dưới đây cho thấy xác suất tích lũy Poisson của tần số bão (0-15):

\ (F (k, \ lambda) \)

0,73%


2,96%

8,18%

17,3%


import numpy as np
import matplotlib.pyplot as plt
from scipy.stats import poisson

30,07%


k = np.arange(0, 17)

print(k)

44,97%

[ 0  1  2  3  4  5  6  7  8  9 10 11 12 13 14 15 16]

59,87%


72,91%

83,05%.pmf() method of the scipy.poisson generator. It will need two parameters:

  1. 90,15%k array that we created)
  2. 94,67%

97,3%


pmf = poisson.pmf(k, mu=7)
pmf = np.round(pmf, 5)

print(pmf)

98,72%

[0.00091 0.00638 0.02234 0.05213 0.09123 0.12772 0.149   0.149   0.13038 0.1014  0.07098 0.04517 0.02635 0.01419 0.00709 0.00331 0.00145]

Note:

99,43%\(k\) value and the corresponding probability:


for val, prob in zip(k,pmf):
    print(f"k-value {val} has probability = {prob}")

98,72%

k-value 0 has probability = 0.00091
k-value 1 has probability = 0.00638
k-value 2 has probability = 0.02234
k-value 3 has probability = 0.05213
k-value 4 has probability = 0.09123
k-value 5 has probability = 0.12772
k-value 6 has probability = 0.149
k-value 7 has probability = 0.149
k-value 8 has probability = 0.13038
k-value 9 has probability = 0.1014
k-value 10 has probability = 0.07098
k-value 11 has probability = 0.04517
k-value 12 has probability = 0.02635
k-value 13 has probability = 0.01419
k-value 14 has probability = 0.00709
k-value 15 has probability = 0.00331
k-value 16 has probability = 0.00145

99,43%


99,76%

99,9%k values array that we created earlier as well as the pmf values array in this step.

Sử dụng bảng trên, chúng ta có thể tạo hình ảnh sau đây về chức năng phân phối tích lũy Poisson cho ví dụ này:matplotlib library, we can easily plot the Poisson PMF using Python:

>>> np.random.poisson(10, (1, 5, 5))
array([[[12, 12, 10, 16, 16],
        [ 8,  6,  8, 12,  9],
        [12,  4, 10,  3,  8],
        [15, 10, 10, 15,  7],
        [ 8, 13, 12,  9,  7]]])
0

98,72%

99,43%

99,76%

99,9%.cdf() method of the scipy.poisson generator. It will need two parameters:

  1. giá trị \ (k \) (mảng k mà chúng tôi đã tạo)k array that we created)
  2. \ (\ mu \) giá trị (mà chúng tôi sẽ đặt thành 7 như trong ví dụ của chúng tôi)

Và bây giờ chúng ta có thể tạo một mảng với các giá trị xác suất tích lũy Poisson:

>>> np.random.poisson(10, (1, 5, 5))
array([[[12, 12, 10, 16, 16],
        [ 8,  6,  8, 12,  9],
        [12,  4, 10,  3,  8],
        [15, 10, 10, 15,  7],
        [ 8, 13, 12,  9,  7]]])
1

Và bạn nên nhận được:

>>> np.random.poisson(10, (1, 5, 5))
array([[[12, 12, 10, 16, 16],
        [ 8,  6,  8, 12,  9],
        [12,  4, 10,  3,  8],
        [15, 10, 10, 15,  7],
        [ 8, 13, 12,  9,  7]]])
2

Note:

Nếu bạn muốn in nó theo cách đẹp hơn với mỗi giá trị \ (k \) và xác suất tích lũy tương ứng:\(k\) value and the corresponding cumulative probability:

>>> np.random.poisson(10, (1, 5, 5))
array([[[12, 12, 10, 16, 16],
        [ 8,  6,  8, 12,  9],
        [12,  4, 10,  3,  8],
        [15, 10, 10, 15,  7],
        [ 8, 13, 12,  9,  7]]])
3

Và bạn nên nhận được:

>>> np.random.poisson(10, (1, 5, 5))
array([[[12, 12, 10, 16, 16],
        [ 8,  6,  8, 12,  9],
        [12,  4, 10,  3,  8],
        [15, 10, 10, 15,  7],
        [ 8, 13, 12,  9,  7]]])
4

Nếu bạn muốn in nó theo cách đẹp hơn với mỗi giá trị \ (k \) và xác suất tích lũy tương ứng:


Điều này giống hệt như chúng ta đã thấy trong ví dụ mà chúng ta đã tính toán xác suất tích lũy bằng tay.

Lô poisson cdf sử dụng pythonk values array that we created earlier as well as the pmf values array in this step.

Chúng tôi sẽ cần mảng giá trị K mà chúng tôi đã tạo sớm hơn cũng như mảng giá trị PMF trong bước này.matplotlib library, we can easily plot the Poisson PMF using Python:

>>> np.random.poisson(10, (1, 5, 5))
array([[[12, 12, 10, 16, 16],
        [ 8,  6,  8, 12,  9],
        [12,  4, 10,  3,  8],
        [15, 10, 10, 15,  7],
        [ 8, 13, 12,  9,  7]]])
5

Và bạn nên nhận được:

Nếu bạn muốn in nó theo cách đẹp hơn với mỗi giá trị \ (k \) và xác suất tích lũy tương ứng:

Điều này giống hệt như chúng ta đã thấy trong ví dụ mà chúng ta đã tính toán xác suất tích lũy bằng tay.

Lô poisson cdf sử dụng python

Chúng tôi sẽ cần mảng giá trị K mà chúng tôi đã tạo sớm hơn cũng như mảng giá trị PMF trong bước này.