Hướng dẫn can we plot multiple linear regression in python? - chúng ta có thể vẽ nhiều hồi quy tuyến tính trong python không?
Ngày 18 tháng 11 năm 2019 Có nhiều phương pháp học máy nâng cao với độ chính xác dự đoán mạnh mẽ. Mặc dù các mô hình phức tạp có thể vượt trội so với các mô hình đơn giản trong việc dự đoán biến phản hồi, các mô hình đơn giản tốt hơn để hiểu được tác động và tầm quan trọng của từng tính năng trên một biến phản hồi. Khi nhiệm vụ trong tay có thể được mô tả bằng mô hình tuyến tính, hồi quy tuyến tính chiến thắng trên tất cả các phương pháp học máy khác trong giải thích tính năng do tính đơn giản của nó. Bài đăng này cố gắng giúp bạn hiểu về hồi quy tuyến tính trong không gian tính năng đa chiều, đánh giá độ chính xác của mô hình và cung cấp đoạn mã cho hồi quy tuyến tính nhiều trong Python. Chúng tôi sẽ sử dụng một dữ liệu mẫu trong suốt bài đăng này. Dữ liệu mẫu có liên quan đến ngành công nghiệp dầu khí. Nó có nguồn gốc từ Tiến sĩ Michael Pyrcz, Giáo sư Kỹ thuật Dầu khí tại Đại học Texas ở Austin. Dữ liệu gốc có thể được tìm thấy từ repo GitHub của anh ấy. Bạn cũng có thể sử dụng tải xuống trực tiếp hoặc truy cập trực tiếp bằng URL Pandas như bên dưới: In [1]: Out[2]:
Mô tả các tiêu đề
Chúng tôi có sáu tính năng (POR, PERM, AI, giòn, TOC, VR) để dự đoán biến phản hồi (prod). Dựa trên mức độ quan trọng của tính năng hoán vị được hiển thị trong Hình (1), POR là tính năng quan trọng nhất và giòn là tính năng quan trọng thứ hai. Xếp hạng tính năng hoán vị nằm ngoài phạm vi của bài đăng này và sẽ không được thảo luận chi tiết. Tính năng đạt được đạt được với thư viện RFPIMP Python. Để biết thêm thông tin về Xếp hạng tính năng hoán vị, hãy tham khảo bài viết này: Hãy coi chừng Hiệu quả rừng ngẫu nhiên mặc định Hình 1: Xếp hạng tính năng hoán vị Mã nguồn cho Hình (1) 1. Hồi quy tuyến tính đaMô hình hồi quy tuyến tính có cấu trúc sau: $$ y = \ beta_1 x_1 + \ beta_2 x_2 + \ cdots + \ beta_n x_n + \ beta_0 \ tag {1} $$ ở đâu $ \ beta_n $ : hệ số hồi quy (trọng lượng) của tính năng $ n $ -th$n$-th feature Mô hình hồi quy tuyến tính bivarate (có thể được hiển thị trong không gian 2D) là sự đơn giản hóa EQ (1). Mô hình bivariate có cấu trúc sau: $$ y = \ beta_1 x_1 + \ beta_0 \ tag {2} $$ Một bưc tranh đang gia ngan lơi noi. Chúng ta hãy cố gắng hiểu các thuộc tính của nhiều mô hình hồi quy tuyến tính với trực quan hóa. Đầu tiên, mô hình hồi quy tuyến tính 2D bivariate được hiển thị trong Hình (2), sử dụng POR làm một tính năng duy nhất. Mặc dù độ xốp là tính năng quan trọng nhất liên quan đến sản xuất khí, nhưng chỉ có độ xốp chỉ chiếm 74% phương sai của dữ liệu. Hình 2: Mô hình hồi quy tuyến tính 2D Mã nguồn cho Hình (2) Làm thế nào mô hình sẽ trông như thế nào trong không gian 3D? Chúng ta hãy xem hình (3). Do tính chất 3D của cốt truyện, nhiều lô được tạo ra từ các góc độ khác nhau. Hai tính năng (por và giòn) đã được sử dụng để dự đoán biến phản ứng prod. Với sự trợ giúp của tính năng bổ sung giòn, mô hình tuyến tính trải nghiệm độ chính xác đáng kể, hiện nắm bắt độ biến thiên của dữ liệu 93%. Hình 3: Mô hình hồi quy tuyến tính 3D với các tính năng mạnh mẽ Mã nguồn cho Hình (3) Mô hình tuyến tính 3D sẽ trông như thế nào nếu các tính năng ít mạnh hơn được chọn? Hãy chọn POR và VR làm tính năng mới của chúng tôi và phù hợp với mô hình tuyến tính. Trong hình (4) bên dưới, chúng ta thấy rằng R bình phương giảm so với hình (3) ở trên. Ảnh hưởng của hiệu suất mô hình giảm có thể được quan sát trực quan bằng cách so sánh các lô giữa của chúng; Các sơ đồ phân tán trong hình (3) có dày đặc hơn xung quanh mặt phẳng mô hình 2D so với các ô phân tán trong hình (4). Hình 4: Mô hình hồi quy tuyến tính 3D với các tính năng yếu Mã nguồn cho Hình (4) Chế độ xem đầy đủ của các mô hình tuyến tính được xây dựng dưới đây dưới dạng GIF. Lưu ý rằng mặt phẳng màu xanh luôn được chiếu tuyến tính, bất kể góc độ. Đây là lý do mà chúng tôi gọi đây là mô hình hồi quy "tuyến tính" nhiều. Mô hình sẽ luôn luôn là tuyến tính, bất kể tính chiều của các tính năng của bạn. Khi bạn có nhiều hơn 3 tính năng, mô hình sẽ rất khó được hiển thị, nhưng bạn có thể mong đợi rằng các mô hình tuyến tính có chiều cao cũng sẽ thể hiện xu hướng tuyến tính trong không gian tính năng của chúng. Hình 5: Độ xốp và độ giòn mô hình tuyến tính GIF Hình 6: Độ xốp và mô hình tuyến tính VR GIF GIF được tạo bằng cách tạo 360 lô khác nhau được xem từ các góc khác nhau với đoạn mã sau và kết hợp thành một GIF từ IMGFLIP. In [ ]: for ii in np.arange(0, 360, 1): ax.view_init(elev=32, azim=ii) fig.savefig('gif_image%d.png' % ii) Ghi chú: Mã hóa dữ liệu - hồi quy với các biến phân loạiHồi quy đòi hỏi các tính năng phải liên tục. Điều gì xảy ra nếu bạn có các tính năng phân loại quan trọng? Bạn có phải bỏ qua các biến phân loại và chỉ chạy hồi quy với các biến liên tục? Chúng ta có thể mã hóa các biến phân loại thành các biến số để tránh vấn đề này. Hãy xem hình dưới đây. Cấp độ tính năng ban đầu là một biến thể loại với ba loại thời gian. Điều này có nghĩa là có hệ thống phân cấp giữa các loại (ví dụ: thấp Điều gì sẽ xảy ra nếu không có tọa độ giữa các loại tính năng? Sau đó, chúng tôi sử dụng một kỹ thuật gọi là mã hóa một lần để ngăn chặn một mô hình giả định đặt hàng tự nhiên giữa các loại có thể bị sai lệch mô hình. Thay vì sử dụng các biến số nguyên, chúng tôi sử dụng các biến nhị phân. 1 chỉ ra rằng dữ liệu mẫu rơi vào danh mục được chỉ định, trong khi 0 chỉ ra cách khác. Mã hóa một lần được sử dụng trong hầu hết các vấn đề ngôn ngữ tự nhiên, bởi vì các từ vựng không có mối quan hệ thứ tự giữa chính chúng.one-hot encoding to prevent a model from assuming natural ordering among categories that may suffer from model bias. Instead of using integer variables, we use binary variables. 1 indicates that the sample data falls into the specified category, while 0 indicates the otherwise. One-hot encoding is used in almost all natural languages problems, because vocabularies do not have ordinal relationships among themselves. Mẹo Pythonic: Hồi quy tuyến tính 2D với Scikit-learn 2D linear regression with scikit-learn Hồi quy tuyến tính được thực hiện trong scikit-learn với 4 (kiểm tra tài liệu). Để trình diễn mã, chúng tôi sẽ sử dụng cùng một bộ dữ liệu dầu khí được mô tả trong Phần 0: Mô tả dữ liệu mẫu ở trên.Chuẩn bị dữ liệu Đầu tiên, nhập các mô -đun và dữ liệu. Chúng tôi sẽ sử dụng một tính năng duy nhất: por. Biến phản ứng là prod. In [8]: import pandas as pd from sklearn import linear_model import numpy as np file = 'https://aegis4048.github.io/downloads/notebooks/sample_data/unconv_MV_v5.csv' df = pd.read_csv(file) Tiền xử lý Nếu bạn nhận được thông báo lỗi như 5, đó là vấn đề tiền xử lý. Hầu hết các chức năng đào tạo học tập Scikit đều yêu cầu định hình lại các tính năng, chẳng hạn như 6. Trong trường hợp bạn nhập dữ liệu từ Pandas DataFrame, đối số đầu tiên luôn là 7 và đối số thứ hai là số lượng các tính năng, dưới dạng số nguyên. Tiền xử lý này cũng sẽ được yêu cầu khi bạn đưa ra dự đoán dựa trên mô hình được trang bị sau này.Kiểm tra hình dạng của các tính năng và biến phản hồi của bạn nếu bạn đang gặp lỗi. In [9]: import numpy as np features = ['Por'] target = 'Prod' X = df[features].values.reshape(-1, len(features)) y = df[target].values In [12]: print(X.shape) print(y.shape) Phù hợp với mô hình tuyến tính Vì chúng tôi chỉ có một tính năng, mô hình tuyến tính mà chúng tôi muốn phù hợp có cấu trúc sau: $$ \ text {gas prod.} = \ beta_1 \ cdot \ text {por} + \ beta_0 \ tag {3} $$ Chúng ta hãy tìm ra các giá trị của $ \ beta_1 $ (hệ số hồi quy) và $ \ beta_2 $ (y-intercept). Cũng giống như nhiều thư viện Scikit-Learn khác, bạn khởi tạo đối tượng mô hình đào tạo với 8 và hơn là phù hợp với mô hình với tính năng 9 và biến phản hồi 0.Lưu ý rằng 1 là viết tắt của bình phương tối thiểu thông thường.In [42]: from sklearn import linear_model ols = linear_model.LinearRegression() model = ols.fit(X, y) Hệ số hồi quy tuyến tính có thể được truy cập trong một dạng thuộc tính lớp với 2Có thể truy cập bộ chặn y trong một dạng thuộc tính lớp với 3Dựa trên kết quả của sự phù hợp, chúng tôi kết luận rằng việc sản xuất khí có thể được dự đoán từ độ xốp, với mô hình tuyến tính sau: $$ \ text {gas prod.} = 287,78 \ cdot \ text {por} - 2.94 \ tag {4} $$ Đánh giá độ chính xác: $ r^2 $ Mô hình của bạn tốt như thế nào? Bạn có thể đánh giá hiệu suất mô hình của mình dưới dạng R-bình phương, với 4. 9 là các tính năng và 0 là biến phản hồi được sử dụng để phù hợp với mô hình.Đưa ra dự đoán trong tương lai Scikit-learn hỗ trợ đưa ra dự đoán dựa trên mô hình được trang bị bằng phương pháp 7. 9 là một tính năng yêu cầu tiền xử lý được giải thích ở trên. Hãy nhớ lại rằng chúng tôi chỉ sử dụng một tính năng và 9.Hãy nói rằng bạn muốn dự đoán sản xuất khí khi độ xốp là 15%. Sau đó: In [46]: 0Theo mô hình, sản xuất khí = 4313 MCF/ngày khi độ xốp = 15%. Điều gì sẽ xảy ra nếu chúng ta muốn dự đoán biến phản hồi từ nhiều trường hợp của một tính năng? Hãy thử độ xốp 14% và 18%. Sau đó: In [48]: 1Out[49]: 2Chúng ta có thể mở rộng về điều này và vẽ một dòng dự đoán cho tất cả các giá trị có thể của tính năng. Giá trị thực tế hợp lý của độ xốp của đá nằm trong khoảng từ $ [0, 40] $.$[0, 40]$. In [50]: 3In [52]: 4WARNING! Hãy cẩn thận khi dự đoán một điểm bên ngoài phạm vi quan sát của các fautures. Mối quan hệ giữa các biến có thể thay đổi khi bạn di chuyển ra ngoài phạm vi quan sát được, nhưng bạn không bao giờ biết vì bạn không có dữ liệu. Mối quan hệ được quan sát có thể là tuyến tính cục bộ, nhưng có thể có những đường cong không quan sát được trên phạm vi bên ngoài của dữ liệu của bạn. Mẹo Pythonic: Buộc không thể chặn Y Forcing zero y-intercept Đôi khi bạn muốn buộc Y-Intercept = 0. Điều này có thể được thực hiện bằng cách đặt 0 khi khởi tạo lớp mô hình hồi quy tuyến tính. In mô hình Y-chặn sẽ xuất ra 1. Nhưng hãy lưu ý, "nói chung, điều cần thiết là đưa hằng số vào mô hình hồi quy", bởi vì "hằng số (y-intercept) hấp thụ sự thiên vị cho mô hình hồi quy", như Jim Frost nói trong bài viết của mình.In [53]: 5Trong Hình (7), tôi đã tạo ra một số dữ liệu tổng hợp dưới đây để minh họa hiệu quả của việc buộc không có hệ thống y. Buộc một chặn Y không có thể là cả mong muốn hoặc không mong muốn. Nếu bạn có lý do để tin rằng Y-Intercept phải bằng không, hãy đặt 0.Hình 7: Ảnh hưởng của việc buộc Zero Y-Intercept Mã nguồn cho Hình (7) 6Mẹo pythonic: hồi quy tuyến tính 3D+ với scikit-learn 3D+ linear regression with scikit-learn Phù hợp với mô hình đa tuyến tính Hãy phù hợp với mô hình với bốn tính năng: por, giòn, perm và toc. Sau đó, mô hình quan tâm của chúng tôi có cấu trúc sau: $$ \ text {gas prod.} = \ beta_1 \ cdot \ text {por} + \ beta_2 \ cdot \ text {giòn} + \ beta_3 \ cdot \ text {perm} + \ beta_4 \ cdot \ beta_0 \ tag {5} $$ Với scikit-learn, hồi quy tuyến tính 3D+ phù hợp không khác với hồi quy tuyến tính 2D, ngoài việc khai báo nhiều tính năng ngay từ đầu. Phần còn lại giống hệt nhau. Chúng tôi sẽ khai báo bốn tính năng: 3In [16]: 7Out[17]: 8Dựa trên kết quả của sự phù hợp, chúng tôi có được mô hình hồi quy tuyến tính sau: $$ \ text {gas prod. 6} $$ Đánh giá độ chính xác: $ r^2 $ Trong cùng một chúng tôi đã đánh giá hiệu suất mô hình với mô hình tuyến tính 2D ở trên, chúng tôi có thể đánh giá hiệu suất mô hình 3D+ với bình phương R với 4. 9 là các tính năng và 0 là biến phản hồi được sử dụng để phù hợp với mô hình.Đưa ra dự đoán trong tương lai Hãy đưa ra một dự đoán về tốc độ sản xuất khí khi:
In [107]: 9Lần này, hãy đưa ra hai dự đoán về tốc độ sản xuất khí khi:
In [109]: 0Out[100]: 1AI = 1 (kg/m2s*10^6)2. Giới thiệu về đa cộng đồng Mặc dù độ chính xác của mô hình đa tuyến tính trong việc dự đoán biến phản hồi có thể đáng tin cậy, giá trị của hệ số hồi quy cá nhân có thể không đáng tin cậy dưới tính đa hình. Lưu ý rằng giá trị của hệ số hồi quy cho độ xốp trong eq (4) là 287,7, trong khi đó là 244,6 trong biểu thức (6). Trong Hình (8), tôi đã mô phỏng nhiều mô hình phù hợp với các kết hợp các tính năng khác nhau để hiển thị các giá trị hệ số hồi quy dao động, ngay cả khi giá trị bình phương R cao. Hình 8: Các hệ số hồi quy không ổn định do tính đa hình 2Mã nguồn cho Hình (8) Kết quả mô phỏng cho chúng ta biết rằng ngay cả khi mô hình tốt trong việc dự đoán biến phản hồi đã cho các tính năng (bình phương R cao), mô hình tuyến tính không đủ mạnh để hiểu đầy đủ ảnh hưởng của các tính năng riêng lẻ đối với biến phản hồi. Trong hoàn cảnh như vậy, chúng ta không thể tin tưởng các giá trị của các hệ số hồi quy. Sự bất ổn này đến từ đâu? Điều này là do POR, TOC và PERM cho thấy mối tương quan tuyến tính mạnh mẽ với nhau, như thể hiện trong ma trận tương quan của Spearnman trong Hình (9). Hình 9: Ma trận tương quan các tính năng 3Mã nguồn cho Hình (9)
Khi sử dụng các hệ số hồi quy tuyến tính để đưa ra quyết định kinh doanh, bạn phải loại bỏ ảnh hưởng của tính đa hình để có được các hệ số hồi quy đáng tin cậy. Giả sử rằng bạn đang thực hiện một nghiên cứu y học về ung thư cổ tử cung. Bạn đã đào tạo một mô hình hồi quy tuyến tính với tỷ lệ sống sót của bệnh nhân đối với nhiều tính năng, trong đó tiêu thụ nước là một trong số đó. Hệ số hồi quy tuyến tính của bạn cho tiêu thụ nước báo cáo rằng nếu bệnh nhân tăng mức tiêu thụ nước thêm 1,5 L mỗi ngày, tỷ lệ sống sót của anh ta sẽ tăng 2%. Bạn có thể tin tưởng phân tích này? Câu trả lời là có, nếu không có dấu hiệu của đa hình. Bạn thực sự có thể nói với bệnh nhân, với sự tự tin, rằng anh ta phải uống nhiều nước hơn để tăng cơ hội sống sót. Tuy nhiên, nếu có một dấu hiệu của tính đa hình, phân tích này không hợp lệ. Lưu ý rằng tính đa hình không bị hạn chế trên mối quan hệ 1 so với 1. Ngay cả khi có mối tương quan tối thiểu 1 so với 1 giữa các tính năng, ba hoặc nhiều tính năng cùng nhau có thể hiển thị đa hình. Cũng lưu ý rằng tính đa hình không ảnh hưởng đến độ chính xác dự đoán. Mặc dù các giá trị của các hệ số riêng lẻ có thể không đáng tin cậy, nhưng nó không làm suy yếu sức mạnh dự đoán của mô hình. Đa hình học chỉ là một vấn đề khi bạn muốn nghiên cứu tác động của các tính năng riêng lẻ đối với một biến phản hồi.multicollinearity does not affect prediction accuracy. While the values of individual coefficients may be unreliable, it does not undermine the prediction power of the model. Multicollinearity is an issue only when you want to study the impact of individual features on a response variable. Các chi tiết về phát hiện và các biện pháp khắc phục của mutlicolinearity không được thảo luận ở đây (mặc dù tôi dự định viết về nó rất sớm). Mặc dù trọng tâm của bài đăng này chỉ dựa trên nhiều hồi quy tuyến tính, tôi vẫn muốn thu hút sự chú ý của bạn về lý do tại sao bạn không nên luôn tin tưởng các hệ số hồi quy của mình. Bài viết liên quanChúng ta có thể vẽ nhiều hồi quy tuyến tính không?Ở trung tâm của phân tích hồi quy tuyến tính nhiều là nhiệm vụ lắp một dòng đơn lẻ thông qua một biểu đồ phân tán.Cụ thể hơn, hồi quy nhiều tuyến tính phù hợp với một dòng thông qua một đám mây dữ liệu đa chiều.Hình thức đơn giản nhất có một biến phụ thuộc và hai biến độc lập.the multiple linear regression fits a line through a multi-dimensional cloud of data points. The simplest form has one dependent and two independent variables.
Thư viện Python nào được sử dụng cho nhiều hồi quy tuyến tính?Nếu chúng ta có một tính năng phụ thuộc và nhiều tính năng độc lập thì về cơ bản gọi nó là hồi quy tuyến tính nhiều.Vì vậy, đây là một mô tả lý thuyết nhỏ về hồi quy tuyến tính nhiều bây giờ chúng ta sẽ sử dụng thư viện hồi quy tuyến tính học Scikit để giải quyết vấn đề hồi quy tuyến tính nhiều.scikit learn linear regression library to solve the multiple linear regression problem. |