Nhiều hồi quy phi tuyến tính Python
Trong thống kê, chúng tôi nói rằng hồi quy là tuyến tính khi nó tuyến tính trong các tham số. Khớp các mô hình tuyến tính là một nhiệm vụ dễ dàng, chúng ta có thể sử dụng phương pháp bình phương nhỏ nhất và lấy các tham số tối ưu cho mô hình của mình. Trong Python, bạn có thể đạt được điều này bằng cách sử dụng một loạt các thư viện như 0, 1, 2, 3, v.v. Tuy nhiên, không phải tất cả các vấn đề có thể được giải quyết với các mô hình tuyến tính thuần túy. Có rất nhiều mô hình phi tuyến hữu ích đảm bảo các tính chất toán học hữu ích và cũng rất dễ hiểu. Vì tôi có xu hướng thường xuyên điều chỉnh các mô hình này, nên bài viết t sẽ đóng vai trò là tài liệu tham khảo trong tương lai cho tôi bất cứ khi nào tôi cần sử dụng chúng trong tương lai, với mã dễ triển khai (bằng Python) Show
Bây giờ, trước khi chúng ta đi vào các mô hình, điều quan trọng cần lưu ý là bối cảnh về lý do và khi nào bạn sẽ sử dụng các loại mô hình này. Chúng không nhất thiết phải thay thế cho tổ hợp của bạn (XGBoost, LightGBM, Random Forest, Neural Network, v.v. ) mô hình học máy. Tốt nhất là nghĩ về các mô hình phi tuyến tính này trong bối cảnh khớp đường cong, tôi. e. bạn muốn mô hình hóa một hiện tượng bằng cách sử dụng một đường cong mà sau này bạn có thể giải thích. Vì vậy, đây là một số cân nhắc về lý do tại sao bạn sẽ sử dụng chúng
Tuyến tính x Phi tuyếnĐiều quan trọng là phải phân biệt rằng khi tôi nói phi tuyến tính, ý tôi là phi tuyến tính trong các tham số. Vì vậy, ví dụ, một phương trình bậc hai $y = ax^2 + bx + c$ là tuyến tính, bởi vì mô hình này là tuyến tính trong các tham số $a, b, c$. Mô hình có thể không tuyến tính trong $x$, nhưng nó vẫn có thể tuyến tính trong các tham số Để hiểu rõ hơn về các mô hình tuyến tính và phi tuyến tính, hãy xem xét các ví dụ sau $$ \begin{equation} y = \beta_0 + \beta_1 x \end{equation} $$ $$ \begin{equation} y = \beta_0 (1 + \beta_1)^x \end{equation} $$ $$ \begin{equation} y = \ \beta_0\cdot\sin\left(x^{\beta_1}\right)\ +\ \beta_2\cdot\cos\left(e^{x\beta_3}\right) Phương trình $(1)$ là một dòng đơn giản và các tham số $\beta_0, \beta_1$ là tuyến tính trên $y$, vì vậy đây là một ví dụ về mô hình tuyến tính. Phương trình $(2)$ là cái mà chúng tôi gọi là công thức Tăng trưởng theo cấp số nhân, trong đó $\beta_0$ thường biểu thị điểm bắt đầu, $x$ là thước đo thời gian và $\beta_1$ (thường được gọi là $r$) biểu thị tốc độ tăng trưởng. Trong trường hợp này, chúng tôi muốn có được điểm xuất phát và tốc độ tăng trưởng; $$ y = \beta_0 (1 + \beta_1)^x \\\ Và sau đó gọi $y'=log(y)$, $\beta_0’ = log(\beta_0)$, $\beta_1'=log(1 + \beta_1)$, bạn có thể viết lại Tăng trưởng theo cấp số nhân thành $$y’ = \beta_0’ + \beta_1’x$$ Và điều chỉnh OLS (Bình phương nhỏ nhất thông thường) bằng cách sử dụng công thức này, vì đây là mô hình tuyến tính (đây được gọi là mô hình log-tuyến tính). Cuối cùng, phương trình $(3)$ là một mô hình phi tuyến tính, vì hồi quy là phi tuyến tính trong các tham số $\beta_0, \beta_1, \beta_2, \beta_3, \beta_4$ (Tôi hy vọng vậy, khi tôi tạo nhanh phương trình này Trong bài viết này, trước tiên tôi sẽ trình bày các công cụ chính mà chúng ta sẽ sử dụng để điều chỉnh các mô hình, sau đó giải thích một loạt các mô hình phi tuyến hữu ích + mã + đồ thị của mô hình cho bất cứ khi nào bạn cần điều chỉnh các phương trình kỳ diệu như vậy. Tôi cũng sẽ không đi sâu hơn vào mục đích và cách sử dụng từng model vì nó không phải trọng tâm của bài viết. Lắp đường cong trong PythonMột phần lớn của bài viết này dựa trên một blogpost khác, nhằm vào người dùng R và sử dụng các thư viện R với các phương trình được tạo sẵn và các quy trình tích hợp sẵn để tạo điều kiện thuận lợi cho cuộc sống của nhà khoa học dữ liệu. Mặc dù đôi khi tôi sử dụng R, nhưng hầu hết thời gian tôi sử dụng Python, vì vậy thật tuyệt khi giữ cơ sở mã dự án của tôi với số lượng ngôn ngữ lập trình riêng biệt tối thiểu. Đáng buồn thay, không có thư viện dễ sử dụng/phổ biến nào trong Python tích hợp sẵn các mô hình này (nếu bạn biết bất kỳ thư viện nào, vui lòng cho tôi biết. ), nên chúng ta sẽ phải thực hiện các mô hình và sáng tạo trong quá trình điều chỉnh đường cong khi cần thiết, đặc biệt là khi chọn các tham số ban đầu. Bên cạnh bộ ba thần thánh (Pandas, Matplotlib và Numpy), đây là những thư viện chính mà chúng tôi sẽ sử dụng, cho các mục đích phù hợp
Chúng tôi chủ yếu sẽ sử dụng các quy trình tối ưu hóa từ 5 của Scipy. Các tham số chính chúng tôi sẽ sử dụng là
5 trả về các tham số từ quá trình tối ưu hóa, đây là thứ xác định mô hìnhCác mô hình này cũng yêu cầu kiến thức toán học khá tốt (phép tính và hàm cơ bản), để bạn biết mình đang làm gì. Cuối cùng, tôi cũng sẽ sử dụng rộng rãi công cụ tuyệt vời Desmos để vẽ các phương trình của chúng ta. Mã đầy đủ sẽ có sẵn trong repo Github được liên kết ở cuối bài viết Đoán ban đầu và JacobianĐối với các mô hình phi tuyến tính, đôi khi điều quan trọng là chúng tôi cung cấp cho trình tối ưu hóa dự đoán ban đầu tốt ( 07) cho các tham số. Hầu hết các bộ đồ tôi sẽ trình bày sẽ không hoạt động nếu không đoán được các thông số của chúng. Trong R, thư viện drc có các quy trình tích hợp giúp người dùng bằng cách chọn cấu hình tham số ban đầu tốt. Tuy nhiên, tôi không tìm thấy thứ gì đó tương tự trong Python, vì vậy chúng tôi sẽ phải dựa vào trực giác toán học và bằng cách xem xét tập dữ liệu của mình. Tuy nhiên, tôi nghĩ những quy trình này có thể dễ dàng thực hiện, bạn có thể viết một quy trình tìm kiếm dạng lưới để chọn một dự đoán tham số ban đầu và sau đó chuyển nó tới 5 thông qua đối số 07 (nhưng điều đó có gì thú vị?)Đây là một ví dụ về sự không phù hợp, khi bạn không chuyển tham số 07. Mô hình ở đây là Phân rã theo cấp số nhân, được trình bày trong phần tiếp theo và được trang bị trên dữ liệu phân hủy chất phản ứng hóa học. Dữ liệu được thể hiện bằng màu đỏ/hồng 5Trong đoạn mã bên dưới, tôi cũng sẽ cung cấp hàm Jacobian cho từng mô hình. Chúng không cần thiết cho sự phù hợp, vì 5 có thể ước tính độ dốc của hàm của bạn bằng số, nhưng tôi sẽ trình bày chúng ở đây để tham khảo (đôi khi bạn có thể cần xem xét đạo hàm riêng của mô hình của mình, bạn không bao giờ biết . Jacobian ở đây chỉ đơn giản là một vectơ cột với các đạo hàm riêng của hàm w của bạn. r. t. tất cả các thông số của nó. Tôi sẽ sử dụng 76 để tự động phân biệt các biểu thức, nhưng bạn có thể sử dụng Wolfram Alpha hoặc bút và giấy cũ tốtĐây là một ví dụ về cách tính đạo hàm riêng của một hàm bằng cách sử dụng 76
$(x^2, x, 1)$ Mô hình lồi/lõmQUAN TRỌNG. Không phải tất cả các mô hình này đều phi tuyến tính; Phân rã theo cấp số nhânCác mô hình phân rã hàm mũ có nhiều ứng dụng khác nhau cho hóa học (phân rã chất), sinh học, kinh tế lượng, v.v. Tham số hóa chung $$Y = a\cdot e^{k\cdot X}$$ giải thích thông số
Ở đây chúng tôi sử dụng dữ liệu về phản ứng hóa học phân hủy chất, tôi. e. khi thời gian trôi qua nồng độ của một số chất giảm khi nó xuống cấp. Chúng tôi muốn tìm tốc độ phân hủy chất theo thời gian. Như chúng ta đã thấy trước đó, nếu chúng ta chỉ chuyển hàm cho 5 thì kết quả sẽ không lý tưởng. Vì vậy, chúng tôi cần kiểm tra dữ liệu và mô hình của mình và đưa ra dự đoán ban đầu tốt cho mô hìnhĐây là lý do tại sao điều quan trọng là bạn phải biết chính xác những gì bạn đang cố gắng lập mô hình và những thông số đại diện cho điều gì. Phù hợp thì Dự đoán sẽ không hoạt động =) Từ việc xem xét dữ liệu và tham số hóa của chúng tôi, chúng tôi có thể đoán rằng
Hãy nghĩ về 21 với 22. Trong 23, giá trị 06 sẽ là 25, dẫn đến một giá trị rất nhỏ (trong khi thực tế, nó sẽ dẫn đến giá trị gần bằng 10). Vì vậy, 20 nên nhỏ hơn nhiều, ví dụ như 27Sau đó, hãy thử khớp với p0=[100, -1e-3] và xem điều gì sẽ xảy ra 0Tốt hơn nhiều Phân rã theo cấp số nhân với tiệm cận thấp hơnTham số hóa chung $$Y = b + (a - b)\cdot e^{k\cdot X}$$ giải thích thông số
7Mô hình tiệm cận (Số mũ âm)Về cơ bản ngược lại với mô hình phân rã theo cấp số nhân. Nó có thể được sử dụng để mô tả các hiện tượng trong đó $Y$ tăng trưởng có giới hạn khi $X$ tiến đến vô cùng
Tham số hóa chung $$Y = b - (b - a)\cdot e^{-k\cdot X}$$ giải thích thông số
2Mô hình tiệm cận (bị ràng buộc. bắt đầu từ 0)Đôi khi mô hình của bạn cần bắt đầu từ 0 (i. e. $a = 0$ từ phương trình trước). Điều này dẫn đến việc tham số hóa đơn giản hơn, mặc dù có cùng hành vi Tham số hóa chung $$Y = b\cdot (1 - e^{-k\cdot X})$$ giải thích thông số
3hồi quy sức mạnhTham số hóa chung $$Y = a\cdot X^{b}$$ giải thích thông số
Hồi quy lũy thừa tương đương với một đường cong hàm mũ nhưng với logarit của $X$ $$aX^b = a\cdot e^{log(X^b)} = a\cdot e^{b\cdot log(X)}$$ 4Ở đây, tôi đang điều chỉnh mô hình Sức mạnh cho bộ dữ liệu có số lượng loài thực vật theo khu vực lấy mẫu của một số thí nghiệm
Một thuộc tính hữu ích của tham số Power là bạn có thể ràng buộc nó sao cho phù hợp tùy thuộc vào hành vi tăng trưởng mà bạn đang cố gắng mô hình hóa
Dưới đây là một số ví dụ Đường cong sigmoidalĐây là hai đường cong chính để kiểm tra khi bạn cần lập mô hình các sự kiện có hình dạng sigmoidal đường cong hậu cầnĐường cong logistic phải quen thuộc với bất kỳ nhà khoa học dữ liệu nào. Nó bắt nguồn từ hàm phân phối logistic tích lũy và đối xứng quanh một điểm uốn Tham số hóa chung $$Y = a + \frac{c - a}{1 + e^{b(X - d)}}$$ giải thích thông số
Tham số hóa ở trên là chung, nhưng tùy thuộc vào những gì bạn đang cố gắng điều chỉnh, nó có thể được giảm bớt. Ví dụ: nếu chúng ta thấy $a = 0$, chúng ta có một phương trình đơn giản hơn. Chúng ta cũng có thể buộc $c = 1$ hơn nữa, làm cho phương trình trở nên đơn giản hơn. Tất cả phụ thuộc vào những ràng buộc của vấn đề của bạn 5Trong ví dụ này, chúng tôi điều chỉnh Đường cong Logistic để lập mô hình Tăng trưởng Thực vật, trong trường hợp này là Củ cải đường. Các biến là
Bộ dữ liệu đã được xuất bản trong bài báo này. Scott, R. K. , Wilcockson, S. J. , & Moisey, F. r. (1979). Ảnh hưởng của thời gian trừ cỏ đến sinh trưởng và năng suất củ cải đường Chức năng GompertzHay cụ thể hơn, Đường cong Gompertz. Không phải lúc nào vấn đề chúng tôi đang lập mô hình cũng đối xứng và hàm Gompertz có thể mô hình hóa các “tốc độ tăng trưởng” khác nhau xung quanh điểm uốn. Tôi khuyên bạn nên xem trang Wikipedia cho chức năng này, đây là một số ví dụ về nơi nó có thể được sử dụng
Tham số hóa chung $$Y = a + (c - a)\cdot e^{-e^{b(X - d)}}$$ Các tham số có cách hiểu tương tự như trong Đường cong Logistic giải thích thông số
6Đường cong Gompertz có một tham số hóa thay thế đảo ngược mô hình tăng trưởng so với mô hình chung $$Y = a + (c - a)\cdot \left[1 - e^{-e^{-b(X - d)}}\right]$$ Tôi sẽ không phù hợp với bất cứ thứ gì vì nó khá giống với cái trước Dưới đây là một ví dụ để hình dung rõ hơn về sự khác biệt giữa các đường cong sygmoidal. Các thông số ở đây là. 28 8Kết luận + MãTôi hy vọng những đoạn mã và ví dụ mã này sẽ hữu ích cho bạn (và cho chính tôi trong tương lai). Có rất nhiều mô hình phi tuyến tính khác mà tôi không đưa vào, một số trong số đó là
Như đã đề cập trước đó, bài viết này dựa trên cơ sở đó bao gồm nhiều chi tiết hơn về các phương trình trên, mặc dù tất cả mã phù hợp đều nằm trong R. Một số bộ dữ liệu tôi đã sử dụng cũng được lấy từ gói 29 trong R
Hồi quy bội phi tuyến tính là gì?Tập dữ liệu để chạy hồi quy bội phi tuyến
. Mục đích của chúng tôi là nghiên cứu ảnh hưởng của nồng độ hai thành phần C1 và C2 đến độ nhớt của sữa chua
Hồi quy bội là tuyến tính hay phi tuyến tính?Trong trường hợp này, nhà phân tích sử dụng hồi quy bội, cố gắng giải thích một biến phụ thuộc bằng cách sử dụng nhiều biến độc lập. Nhiều hồi quy có thể là tuyến tính và phi tuyến tính .
Tôi có thể sử dụng r2 cho hồi quy phi tuyến tính không?Hồi quy phi tuyến tính là một phân tích cực kỳ linh hoạt có thể phù hợp với hầu hết mọi đường cong có trong dữ liệu của bạn. R-squared có vẻ như là một cách rất trực quan để đánh giá mức độ phù hợp của mô hình hồi quy. Đáng tiếc, cả hai không đi cùng nhau
GLM có phải là hồi quy tuyến tính bội không?Thuật ngữ mô hình tuyến tính "chung" (GLM) thường đề cập đến các mô hình hồi quy tuyến tính thông thường cho một biến phản ứng liên tục được cung cấp các yếu tố dự đoán liên tục và/hoặc phân loại. Nó bao gồm hồi quy tuyến tính bội , cũng như ANOVA và ANCOVA (chỉ với hiệu ứng cố định). |