Giải phương trình tuyến tính bằng Python

Mục lục bài viết:

  • Hồi quy
    • Hồi quy là gì?
    • Khi nào bạn cần hồi quy?
  • Hồi quy tuyến tính
    • Công thức
    • Hiệu suất hồi quy
    • Đơn hồi quy tuyến tính
    • Đa hồi quy tuyến tính
    • Hồi quy đa thức
    • Underfitting và Overfitting
  • Triển khai hồi quy tuyến tính bằngPython
    • Các gói Python cho hồi quy tuyến tính
    • Đơn hồi quy tuyến tính với scikit-learning
    • Đa hồi quytuyến tính với scikit-learning
    • Hồi quy đa thức với scikit-learning
    • Hồi quy tuyến tính nâng cao với statsmodels
  • Vượt ra ngoài hồi quy tuyến tính
  • Phần kết luận


Chúng ta đang sống trong thời đại của một lượng lớndữ liệu, máy tính mạnh mẽ vàtrí tuệ nhân tạo.Điều này chỉ là khởi đầu.Khoa học dữ liệuvà máy học đang thúc đẩy nhận dạng hình ảnh, phát triển phương tiện tự hành, các quyết định trong lĩnh vực tài chính và năng lượng, tiến bộ trong y học, sự nổi lên của mạng xã hội, v.v.Hồi quy tuyến tính là một phần quan trọng của điều này.

Hồi quy tuyến tính là một trong những kỹ thuật thống kê và học máy cơ bản.Cho dù bạn muốnthống kê,học máyhay khoa họcmáy tính, thì rất có thể bạn sẽ cần nó.Bạn nên tìm hiểu nó trước và sau đó tiến hành các phương pháp phức tạp hơn.

Đến cuối bài viết này, bạn sẽ học được:

  • Hồi quy tuyến tính là gì
  • Hồi quy tuyến tính được sử dụng để làm gì
  • Cách hoạt động của hồi quy tuyến tính
  • Cách triển khai hồi quy tuyến tính trong Python, từng bước

Hồi quy

Phân tích hồi quy là một trong những lĩnh vực quan trọng nhất trong thống kê và học máy.Có rất nhiều phương pháp hồi quy có sẵn.Hồi quy tuyến tính là một trong số đó.

Hồi quy là gì?

Hồi quy tìm kiếm mối quan hệ giữacác biến.

Ví dụ: bạn có thể quan sát một số nhân viên của một số công ty và cố gắng hiểu mức lương của họ phụ thuộc vào cácđặc điểmnhư thế nào, chẳng hạn như kinh nghiệm, trình độ học vấn, vai trò, thành phố họ làm việc, v.v.

Đây là một bài toán hồi quy trong đó dữ liệu liên quan đến mỗi nhân viên đại diện cho mộtquan sát.Giả định cho rằng kinh nghiệm, học vấn, vai trò và thành phố là những đặc điểm độc lập, trong khi mức lương phụ thuộc vào chúng.

Tương tự, bạn có thể cố gắng thiết lập một sự phụ thuộc toán học của giá nhà vào diện tích, số phòng ngủ, khoảng cách đến trung tâm thành phố, v.v.

Nói chung, trong phân tích hồi quy, bạn thường xem xét một số hiện tượng quan tâm và có một số quan sát.Mỗi quan sát có hai hoặc nhiều đặc điểm.Sau giả định rằng (ít nhất) một trong các tính năng phụ thuộc vào các tính năng khác, bạn cố gắng thiết lập mối quan hệ giữa chúng.

Nói cách khác,bạn cần phải tìm một hàm ánh xạ một số tính năng hoặc biến số với các đối tượng khác một cách đủ tốt.

Các tính năng phụ thuộc được gọi làbiến phụ thuộc,kết quả đầu rahoặcphản hồi.

Các đặc trưng độc lập được gọi là cácbiến,đầu vàohoặcyếu tố dự đoánđộc lập.

Các bài toán hồi quy thường có một biến phụ thuộc liên tục và không bị ràng buộc.Tuy nhiên, các đầu vào có thể là dữ liệu liên tục, rời rạc hoặc thậm chí là dữ liệu phân loại như giới tính, quốc tịch, thương hiệu, v.v.

Một thực tế phổ biến là biểu thị đầu ra bằng 𝑦 và đầu vào bằng 𝑥.Nếu có hai hoặc nhiều biến độc lập, chúng có thể được biểu diễn dưới dạng vectơ 𝐱 = (𝑥₁,…, 𝑥ᵣ), trong đó 𝑟 là số lượng đầu vào.

Khi nào bạn cần hồi quy?

Thông thường, bạn cần hồi quy để trả lời liệu một số hiện tượng có ảnh hưởng như thế nào đến hiện tượng kia hoặcmột số biến có liên quanvới nhaunhư thế nào.Ví dụ, bạn có thể sử dụng nó để xác địnhnếuvàđến mức độ nàonhững kinh nghiệm hay giới tính ảnh hưởng đếnlương.

Hồi quy cũng hữu ích khi bạn muốndự báo phản hồibằng cách sử dụng một tập hợp các yếu tố dự đoán mới.Ví dụ: bạn có thể cố gắng dự đoán mức tiêu thụ điện của một hộ gia đình trong giờ tiếp theo dựa trên nhiệt độ ngoài trời, thời gian trong ngày và số lượng cư dân trong hộ gia đình đó.

Hồi quy được sử dụng trong nhiều lĩnh vực khác nhau: kinh tế, khoa học máy tính, khoa học xã hội, v.v.Tầm quan trọng của nó tăng lên mỗi ngày với sự sẵn có của một lượng lớn dữ liệu và nâng cao nhận thức về giá trị thực tế của dữ liệu.

Hồi quy tuyến tính

Hồi quy tuyến tính có lẽ là một trong những kỹ thuật hồi quy quan trọng nhất và được sử dụng rộng rãi.Đây là một trong những phương pháp hồi quy đơn giản nhất.Một trong những ưu điểm chính của nó là dễ dàng giải thích kết quả.

Công thức

Khi thực hiện hồi quy tuyến tính của một số biến phụ thuộc 𝑦 trên tập các biến độc lập 𝐱 = (𝑥₁,…, 𝑥ᵣ), trong đó 𝑟 là số yếu tố dự đoán, bạn giả sử có mối quan hệ tuyến tính giữa 𝑦 và 𝐱: 𝑦 = 𝛽₀ + 𝛽₁𝑥₁ + ⋯ + 𝛽ᵣ𝑥ᵣ + 𝜀.Phương trình này làphương trình hồi quy.𝛽₀, 𝛽₁,…, 𝛽ᵣ là cáchệ số hồi quyvà 𝜀 làlỗi ngẫu nhiên.

Hồi quy tuyến tính tính toán cácước (estimator)của các hệ số hồi quy hoặc đơn giản làtrọng số dự đoán, được ký hiệu bằng 𝑏₀, 𝑏₁,…, 𝑏ᵣ.Chúng định nghĩahàm hồi quy ước lượng𝑓(𝐱) = 𝑏₀ + 𝑏₁𝑥₁ + ⋯ + 𝑏ᵣ𝑥ᵣ.Hàm này phải nắm bắt đầy đủ các mối quan hệ phụ thuộc giữa các đầu vào và đầu ra.

Ướchoặcphản hồi đượcdự đoán, 𝑓(𝐱ᵢ),với𝑖 = 1, ..., 𝑛, cần phải càng gần càng tốt để tương ứng vớicâu trả lời thực tế𝑦ᵢ.Hiệu𝑦ᵢ - 𝑓 (𝐱ᵢ) với𝑖 = 1,…, 𝑛, được gọi là phầndư.Hồi quy là xác định cáctrọng số được dự đoán tốt nhất, đó là các trọng số tương ứng với các phần dư nhỏ nhất.

Để có được trọng số tốt nhất, bạn thườngtối thiểu hóa tổng các phần dư bình phương(SSR) với𝑖 = 1,…, 𝑛: SSR = Σᵢ (𝑦ᵢ - 𝑓 (𝐱ᵢ)) ².Cách tiếp cận này được gọi làphương pháp bình phương nhỏ nhất thông thường.

Hiệu suất hồi quy

Sự thay đổi của các phản hồi thực tế 𝑦ᵢ, 𝑖 = 1,…, 𝑛, xảy ra một phần do sự phụ thuộc vào các yếu tố dự đoán 𝐱ᵢ.Tuy nhiên, cũng có một phương sai cố hữu bổ sung của đầu ra.

Cáchệ số xác định, ký hiệu là 𝑅², cho bạn biết số lượng biến thể trong 𝑦 có thể được giải thích bởi sự phụ thuộc vào 𝐱 sử dụng mô hình hồi quy cụ thể.𝑅² lớn hơn cho thấy sự phù hợp hơn và có nghĩa là mô hình có thể giải thích tốt hơn sự biến đổi của đầu ra với các đầu vào khác nhau.

Giá trị 𝑅² = 1 tương ứng với SSR = 0, nghĩa làhoàn toàn phù hợpvì giá trị của câu trả lời được dự đoán và thực tế hoàn toàn khớp với nhau.

Đơn hồi quy tuyến tính

Đơn hồi quy tuyến tính hoặc đơn biến thiên là trường hợp đơn giản nhất của hồi quy tuyến tính với một biến độc lập duy nhất, 𝐱 = 𝑥.

Hình sau minh họa đơnhồi quy tuyến tính:

Giải phương trình tuyến tính bằng Python

Ví dụ về hồi quy tuyến tính đơn giản

Khi thực hiện hồi quy tuyến tính đơn giản, bạn thường bắt đầu với một tập hợp các cặp đầu vào-đầu ra (𝑥-𝑦) nhất định (vòng tròn màu xanh lá cây).Những cặp này là quan sát của bạn.Ví dụ, quan sát ngoài cùng bên trái (vòng tròn màu xanh lá cây) có đầu vào 𝑥 = 5 và đầu ra thực tế (phản hồi) 𝑦 = 5. Quan sát tiếp theo có 𝑥 = 15 và 𝑦 = 20, v.v.

Hàm hồi quy ước lượng (đường đen) có phương trình 𝑓(𝑥) = 𝑏₀ + 𝑏₁𝑥.Mục tiêu của bạn là tính toán các giá trị tối ưu của trọng số dự đoán 𝑏₀ và 𝑏₁ để giảm thiểu SSR và xác định hàm hồi quy ước tính.Giá trị của 𝑏₀, còn gọi làđánh chặn, cho thấy điểm mà đường hồi quy ước đi qua trục 𝑦.Nó là giá trị của phản hồi ước lượng 𝑓(𝑥) cho 𝑥 = 0. Giá trị của 𝑏₁ xác địnhđộ dốccủa đường hồi quy ước tính.

Các phản hồi dự đoán (ô vuông màu đỏ) là các điểm trên đường hồi quy tương ứng với các giá trị đầu vào.Ví dụ: đối với đầu vào 𝑥 = 5, phản hồi dự đoán là 𝑓(5) = 8,33 (được biểu thị bằng hình vuông màu đỏ ngoài cùng bên trái).

Phần dư (các đường màu xám gạch ngang dọc) có thể được tính là 𝑦ᵢ - 𝑓(𝐱ᵢ) = 𝑦ᵢ - 𝑏₀ - 𝑏₁𝑥ᵢ cho 𝑖 = 1,…, 𝑛.Chúng là khoảng cách giữa các hình tròn màu xanh lá cây và hình vuông màu đỏ.Khi bạn thực hiện hồi quy tuyến tính, bạn thực sự đang cố gắng giảm thiểu những khoảng cách này và làm cho các hình vuông màu đỏ càng gần với các hình tròn màu xanh lá cây được xác định trước càng tốt.

Đa hồi quytuyến tính

Hồi quy tuyến tính nhiều biến hoặc đa biến là trường hợp hồi quy tuyến tính với hai hoặc nhiều biến độc lập.

Nếu chỉ có hai biến độc lập, thìhàm hồi quy ước lượng là 𝑓(𝑥₁, 𝑥₂) = 𝑏₀ + 𝑏₁𝑥₁ + 𝑏₂𝑥₂.Nó biểu diễn một mặt phẳng hồi quy trong không gian ba chiều.Mục tiêu của hồi quy là xác định giá trị của các trọng số 𝑏₀, 𝑏₁ và 𝑏₂ sao cho mặt phẳng này càng gần với các phản hồi thực tế càng tốt và mang lại SSR tối thiểu.

Trường hợp có nhiều hơn hai biến độc lập cũng tương tự, nhưng tổng quát hơn.Hàm hồi quy ước tính là 𝑓(𝑥₁,…, 𝑥ᵣ) = 𝑏₀ + 𝑏₁𝑥₁ + ⋯ + 𝑏ᵣ𝑥ᵣ, và có 𝑟 + 1 trọng số được xác định khi số lượng đầu vào là 𝑟.

Hồi quy đa thức

Bạn có thể coi hồi quy đa thức như một trường hợp tổng quát của hồi quy tuyến tính.Bạn giả định sự phụ thuộc đa thức giữa đầu ra và đầu vào và do đó, hàm hồi quy ước lượng đa thức.

Nói cách khác, ngoài các thuật ngữ tuyến tính như 𝑏₁𝑥₁, hàm hồi quy 𝑓 của bạn có thể bao gồm các thuật ngữ phi tuyến tính như 𝑏₂𝑥₁², 𝑏₃𝑥₁³ hoặc thậm chí 𝑏₄𝑥₁𝑥₂, 𝑏₅𝑥₁²𝑥₂, v.v.

Ví dụ đơn giản nhất về hồi quy đa thức có một biến độc lập duy nhất và hàm hồi quy ước lượng là đa thức bậc 2: 𝑓(𝑥) = 𝑏₀ + 𝑏₁𝑥 + 𝑏₂𝑥².

Bây giờ, hãy nhớ rằng bạn muốn tính toán 𝑏₀, 𝑏₁ và 𝑏₂ để giảm thiểu SSR.Đây là những ẩn số của bạn!

Hãy ghi nhớ điều này, hãy so sánh hàm hồi quy trước đó với hàm 𝑓(𝑥₁, 𝑥₂) = 𝑏₀ + 𝑏₁𝑥₁ + 𝑏₂𝑥₂ được sử dụng cho hồi quy tuyến tính.Chúng trông rất giống nhau và đều là hàm tuyến tính của các ẩn số 𝑏₀, 𝑏₁ và 𝑏₂.Đây là lý do tại sao bạn có thểgiải quyết vấn đề hồi quy đa thức như một bài toán tuyến tínhvới thuật ngữ 𝑥² được coi là một biến đầu vào.

Trong trường hợp hai biến và đa thức bậc 2, hàm hồi quy có dạng: 𝑓(𝑥₁, 𝑥₂) = 𝑏₀ + 𝑏₁𝑥₁ + 𝑏₂𝑥₂ + 𝑏₃𝑥₁² + 𝑏₄𝑥₁𝑥₂ + 𝑏₅𝑥₂².Quy trình giải quyết vấn đề giống với trường hợp trước.Bạn áp dụng hồi quy tuyến tính cho năm đầu vào: 𝑥₁, 𝑥₂, 𝑥₁², 𝑥₁𝑥₂ và 𝑥₂².Những gì bạn nhận được là kết quả của hồi quy là giá trị của sáu trọng số tối thiểu hóa SSR: 𝑏₀, 𝑏₁, 𝑏₂, 𝑏₃, 𝑏₄ và 𝑏₅.

Tất nhiên, có nhiều vấn đề tổng quát hơn, nhưng điều này đủ để minh họa chođiểm.

Underfitting và Overfitting

Một câu hỏi rất quan trọng có thể nảy sinh khi bạn thực hiện hồi quy đa thức có liên quan đếnviệc lựa chọn mức độ tối ưu của hàm hồi quy đa thức.

Không có quy tắc đơn giản để làm điều này.Nó phụ thuộc vào từng trường hợp.Tuy nhiên, bạn nên lưu ý hai vấn đề có thể xảy ra theo sự lựa chọn của mức độ: trang bịthiếuvà trang bị thừa.

Trang bịthiếu xảy ra khi một mô hình không thể nắm bắt chính xác các yếu tố phụ thuộc giữa các dữ liệu, thường là do sự đơn giản của chính nó.Nó thường mang lại 𝑅² thấp với dữ liệu đã biết và khả năng tổng quát hóa kém khi áp dụng với dữ liệu mới.

Trang bị thừaxảy ra khi một mô hình lại học cả sự phụ thuộc giữa dữ liệu và các biến động ngẫu nhiên.Nói cách khác, mô hình đượchọc vớidữ liệu hiện có là quá tốt.Các mô hình phức tạp, có nhiều tính năng hoặc thuật ngữ, thường dễ bị trang bị quá mức.Khi áp dụng cho dữ liệu đã biết, các mô hình như vậy thường mang lại 𝑅² cao.Tuy nhiên, chúng thường không khái quát hóa tốt và có 𝑅² thấp hơn đáng kể khi được sử dụng với dữ liệu mới.

Hình tiếp theo minh họa các mô hình thiếu trang bị, trang bị tốt và trang bị thừa:

Giải phương trình tuyến tính bằng Python

Ví dụ về các mẫu không được trang bị tốt, được trang bị tốt và được trang bị thừa

Biểu đồ trên cùng bên trái hiển thị một đường hồi quy tuyến tính có 𝑅² thấp.Điều quan trọng nữa là một đường thẳng không thể tính đến thực tế là phản ứng thực tế tăng lên khi 𝑥 di chuyển từ 25 về 0.Đây có thể là một ví dụ về trang bị thiếu.

Biểu đồ trên cùng bên phải minh họa hồi quy đa thức với mức độ bằng 2. Trong trường hợp này, đây có thể là mức độ tối ưu để mô hình hóa dữ liệu này.Mô hình có giá trị 𝑅² phù hợp trong nhiều trường hợp và hiển thị xu hướng một cách độc đáo.

Biểu đồ dưới cùng bên trái trình bày hồi quy đa thức với bậc bằng 3. Giá trị của 𝑅² cao hơn trong các trường hợp trước.Mô hình này hoạt động tốt hơn với dữ liệu đã biết so với các mô hình trước đó.Tuy nhiên, nó cho thấy một số dấu hiệu của việc trang bị thừa, đặc biệt là đối với các giá trị đầu vào gần 60 khi dòng bắt đầu giảm, mặc dù dữ liệu thực tế không cho thấy điều đó.

Cuối cùng, ở biểu đồ dưới cùng bên phải, bạn có thể thấy sự phù hợp hoàn hảo: sáu điểm và đường đa thức bậc 5 (hoặc cao hơn) cho kết quả 𝑅² = 1. Mỗi phản hồi thực tế bằng với dự đoán tương ứng của nó.

Trong một số tình huống, đây có thể là chính xác những gì bạn đang tìm kiếm.Tuy nhiên, trong nhiều trường hợp, đây là một mô hình được trang bị thừa.Nó có khả năng có hành vi kém với dữ liệu không nhìn thấy, đặc biệt là với các đầu vào lớn hơn 50.

Ví dụ, nó giả định, mà không có bất kỳ bằng chứng nào, rằng có sự sụt giảm đáng kể trong các phản hồi cho 𝑥> 50 và 𝑦 bằng 0 cho 𝑥 gần 60. Hành vi như vậy là hậu quả của nỗ lực quá mức để tìm hiểu và điều chỉnh dữ liệu hiện có.

Có rất nhiều nguồn mà bạn có thể tìm thêm thông tin về hồi quy nói chung và hồi quy tuyến tính nói riêng.Cáctrang phân tích hồi quy trên Wikipedia,bài báo hồi quy tuyến tính của Wikipedia, cũng nhưbài viết hồi quy tuyến tính của Học viện Khanlà điểm khởi đầu tốt.

Triển khai hồi quy tuyến tính bằng Python

Đã đến lúc bắt đầu triển khai hồi quy tuyến tính bằngPython.Về cơ bản, tất cả những gì bạn nên làm là áp dụng các gói thích hợp và các hàmvà lớp của chúng.

Các gói Python cho hồi quy tuyến tính

GóiNumPylà một gói khoa học Python cơ bản cho phép nhiều hoạt động hiệu suất cao trên các mảng đơn và đa chiều.Nó cũng cung cấp nhiều thói quen toán học.Tất nhiên, nó cũnglà mã nguồn mở.

Nếu bạn không quenvới NumPy, bạn có thể sử dụngHướng dẫn sử dụng NumPychính thứcvà đọcLook Ma, No For-Loops: Array Programming With NumPy.Ngoài ra,So sánh hiệu suất Pure Python vs NumPy vs TensorFlowcó thể cung cấp cho bạn một ý tưởng khá tốt về hiệu suất mà bạn có thể đạt được khi áp dụng NumPy.

Góiscikit-learninglà một thư viện Python được sử dụng rộng rãi để học máy, được xây dựng dựa trên NumPy và một số gói khác.Nó cung cấp các phương tiện để xử lý trước dữ liệu, giảm kích thước, thực hiện hồi quy, phân loại, phân cụm và hơn thế nữa.Giống như NumPy, scikit-learning cũng là mã nguồn mở.

Bạn có thể xem trangMô hình tuyến tính tổng quáttrêntrang web scikit-learningđể tìm hiểu thêm về mô hình tuyến tính và hiểu sâu hơn về cách hoạt động của gói này.

Nếu bạn muốn triển khai hồi quy tuyến tính và cần chức năng vượt ra ngoài phạm vi của scikit-learning, bạn nên cân nhắcstatsmodels.Đó là một gói Python mạnh mẽ để ước tính các mô hình thống kê, thực hiện các bài kiểm tra và hơn thế nữa.Nó cũng là mã nguồn mở.

Bạn có thể tìm thêm thông tin vềstatsmodelstrêntrang web chính thức.

Đơn hồi quy tuyến tínhvới scikit-learning

Hãy bắt đầu với trường hợp đơn giản nhất, đó là hồi quy tuyến tính đơn giản.

Có năm bước cơ bản khi bạn triển khai hồi quy tuyến tính:

  1. Import các gói và lớp bạn cần.
  2. Cung cấp dữ liệu để làm việc và cuối cùng thực hiện các chuyển đổi thích hợp.
  3. Tạo mô hình hồi quy và phù hợp với dữ liệu hiện có.
  4. Kiểm tra kết quả mô hình để biết mô hình có đạt yêu cầu hay không.
  5. Áp dụng mô hình cho các dự đoán.

Các bước này ít nhiều chung chung cho hầu hết các cách tiếp cận và triển khai hồi quy.

Bước 1: Import các gói và lớp

Bước đầu tiên là import góinumpyvà lớpLinearRegressiontừsklearn.linear_model:

import numpy as np from sklearn.linear_model import LinearRegression

Bây giờ, bạn có tất cả các chức năng cần thiết để thực hiện hồi quy tuyến tính.

Kiểu dữ liệu cơ bản của NumPy là kiểu mảng được gọinumpy.ndarray.Phần còn lại của bài viết này sử dụng thuật ngữmảngđể chỉ các trường hợp của kiểunumpy.ndarray.

Lớpsklearn.linear_model.LinearRegressionsẽ được sử dụng để thực hiện hồi quy tuyến tính và đa thức và đưa ra các dự đoán cho phù hợp.

Bước 2: Cung cấp dữ liệu

Bước thứ hai là xác định dữ liệu để làm việc.Các đầu vào (bộ hồi quy, 𝑥) và đầu ra (bộ dự đoán, 𝑦) phải là mảng (các đối tượng củacủa lớpnumpy.ndarray) hoặc các đối tượng tương tự.Đây là cách đơn giản nhất để cung cấp dữ liệu cho hồi quy:

x = np.array([5, 15, 25, 35, 45, 55]).reshape((-1, 1)) y = np.array([5, 20, 14, 32, 22, 38])

Bây giờ, bạn có hai mảng: đầu vàoxvà đầu ray.Bạn nên gọi.reshape()trênxbởi vì mảng này bắt buộc phải là hai chiều, hay nói chính xác hơn, để cómột cột và nhiều hàng khi cần thiết.Đó là chính xác những gì mà các đối số(-1, 1)của.reshape()quy định cụ thể.

xvàybây giờ sẽ như sau:

>>> print(x) [[ 5] [15] [25] [35] [45] [55]] >>> print(y) [ 5 20 14 32 22 38]

Như bạn có thể thấy,xcó hai chiều, vàx.shapelà(6, 1), trong khiycó một chiều, vày.shapelà(6,).

Bước 3: Tạo một mô hình và phù hợp với nó

Bước tiếp theo là tạo mô hình hồi quy tuyến tính và điều chỉnh nó bằng cách sử dụng dữ liệu hiện có.

Hãy tạo một thể hiện của lớpLinearRegression, nó sẽ đại diện cho mô hình hồi quy:

model = LinearRegression()

Câu lệnh trêntạo biếnmodeldưới dạng là đối tượng (hay thể hiện)củaLinearRegression.Bạn có thể cung cấp một số tham số tùy chọn choLinearRegression:

  • fit_interceptlà mộtBoolean(mặc định làTrue) quyết định xem có tính toán chặn 𝑏₀ (True) hay coi nó bằng không (False).
  • normalizelà một Boolean (mặc định làFalse) quyết định có chuẩn hóa các biến đầu vào (True) hay không (False).
  • copy_Xlà một Boolean (mặc định làTrue) quyết định việc sao chép (True) hoặc ghi đè các biến đầu vào (False).
  • n_jobslà một số nguyên hoặcNone(mặc định) và đại diện cho số lượng công việc được sử dụng trong tính toán song song.Nonethường có nghĩa là một công việc và-1sử dụng tất cả các bộ xử lý.

Ví dụ trênsử dụng các giá trị mặc định của tất cả các tham số.

Đã đến lúc bắt đầu sử dụng mô hình.Trước tiên, bạn cần phải gọi.fit()trênmodel:

model.fit(x, y)

Với.fit(), bạn tính toán các giá trị tối ưu của trọng số 𝑏₀ và 𝑏₁, sử dụng đầu vào và đầu ra hiện có (xvày) làm đối số.Nói cách khác,.fit()phù hợp với mô hình.Nó trả vềself, chính là biếnmodel.Đó là lý do tại sao bạn có thể thay thế hai câu lệnh cuối cùng bằng câu lệnh sau:

model = LinearRegression().fit(x, y)

Câu lệnh này thực hiện tương tự như hai câu trước.Nó chỉ ngắn hơn.

Bước 4: Nhận kết quả

Khi bạn đã phù hợp vớimô hình của mình, bạn có thể nhận được kết quả để kiểm tra xem mô hình có hoạt động tốt hay không và giải thích nó.

Bạn có thể nhận được hệ số xác định (𝑅²) với lệnh.score()trênmodel:

>>> r_sq = model.score(x, y) >>> print('coefficient of determination:', r_sq) coefficient of determination: 0.715875613747954

Khi bạn đang áp dụng.score(), các đối số cũng là công cụ dự đoánxvà hồi quyy, và giá trị trả về là 𝑅².

Các thuộc tính củamodellà.intercept_, nóđại diện cho hệ số𝑏₀, còn.coef_đại diện cho 𝑏₁:

>>> print('intercept:', model.intercept_) intercept: 5.633333333333329 >>> print('slope:', model.coef_) slope: [0.54]

Đoạn mã trên minh họa cách lấy 𝑏₀ và 𝑏₁.Bạn có thể nhận thấy rằng.intercept_là một đại lượng vô hướng, trong khi.coef_là một mảng.

Giá trị 𝑏₀ = 5,63 (gần đúng) minh họa rằng mô hình của bạn dự đoán phản ứng 5,63 khi 𝑥 bằng 0.Giá trị 𝑏₁ = 0,54 có nghĩa là phản ứng dự đoán tăng 0,54 khi 𝑥 tăng thêmmột.

Bạn nên lưu ý rằng bạn cũng có thể cung cấpydưới dạng một mảng hai chiều.Trong trường hợp này, bạn sẽ nhận được một kết quả tương tự:

>>> new_model = LinearRegression().fit(x, y.reshape((-1, 1))) >>> print('intercept:', new_model.intercept_) intercept: [5.63333333] >>> print('slope:', new_model.coef_) slope: [[0.54]]

Như bạn có thể thấy, ví dụ này rất giống với ví dụ trước, nhưng trong trường hợp này,.intercept_là mảng một chiều với phần tử đơn 𝑏₀ và.coef_là mảng hai chiều với phần tử đơn 𝑏₁.

Bước 5: Dự đoán phản hồi

Khi có một mô hình ưng ý, bạn có thể sử dụng nó để dự đoán với dữ liệu hiện có hoặc dữ liệu mới.

Để nhận được phản hồi dự đoán, hãy sử dụng.predict():

>>> y_pred = model.predict(x) >>> print('predicted response:', y_pred, sep='\n') predicted response: [ 8.33333333 13.73333333 19.13333333 24.53333333 29.93333333 35.33333333]

Khi áp dụng.predict(), bạn truyềnhàm hồi quy làm đối số và nhận được phản hồi dự đoán tương ứng.

Đây là một cách gần giống nhau để dự đoán phản ứng:

>>> y_pred = model.intercept_ + model.coef_ * x >>> print('predicted response:', y_pred, sep='\n') predicted response: [[ 8.33333333] [13.73333333] [19.13333333] [24.53333333] [29.93333333] [35.33333333]]

Trong trường hợp này, bạn nhân từng phần tử củaxvớimodel.coef_và thêmmodel.intercept_vào sản phẩm.

Kết quả đầu ra ở đây chỉ khác với ví dụ trước đó về kích thước.Phản hồi được dự đoán bây giờ là một mảng hai chiều, trong khi trong trường hợp trước, nó có một chiều.

Nếu bạn giảm số chiều củaxxuống còn một, thì hai cách tiếp cận này sẽ mang lại cùng một kết quả.Bạn có thể làm điều này bằng cách thay thếxbằngx.reshape(-1),x.flatten()hoặcx.ravel()khi nhân nó vớimodel.coef_.

Trong thực tế, các mô hình hồi quy thường được áp dụng cho các dự báo.Điều này có nghĩa là bạn có thể sử dụng các mô hình được trang bị để tính toán kết quả đầu ra dựa trên một số đầu vào mới khác:

>>> x_new = np.arange(5).reshape((-1, 1)) >>> print(x_new) [[0] [1] [2] [3] [4]] >>> y_new = model.predict(x_new) >>> print(y_new) [5.63333333 6.17333333 6.71333333 7.25333333 7.79333333]

Ở đây,.predict()áp dụng cho bộ hồi quy mớix_newvà tạo ra phản hồiy_new.Ví dụ này thuận tiện sử dụngarange()từnumpyđể tạo ra một mảng với các phần tửtừ 0 (inclusive) đến 5 (exclusive), có nghĩa là0,1,2,3, và4.

Bạn có thể tìm thêm thông tin vềLinearRegressiontrêntrang tài liệu chính thức.

Đa hồi quy tuyến tính với scikit-learning

Bạn có thể thực hiện đahồi quy đatuyến tính theo các bước tương tự như bạn làm đối với đơnhồi quy tuyến tính.

Bước 1 và 2: Importgói và lớp và cung cấp dữ liệu

Trước tiên, bạn importnumpyvàsklearn.linear_model.LinearRegressionvà cung cấp đầu vào và đầu ra:

import numpy as np from sklearn.linear_model import LinearRegression x = [[0, 1], [5, 1], [15, 2], [25, 5], [35, 11], [45, 15], [55, 34], [60, 35]] y = [4, 5, 20, 14, 32, 22, 38, 43] x, y = np.array(x), np.array(y)

Đó là một cách đơn giản để xác định đầu vàoxvà đầu ray.Bạn có thể inxvàyđể xem chúng trông như thế nào:

>>> print(x) [[ 0 1] [ 5 1] [15 2] [25 5] [35 11] [45 15] [55 34] [60 35]] >>> print(y) [ 4 5 20 14 32 22 38 43]

Trong đa hồi quy tuyến tính,xlà mảng hai chiều có ít nhất hai cột, trong khiythường là mảng một chiều.Đây là một ví dụ đơn giản về đa hồi quy tuyến tính vàxcó chính xác hai cột.

Bước 3: Tạo một mô hình và phù hợp với nó

Bước tiếp theo là tạo mô hình hồi quy như một đối tượng củaLinearRegressionvà phù hợp với.fit():

model = LinearRegression().fit(x, y)

Kết quả của câu lệnh này là biếnmodeltham chiếu đến đối tượng của kiểuLinearRegression.Nó đại diện cho mô hình hồi quy phù hợp với dữ liệu hiện có.

Bước 4: Nhận kết quả

Bạn có thể có được các thuộc tính của mô hình theo cách tương tự như trong trường hợp đơnhồi quy tuyến tính:

>>> r_sq = model.score(x, y) >>> print('coefficient of determination:', r_sq) coefficient of determination: 0.8615939258756776 >>> print('intercept:', model.intercept_) intercept: 5.52257927519819 >>> print('slope:', model.coef_) slope: [0.44706965 0.25502548]

Bạn nhận được giá trị của 𝑅² bằng cách sử dụng.score()và các giá trị của các ước lượng của hệ số hồi quy với.intercept_và.coef_.Một lần nữa,.intercept_giữ thiên vị 𝑏₀, trong khi bây giờ.coef_là một mảng chứa 𝑏₁ và 𝑏₂ tương ứng.

Trong ví dụ này, giới hạn xấp xỉ 5,52 và đây là giá trị của phản hồi được dự đoán khi 𝑥₁ = 𝑥₂ = 0. Việc tăng𝑥₁ thêm 1 dẫn đến sự gia tăng của phản hồi dự đoán thêm 0,45.Tương tự, khi 𝑥₂ tăng thêm1, thìphản ứng tăng 0,26.

Bước 5: Dự đoán phản hồi

Các dự đoán cũng hoạt động theo cách tương tự như trong trường hợp đơnhồi quy tuyến tính:

>>> y_pred = model.predict(x) >>> print('predicted response:', y_pred, sep='\n') predicted response: [ 5.77760476 8.012953 12.73867497 17.9744479 23.97529728 29.4660957 38.78227633 41.27265006]

Phản ứng dự đoán nhận được với.predict()có vẻ rất giống vớiphản ứngsau:

>>> y_pred = model.intercept_ + np.sum(model.coef_ * x, axis=1) >>> print('predicted response:', y_pred, sep='\n') predicted response: [ 5.77760476 8.012953 12.73867497 17.9744479 23.97529728 29.4660957 38.78227633 41.27265006]

Bạn có thể dự đoán các giá trị đầu ra bằng cách nhân từng cột của đầu vào với trọng số thích hợp, tính tổng các kết quả và thêm số chặn vào tổng.

Bạn cũng có thể áp dụng mô hình này cho dữ liệu mới:

>>> x_new = np.arange(10).reshape((-1, 2)) >>> print(x_new) [[0 1] [2 3] [4 5] [6 7] [8 9]] >>> y_new = model.predict(x_new) >>> print(y_new) [ 5.77760476 7.18179502 8.58598528 9.99017554 11.3943658 ]

Đó là dự đoán sử dụng mô hình hồi quy tuyến tính.

Hồi quy đa thức với scikit-learning

Thực hiện hồi quy đa thức với scikit-learning rất giống với hồi quy tuyến tính.Chỉ có một bước bổ sung: bạn cần biến đổi mảng đầu vào để bao gồm các số hạng phi tuyến tính như 𝑥².

Bước 1: Import các gói và lớp

Ngoàinumpyvàsklearn.linear_model.LinearRegression, bạn cũng nên import lớpPolynomialFeaturestừsklearn.preprocessing:

import numpy as np from sklearn.linear_model import LinearRegression from sklearn.preprocessing import PolynomialFeatures

Quá trình import hiện đã hoàn tất và bạn có mọi thứ cần thiết để làm việc.

Bước 2a: Cung cấp dữ liệu

Bước này xác định đầu vào và đầu ra và giống như trong trường hợp hồi quy tuyến tính:

x = np.array([5, 15, 25, 35, 45, 55]).reshape((-1, 1)) y = np.array([15, 11, 2, 8, 25, 32])

Bây giờ bạn có đầu vào và đầu ra ở định dạng phù hợp.Hãy nhớ rằng bạn cần đầu vào là mộtmảng hai chiều.Đó là lý do tại sao.reshape()được sử dụng.

Bước 2b: Chuyển đổi dữ liệu đầu vào

Đây làbước mớibạn cần thực hiện cho hồi quy đa thức!

Như bạn đã thấy trước đó, bạn cần bao gồm 𝑥² (và có thể là các thuật ngữ khác) làm các tính năng bổ sung khi triển khai hồi quy đa thức.Vì lý do đó, bạn nên biến đổi mảng đầu vàoxđể chứa (các) cột bổ sung có giá trị 𝑥² (và cuối cùng là nhiều tính năng hơn).

Có thể biến đổi mảng đầu vào theo một số cách (như sử dụnginsert()từnumpy), nhưng lớpPolynomialFeaturesnày rất thuận tiện cho mục đích này.Hãy tạo một thể hiện (đối tượng)của lớp này:

transformer = PolynomialFeatures(degree=2, include_bias=False)

Biếntransformerchính làđối tượng củaPolynomialFeaturesmà bạn có thể sử dụng để biến đổi đầu vàox.

Bạn có thể cung cấp một số tham số tùy chọn choPolynomialFeatures:

  • degreelà một số nguyên (mặc định là2) đại diện cho mức độ của hàm hồi quy đa thức.
  • interaction_onlylà Boolean (mặc định làFalse) quyết định chỉ bao gồm các tính năng tương tác (True) hay tất cả các tính năng (False).
  • include_biaslà một Boolean (mặc định làTrue) quyết định có bao gồm cột thiên vị (chặn) của chúng(True) hay không (False).

Ví dụ này sử dụng các giá trị mặc định của tất cả các tham số, nhưng đôi khi bạn sẽ muốn thử nghiệm với mức độ của hàm và dù sao cũng có thể có lợi nếu cung cấp đối số này.

Trước khi áp dụngtransformer, bạn cần phải đảm bảo sự phù hợp với.fit():

transformer.fit(x)

Sau khitransformerđược trang bị, nó đã sẵn sàng để tạo một đầu vào mới, được sửa đổi.Bạn đăng ký.transform()để làm điều đó:

x_ = transformer.transform(x)

Đó là sự biến đổi của mảng đầu vào với.transform().Nó nhận mảng đầu vào làm đối số và trả về mảng đã sửa đổi.

Bạn cũng có thể sử dụng.fit_transform()để thay thế ba câu lệnh trước đó bằng một câu lệnh duy nhất:

x_ = PolynomialFeatures(degree=2, include_bias=False).fit_transform(x)

Điều đó phù hợp và biến đổi mảng đầu vào trong một câu lệnh với.fit_transform().Nó cũng lấy mảng đầu vào và thực hiện hiệu quả điều tương tự như.fit()và.transform()được gọi theo thứ tự đó.Nó cũng trả về mảng đã sửa đổi. Mảng đầu vào mới trông như sau:

>>> print(x_) [[ 5. 25.] [ 15. 225.] [ 25. 625.] [ 35. 1225.] [ 45. 2025.] [ 55. 3025.]]

Mảng đầu vào đã sửa đổi chứa hai cột: một cột chứa các đầu vào ban đầu và cột kia chứa các ô vuông của chúng.

Bạn có thể tìm thêm thông tinPolynomialFeaturestrêntrang tài liệu chính thức.

Bước 3: Tạo một mô hình và phù hợp với nó

Bước này cũng giống như trong trường hợp hồi quy tuyến tính.Bạn tạo và phù hợp với mô hình:

model = LinearRegression().fit(x_, y)

Mô hình hồi quy hiện đã được tạo và điều chỉnh.Nó đã sẵn sàng để áp dụng.

Bạn nên nhớ rằng đối số đầu tiên của.fit()làmảng đầu vào đã sửa đổix_chứ không phải là đối số ban đầux.

Bước 4: Nhận kết quả

Bạn có thể có được các thuộc tính của mô hình theo cách tương tự như trong trường hợp hồi quy tuyến tính:

>>> r_sq = model.score(x_, y) >>> print('coefficient of determination:', r_sq) coefficient of determination: 0.8908516262498564 >>> print('intercept:', model.intercept_) intercept: 21.372321428571425 >>> print('coefficients:', model.coef_) coefficients: [-1.32357143 0.02839286]

Một lần nữa,.score()trả về 𝑅².Đối số đầu tiên của nó cũng là đầu vào được sửa đổix_, không phảix.Giá trị của các trọng số được liên kết với.intercept_và.coef_:.intercept_đại diện cho 𝑏₀, trong khi.coef_tham chiếu đến mảng chứa 𝑏₁ và 𝑏₂ tương ứng.

Bạn có thể nhận được một kết quả rất giống nhau với các đối số biến đổi và hồi quy khác nhau:

x_ = PolynomialFeatures(degree=2, include_bias=True).fit_transform(x)

Nếu bạn gọiPolynomialFeaturesvới tham số mặc địnhinclude_bias=True(hoặc nếu bạn chỉ bỏ qua nó), bạn sẽ nhận được mảng đầu vào mớix_với cột ngoài cùng bên trái bổ sung chỉ chứa những tham số.Cột này tương ứng với điểm đánh chặn.Mảng đầu vào đã sửa đổi trông như sau:

>>> print(x_) [[1.000e+00 5.000e+00 2.500e+01] [1.000e+00 1.500e+01 2.250e+02] [1.000e+00 2.500e+01 6.250e+02] [1.000e+00 3.500e+01 1.225e+03] [1.000e+00 4.500e+01 2.025e+03] [1.000e+00 5.500e+01 3.025e+03]]

Cột đầu tiên củax_chứa chính chúng,cộtthứ hai có các giá trị củax, trong khi cột thứ ba chứa các bình phươngcủax.

Phần đánh chặn đã được bao gồm trong cột ngoài cùng bên trái của những cái đó và bạn không cần phải bao gồm lại nó khi tạo phiên bản củaLinearRegression.Vì vậy, bạn có thể cung cấpfit_intercept=False.Đây là câu lệnh tiếp theo:

model = LinearRegression(fit_intercept=False).fit(x_, y)

Biếnmodellại tương ứng với mảng đầu vào mớix_.Do đóx_nên được chuyển làm đối số đầu tiên thay vìx.

Cách tiếp cận này mang lại các kết quả sau, tương tự như trường hợp trước:

>>> r_sq = model.score(x_, y) >>> print('coefficient of determination:', r_sq) coefficient of determination: 0.8908516262498565 >>> print('intercept:', model.intercept_) intercept: 0.0 >>> print('coefficients:', model.coef_) coefficients: [21.37232143 -1.32357143 0.02839286]

Bạn thấy rằng bây giờ.intercept_là 0, nhưng.coef_thực sự chứa 𝑏₀ là phần tử đầu tiên của nó.Mọi thứ khác là như nhau.

Bước 5: Dự đoán phản hồi

Nếu bạn muốn nhận được phản hồi dự đoán, chỉ cần sử dụng.predict(), nhưng hãy nhớ rằng đối số phải là đầu vào được sửa đổix_thay vìx:

>>> y_pred = model.predict(x_) >>> print('predicted response:', y_pred, sep='\n') predicted response: [15.46428571 7.90714286 6.02857143 9.82857143 19.30714286 34.46428571]

Như bạn có thể thấy, dự đoán hoạt động gần giống như trong trường hợp hồi quy tuyến tính.Nó chỉ yêu cầu đầu vào được sửa đổi thay vì đầu vào ban đầu.

Bạn có thể áp dụng quy trình tương tự nếu bạn cónhiều biến đầu vào.Bạn sẽ có một mảng đầu vào với nhiều hơn một cột, nhưng mọi thứ khác đều giống nhau.Đây là một ví dụ:

# Step 1: Import packages import numpy as np from sklearn.linear_model import LinearRegression from sklearn.preprocessing import PolynomialFeatures # Step 2a: Provide data x = [[0, 1], [5, 1], [15, 2], [25, 5], [35, 11], [45, 15], [55, 34], [60, 35]] y = [4, 5, 20, 14, 32, 22, 38, 43] x, y = np.array(x), np.array(y) # Step 2b: Transform input data x_ = PolynomialFeatures(degree=2, include_bias=False).fit_transform(x) # Step 3: Create a model and fit it model = LinearRegression().fit(x_, y) # Step 4: Get results r_sq = model.score(x_, y) intercept, coefficients = model.intercept_, model.coef_ # Step 5: Predict y_pred = model.predict(x_)

Ví dụ hồi quy trênmang lại các kết quả và dự đoán sau:

>>> print('coefficient of determination:', r_sq) coefficient of determination: 0.9453701449127822 >>> print('intercept:', intercept) intercept: 0.8430556452395734 >>> print('coefficients:', coefficients, sep='\n') coefficients: [ 2.44828275 0.16160353 -0.15259677 0.47928683 -0.4641851 ] >>> print('predicted response:', y_pred, sep='\n') predicted response: [ 0.54047408 11.36340283 16.07809622 15.79139 29.73858619 23.50834636 39.05631386 41.92339046]

Trong trường hợp này, có sáu hệ số hồi quy (bao gồm cả hệ số chặn), như được thể hiện trong hàm hồi quy ước tính 𝑓 (𝑥₁, 𝑥₂) = 𝑏₀ + 𝑏₁𝑥₁ + 𝑏₂𝑥₂ + 𝑏₃𝑥₁² + 𝑏₄𝑥₁𝑥₂ + 𝑏₅𝑥₂².

Bạn cũng có thể nhận thấy rằng hồi quy đa thức mang lại hệ số xác định cao hơn đahồi quy tuyến tính cho cùng một vấn đề.Ban đầu, bạn có thể nghĩ rằng có được một 𝑅² lớn như vậy là một kết quả tuyệt vời.Có thể là.

Tuy nhiên, trong các tình huống thực tế, có một mô hình phức tạp và 𝑅² rất gần với 1 cũng có thể là dấu hiệu của việc trang bị thừa.Để kiểm tra hiệu suất của một mô hình, bạn nên kiểm tra nó với dữ liệu mới, tức là với các quan sát không được sử dụng để điều chỉnh (huấn luyện) mô hình.Để tìm hiểu cách tách tập dữ liệu của bạn thành các tập con huấn luyện và kiểm tra, hãy xemTáchtập dữ liệu của bạn với train_test_split() của scikit-learning.

Hồi quy tuyến tính nâng cao vớistatsmodels

Bạn cũng có thể triển khai hồi quy tuyến tính trong Python một cách tương đối dễ dàng bằng cách sử dụng góistatsmodels.Thông thường, điều này là mong muốn khi cần có kết quả chi tiết hơn.

Quy trình tương tự như của scikit-learning.

Bước 1: Importcác gói

Đầu tiên bạn cần thực hiện một số thao tác import.Ngoàinumpyra, bạn cần importstatsmodels.api:

import numpy as np import statsmodels.api as sm

Bây giờ bạn có các gói bạn cần.

Bước 2: Cung cấp dữ liệu và chuyển đổi đầu vào

Bạn có thể cung cấp các đầu vào và đầu ra giống như cách bạn đã làm khi sử dụng scikit-learning:

x = [[0, 1], [5, 1], [15, 2], [25, 5], [35, 11], [45, 15], [55, 34], [60, 35]] y = [4, 5, 20, 14, 32, 22, 38, 43] x, y = np.array(x), np.array(y)

Các mảng đầu vào và đầu ra được tạo, nhưng công việc vẫn chưa được thực hiện.

Bạn cần thêm cột của chúngvào các đầu vào nếu bạn muốnstatsmodelstính toán hệ số chặn 𝑏₀.Nó không tính đến 𝑏₀ theo mặc định.Đây chỉ là một lệnh gọi hàm:

x = sm.add_constant(x)

Đó là cách bạn thêm cột của chúngvàoxvớiadd_constant().Nó nhận mảng đầu vàoxlàm đối số và trả về một mảng mới với cột của chúngđược chèn ở đầu. Kết quả làxvàytrông như sau:

>>> print(x) [[ 1. 0. 1.] [ 1. 5. 1.] [ 1. 15. 2.] [ 1. 25. 5.] [ 1. 35. 11.] [ 1. 45. 15.] [ 1. 55. 34.] [ 1. 60. 35.]] >>> print(y) [ 4 5 20 14 32 22 38 43]

Bạn có thể thấy rằngxđã đượcsửa đổi có ba cột: cột đầu tiên là cột (tương ứng với 𝑏₀ và thay thế dấu chặn) cũng như hai cột của các đối tượng địa lý ban đầu.

Bước 3: Tạo một mô hình và phù hợp với nó

Mô hình hồi quy dựa trên bình phương nhỏ nhất thông thường là một thể hiện của lớpstatsmodels.regression.linear_model.OLS.Đây là cách bạn có thể có được:

model = sm.OLS(y, x)

Bạn nên cẩn thận ở đây!Xin lưu ý rằng đối số đầu tiên là đầu ra, tiếp theo là đầu vào.Có một số tham số tùy chọn khác.

Để tìm thêm thông tin về lớp này, vui lòng truy cậptrang tài liệu chính thức.

Sau khi mô hình của bạn được tạo, bạn có thể áp dụng.fit():

results = model.fit()

Bằng cách gọi.fit(), bạn nhận được biếnresults, là một thể hiện của lớpstatsmodels.regression.linear_model.RegressionResultsWrapper.Đối tượng này nắm giữ nhiều thông tin về mô hình hồi quy.

Bước 4: Nhận kết quả

Biếnresultsđề cập đến đối tượng chứa thông tin chi tiết về kết quả của hồi quy tuyến tính.Việc giải thích chúng vượt xa phạm vi của bài viết này, nhưng bạn sẽ tìm hiểu ở đây cách giải nén chúng.

Bạn có thể gọi.summary()để lấy bảng với kết quả của hồi quy tuyến tính:

>>> print(results.summary()) OLS Regression Results ============================================================================== Dep. Variable: y R-squared: 0.862 Model: OLS Adj. R-squared: 0.806 Method: Least Squares F-statistic: 15.56 Date: Sun, 17 Feb 2019 Prob (F-statistic): 0.00713 Time: 19:15:07 Log-Likelihood: -24.316 No. Observations: 8 AIC: 54.63 Df Residuals: 5 BIC: 54.87 Df Model: 2 Covariance Type: nonrobust ============================================================================== coef std err t P>|t| [0.025 0.975] ------------------------------------------------------------------------------ const 5.5226 4.431 1.246 0.268 -5.867 16.912 x1 0.4471 0.285 1.567 0.178 -0.286 1.180 x2 0.2550 0.453 0.563 0.598 -0.910 1.420 ============================================================================== Omnibus: 0.561 Durbin-Watson: 3.268 Prob(Omnibus): 0.755 Jarque-Bera (JB): 0.534 Skew: 0.380 Prob(JB): 0.766 Kurtosis: 1.987 Cond. No. 80.1 ============================================================================== Warnings: [1] Standard Errors assume that the covariance matrix of the errors is correctly specified.

Bảng này rất toàn diện.Bạn có thể tìm thấy nhiều giá trị thống kê được kết hợp với hồi quy tuyến tính bao gồm 𝑅², 𝑏₀, 𝑏₁ và 𝑏₂.

Trong trường hợp cụ thể này, bạn có thể nhận được cảnh báo liên quan đếnkurtosistest.Điều này là do số lượng nhỏ các quan sát được cung cấp.

>>> print('coefficient of determination:', results.rsquared) coefficient of determination: 0.8615939258756777 >>> print('adjusted coefficient of determination:', results.rsquared_adj) adjusted coefficient of determination: 0.8062314962259488 >>> print('regression coefficients:', results.params) regression coefficients: [5.52257928 0.44706965 0.25502548]

Bạn có thể trích xuất bất kỳ giá trị nào từ bảng trên.Đây là một ví dụ:

Đâylà cách bạn thu được một số kết quả của hồi quy tuyến tính:

  1. .rsquaredgiữ 𝑅².
  2. .rsquared_adjđại diện cho 𝑅² đã điều chỉnh (𝑅² được sửa theo số lượng các đối tượng địa lý đầu vào).
  3. .paramstham chiếu đến mảng với 𝑏₀, 𝑏₁ và 𝑏₂ tương ứng.

Bạn cũng có thể nhận thấy rằng những kết quả này giống hệt với những kết quả thu được với scikit-learning cho cùng một vấn đề.

Để tìm thêm thông tin về kết quả của hồi quy tuyến tính, vui lòng truy cậptrang tài liệu chính thức.

Bước 5: Dự đoán phản hồi

Bạn có thể nhận được phản hồi dự đoán về các giá trị đầu vào được sử dụng để tạo mô hình bằng cách sử dụng.fittedvalueshoặc.predict()với mảng đầu vào làm đối số:

>>> print('predicted response:', results.fittedvalues, sep='\n') predicted response: [ 5.77760476 8.012953 12.73867497 17.9744479 23.97529728 29.4660957 38.78227633 41.27265006] >>> print('predicted response:', results.predict(x), sep='\n') predicted response: [ 5.77760476 8.012953 12.73867497 17.9744479 23.97529728 29.4660957 38.78227633 41.27265006]

Đây là phản ứng dự đoán cho các đầu vào đã biết.Nếu bạn muốn dự đoán với các bộ hồi quy mới, bạn cũng có thể áp dụng.predict()với dữ liệu mới làm đối số:

>>> x_new = sm.add_constant(np.arange(10).reshape((-1, 2))) >>> print(x_new) [[1. 0. 1.] [1. 2. 3.] [1. 4. 5.] [1. 6. 7.] [1. 8. 9.]] >>> y_new = results.predict(x_new) >>> print(y_new) [ 5.77760476 7.18179502 8.58598528 9.99017554 11.3943658 ]

Bạn có thể nhận thấy rằng kết quả dự đoán cũng giống như kết quả nhận được với scikit-learning cho cùng một vấn đề.

Vượt ra ngoài hồi quy tuyến tính

Hồi quy tuyến tính đôi khi không thích hợp, đặc biệt đối với các mô hình phi tuyến tính có độ phức tạp cao.

May mắn thay, có những kỹ thuật hồi quy khác phù hợp với những trường hợp mà hồi quy tuyến tính không hoạt động tốt.Một số trong số đó là máy vectơ hỗ trợ, cây quyết định, rừng ngẫu nhiên và mạng nơ-ron.

Có rất nhiều thư viện Python để hồi quy bằng cách sử dụng các kỹ thuật này.Hầu hết chúng đều miễn phí và mã nguồn mở.Đó là một trong những lý do tại sao Python là một trong những ngôn ngữ lập trình chính cho học máy.

Gói scikit-learning cung cấp các phương tiện để sử dụng các kỹ thuật hồi quy khác theo cách rất giống với những gì bạn đã thấy.Nó chứa các lớp cho máy vectơ hỗ trợ, cây quyết định, rừng ngẫu nhiên,v.v.cùng với các phương thức.fit(),predict(),.score(), v.v..

Phần kết luận

Bây giờ bạn đã biết hồi quy tuyến tính là gì và cách bạn có thể triển khai nó với Python và ba gói mã nguồn mở: NumPy, scikit-learning vàstatsmodels.

Bạn sử dụng NumPy để xử lý mảng.

Hồi quy tuyến tính được thực hiện như sau:

  • scikit-learningnếu bạn không cần kết quả chi tiết và muốn sử dụng phương pháp phù hợp với các kỹ thuật hồi quy khác
  • statsmodelsnếu bạn cần các thông số thống kê tiên tiến của một mô hình

Cả hai cách tiếp cận đều đáng để học cách sử dụng và khám phá thêm.Các liên kết trong bài viết này có thể rất hữu ích cho việc đó.

Khi thực hiện hồi quy tuyến tính trong Python, bạn có thể làm theo các bước sau:

  1. Import gói và lớp bạn cần
  2. Cung cấp dữ liệu để làm việc và cuối cùng thực hiện các chuyển đổi thích hợp
  3. Tạo mô hình hồi quy và phù hợp với dữ liệu hiện có
  4. Kiểm tra kết quả lắp mô hình để biết mô hình có đạt yêu cầu hay không
  5. Áp dụng mô hình cho các dự đoán.