Hướng dẫn poisson regression from scratch python - hồi quy poisson từ đầu trăn

Nguồn hình ảnh

Hồi quy Poisson với Python từ đầu để hiểu rõ hơn về nó. Một thư viện Python hữu ích có tên StatSmodels có thể thực hiện phân tích hồi quy ngay lập tức. Tuy nhiên, tôi đã cố gắng thực hiện nó mà không sử dụng thư viện Python để có sự hiểu biết sâu sắc hơn.

Trong bài viết này, chúng tôi sẽ đề cập đến việc giải thích đơn giản về hồi quy Poisson, các khái niệm xác suất quan trọng và cách viết mã mà không cần thư viện Python.

Poisson là gì?

Hồi quy Poisson được sử dụng để mô hình các biến phản hồi (giá trị y) được tính. Nó cho bạn biết những biến giải thích nào có ảnh hưởng có ý nghĩa thống kê đối với biến phản hồi. Dữ liệu đếm số lần số lần một hiện tượng nhất định đã xảy ra trong một khoảng thời gian nhất định. Ví dụ: số vụ tai nạn và số lượng email nhận được mỗi ngày.

Phân tích hồi quy chung giả định rằng biến khách quan (nghĩa là phần dư) tuân theo phân phối bình thường, trong khi hồi quy Poisson giả định phân phối Poisson. Có vẻ xấu nếu các biến theo phân phối bình thường được giả định cho phân phối Poisson.

Nó được dự đoán như thế nào

Trong phân tích hồi quy, các hệ số được dự đoán như sau

(1) 𝜃 = 𝑎 + 𝑏𝑥

Khi biến 𝑥 xuất hiện, ý tưởng là tuân theo phân phối bình thường của giá trị trung bình. Áp dụng điều này cho phân phối Poisson, tôi muốn theo dõi phân phối Poisson với giá trị trung bình khi biến 𝑥 đến. Hơn nữa, vì giá trị trung bình của phân phối Poisson là không âm tính, nên những điều sau đây có thể được xem xét như sau

(2) 𝜃 = exp (𝑎 + 𝑏𝑥)

Nếu đó là một hàm theo cấp số nhân, 𝑥 sẽ tích cực bất kể 𝑥, hoặc B đến. Tại thời điểm này, nó có thể được chuyển đổi như sau

(3) log𝜃 = 𝑎 + 𝑏𝑥

Phía bên trái được biến đổi được gọi là hàm liên kết (hàm liên kết log). Và phía bên phải được gọi là dự đoán tuyến tính. Trong thực tế, (1) không chuyển đổi bất cứ điều gì, tuy nhiên chức năng liên kết không chuyển đổi bất cứ điều gì, mối quan hệ này giữ vững, sau đó nó được gọi là chức năng liên kết nhận dạng.

Cách tìm hệ số

Hãy cùng tìm thấy các hệ số 𝑎 và B trong phương trình (2).

Giả sử dữ liệu bây giờ có biến giải thích = {1, 𝑥2,} và biến mục tiêu có 𝑦 = {1, 𝑦2 𝑦𝑛}. Những gì chúng tôi muốn làm là dự đoán từng tham số bằng một biến giải thích, chẳng hạn như giả định phân phối Poisson với giá trị trung bình 𝑦1 khi 𝑥1 đến trong.

Theo thuật ngữ toán học, chúng tôi muốn tìm các hệ số 𝑎 và B tối đa hóa xác suất mà biến giải thích sẽ nhận ra biến khách quan hiện tại. Do đó, có vẻ tốt hơn để tìm các hệ số 𝑎 và B tối đa hóa hàm khả năng. Do đó, tối đa hóa công thức sau.

Ý nghĩa của 𝑦𝑖 (𝑦𝑖 |) đại diện cho xác suất biến giải thích sẽ xảy ra trong phân phối poisson của giá trị trung bình, khi biến giải thích 𝑥𝑖 đi vào, biến đổi bởi các hệ số 𝑎 và 𝑏 để tìm giá trị trung bình. Hãy nhớ rằng 𝜃𝑖 là

= exp (𝑎 + 𝑏𝑥𝑖)..

Nó dễ dàng hơn để chuyển đổi logarit sang phương trình hơn là tính toán nó như nó là.

Khi nói đến C𝑜𝑛𝑠𝑡 ở phía bên phải, ngoại trừ tham số, nó không liên quan gì đến tối đa hóa. Điều này có thể được bỏ qua khi tối đa hóa.

Thực hiện trong Python

Tôi đã sử dụng dữ liệu từ liên kết như sau

Hãy cùng thử phân tích hồi quy để xem số lượng hạt trung bình thay đổi như thế nào với kích thước của hoa!

Sau đó, xác định chức năng khả năng nhật ký mà chúng tôi muốn tối đa hóa lần này.

Nếu bạn có một ý tưởng tốt hơn cho mã hóa, xin vui lòng cho tôi biết.

Dữ liệu gọi [‘Y,] cung cấp cho bạn một vectơ của các biến khách quan và dữ liệu gọi [‘ X,] cung cấp cho bạn một vectơ các biến giải thích. Sau đó, lấy từng cái theo chỉ số và thêm chúng vào TOTALL, và trừ chúng vào cuối.

Liên quan đến điểm trừ này, tôi thấy rằng chỉ có chức năng tối ưu hóa SCIPY, vì vậy tôi đã làm cho nó giảm thiểu với trừ đi. Trước khi tối ưu hóa, chúng tôi cần các hệ số. Hiện tại, hãy để xác định ngẫu nhiên.

Việc tối ưu hóa bây giờ đã hoàn tất! Cuối cùng, hãy để âm mưu nó trên một biểu đồ!

Tôi có biểu đồ này

Nếu bạn có một độ dốc như vậy, nó hoạt động tốt. Chúng ta có thể thấy rằng số lượng hạt đã thay đổi (tăng) đến một mức độ nào đó tùy thuộc vào kích thước của hoa.

Xin chào! Vì bài viết đầu tiên của tôi, tôi sẽ cố gắng tạo ra gần như toàn bộ suy luận của mô hình hồi quy Poisson, đây cũng là một khóa học cho lớp nhận dạng mẫu của tôi, vì vậy, hãy thử điều này ở nhà.

Trong bài đăng này, chúng tôi sẽ đề cập:

  1. Hồi quy Poisson là gì?
  2. Phân phối Poisson như một phần của gia đình theo cấp số nhân.
  3. Phương pháp log-khả năng đăng nhập tối đa.
  4. Tạo ra chức năng mất.
  5. Đại diện ma sát.
  6. Một triển khai đơn giản.
  7. Tài liệu tham khảo tuyệt vời.

1. Hồi quy Poisson là gì?

Chúng ta đã biết về hồi quy tuyến tính, giúp chúng ta trả lời các câu hỏi như một ngôi nhà với những đặc điểm này sẽ có giá bao nhiêu? Hoặc hồi quy logistic, được sử dụng để mô hình hóa xác suất của một lớp hoặc sự kiện nào đó hiện có như Pass/Fail, Win/Lose, Alive/Dead hoặc Healthy/Sick/Sick.

Nhưng, điều gì xảy ra khi các câu hỏi là có bao nhiêu người chi phí sẽ đến ngày hôm nay ?,, Có bao nhiêu người xếp hàng tại cửa hàng tạp hóa? Người mẫu.many…”, and one way to answer these questions is using the Poisson Regression Model.

Hồi quy Poisson được sử dụng để mô hình hóa dữ liệu. Đối với điều này, chúng tôi giả sử biến đáp ứng Y có phân phối Poisson và giả sử logarit của giá trị dự kiến ​​của nó có thể được mô hình hóa bằng một kết hợp tuyến tính của các tham số chưa biết.

2. Phân phối Poisson như một phần của gia đình theo cấp số nhân

Được rồi, điều đầu tiên trước tiên, chúng ta có thể thể hiện phân phối Poisson trên dạng gia đình theo cấp số nhân không? Chà, chúng ta có thể tìm thấy điều đó. Đầu tiên, nếu chúng ta có một biến ngẫu nhiên x sao cho
First, if we have a random variable X such that

Chúng tôi biết chúng tôi có thể thể hiện chức năng xác suất của nó như

Được rồi, bây giờ hãy để Lừa làm điều này, giả sử chúng ta có một biến ngẫu nhiên y được phân phối dưới dạng Poisson với một tham số λ

với chức năng xác suất của nó

Chúng ta biết rằng

và như vậy

Nhưng đợi một phút, phương trình (2) có dạng giống như phương trình (1)

và như vậy

Nhưng đợi một phút, phương trình (2) có dạng giống như phương trình (1)

Cuối cùng chúng ta có thể nói

3. Phương pháp log-khả năng đăng nhập tối đa

Được chứ! Bây giờ, giả sử chúng tôi có một biến ngẫu nhiên y, chẳng hạn như

và cho (3) bây giờ chúng ta có thể thể hiện chức năng xác suất của nó là

Hồi tưởng

và như vậy

Nhưng đợi một phút, phương trình (2) có dạng giống như phương trình (1)

Cuối cùng chúng ta có thể nói

3. Phương pháp log-khả năng đăng nhập tối đa

Được chứ! Bây giờ, giả sử chúng tôi có một biến ngẫu nhiên y, chẳng hạn như

và cho (3) bây giờ chúng ta có thể thể hiện chức năng xác suất của nó là

Hồi tưởng

Và chúng tôi biết cho GLM rằng

và như vậy

Nhưng đợi một phút, phương trình (2) có dạng giống như phương trình (1)

Cuối cùng chúng ta có thể nói

3. Phương pháp log-khả năng đăng nhập tối đa

Được chứ! Bây giờ, giả sử chúng tôi có một biến ngẫu nhiên y, chẳng hạn như

và cho (3) bây giờ chúng ta có thể thể hiện chức năng xác suất của nó là

và như vậy

Nhưng đợi một phút, phương trình (2) có dạng giống như phương trình (1)

Cuối cùng chúng ta có thể nói

3. Phương pháp log-khả năng đăng nhập tối đa

Được chứ! Bây giờ, giả sử chúng tôi có một biến ngẫu nhiên y, chẳng hạn như

và cho (3) bây giờ chúng ta có thể thể hiện chức năng xác suất của nó là

Hồi tưởng

Và chúng tôi biết cho GLM rằng

Được rồi, bây giờ nếu chúng ta có một bộ quan sát m

nơi chúng ta giả định cho mỗi y^(i) là i.i.d. Và chúng tôi đang tìm cách tối đa hóa chức năng xác suất sau

Bây giờ chúng tôi sử dụng bí mật của mình không phải là vũ khí bí mật, phương pháp khả năng tối đa

và đối với phương pháp log-khả năng đăng nhập tối đa

Vì log⁡ (1/y!) Không phụ thuộc vào W ∗ hoặc B ∗

def loss(x, y, w, b):
y_hat = np.exp(x @ w + b)
error = (y_hat - np.log(y_hat) * y).mean()
return error

và vì chúng tôi muốn giảm thiểu thay vì tối đa hóa

def grad(x, y, w, b):
M, n = x.shape
y_hat = np.exp(x @ w + b)
dw = (x.T @ (y_hat - y)) / M
db = (y_hat - y).mean()
return dw, db
def gradient_descent(x, y, w_0, b_0, alpha, num_iter):
w, b = w_0.copy(), b_0
hist = np.zeros(num_iter)
M, n = x.shape

for iter in range(num_iter):
dw, db = grad(x, y, w, b)
w -= alpha * dw
b -= alpha * db
hist[iter] = loss(x, y, w, b)

return w, b, hist

Nhưng chúng tôi biết

Và bởi vì chúng tôi muốn trung bình

Làm thế nào để bạn sử dụng mô hình Poisson trong Python?

Phân phối Poisson mô tả xác suất đạt được K thành công trong một khoảng thời gian nhất định. Nếu một biến ngẫu nhiên x tuân theo phân phối Poisson, thì xác suất có thể tìm thấy thành công x = k bằng công thức sau: p (x = k) = λk * e, / k!P(X=k) = λk * e λ / k!

Có phải hồi quy Poisson giống như hồi quy tuyến tính?

Các mô hình này có một số lợi thế so với mô hình hồi quy tuyến tính thông thường, bao gồm độ lệch, phân phối riêng biệt và hạn chế các giá trị dự đoán đối với các số không âm. Một mô hình Poisson tương tự như hồi quy tuyến tính thông thường, với hai ngoại lệ.A Poisson model is similar to an ordinary linear regression, with two exceptions.

Có phải hồi quy Poisson giống như hồi quy logistic?

Hồi quy Poisson được sử dụng phổ biến nhất để phân tích tỷ lệ, trong khi hồi quy logistic được sử dụng để phân tích tỷ lệ.Chương này xem xét các mô hình thống kê cho số lượng các sự kiện ngẫu nhiên xảy ra độc lập và được tính ở các cấp độ khác nhau của một hoặc nhiều kết quả phân loại.. The chapter considers statistical models for counts of independently occurring random events, and counts at different levels of one or more categorical outcomes.

Tôi có thể sử dụng hồi quy Poisson với kết quả nhị phân không?

Hồi quy Poisson không thể chỉ được sử dụng cho tỷ lệ tính mà còn cho các biến kết quả nhị phân.Hồi quy Poisson của dữ liệu kết quả nhị phân khác với hồi quy logistic, bởi vì nó sử dụng nhật ký thay vì logit (tỷ lệ cược log) biến đổi biến phụ thuộc.Nó có xu hướng cung cấp số liệu thống kê tốt hơn.. Poisson regression of binary outcome data is different from logistic regression, because it uses a log instead of logit (log odds) transformed dependent variable. It tends to provide better statistics.