Vẽ đồ thị hồi quy tuyến tính Python

Bài đăng này nói về việc thực hiện hồi quy tuyến tính đơn giản và hồi quy tuyến tính bội trong Python. Nếu bạn muốn hiểu cách hoạt động của hồi quy tuyến tính, hãy xem bài đăng này

Để thực hiện hồi quy tuyến tính, chúng ta cần gói numpy của Python cũng như gói sklearn cho tính toán khoa học. Hơn nữa, chúng tôi nhập matplotlib để vẽ đồ thị

import numpy as np
import matplotlib.pyplot as plt
from sklearn.linear_model import LinearRegression

Hồi quy tuyến tính đơn giản trong Python

Đầu tiên, chúng tôi tạo dữ liệu giả trong sách để phù hợp với mô hình hồi quy tuyến tính của chúng tôi. Chúng tôi sử dụng cùng một dữ liệu mà chúng tôi đã sử dụng để tính toán hồi quy tuyến tính bằng tay. Lưu ý rằng dữ liệu cần phải là một mảng NumPy, chứ không phải là một danh sách Python

x = np.array[[8,9,10,11,12]]
y = np.array[[1.5,1.57,1.54,1.7,1.62]]

Hồi quy tuyến tính đơn giản trong NumPy

Nếu chúng tôi muốn thực hiện hồi quy tuyến tính trong NumPy mà không cần sklearn, chúng tôi có thể sử dụng hàm np. hàm polyfit để lấy độ dốc và giao điểm của đường hồi quy của chúng tôi. Sau đó, chúng ta có thể xây dựng đường bằng cách sử dụng phương trình đặc trưng trong đó y mũ là y dự đoán

\hat y = kx + d

k, d = np.polyfit[x, y, 1]
y_pred = k*x + d

plt.plot[x, y, '.']
plt.plot[x, y_pred]

Hồi quy tuyến tính đơn giản trong SKLearn

Gói goto của Python dành cho máy tính khoa học, SciKit Learn, giúp việc điều chỉnh mô hình hồi quy trở nên dễ dàng hơn

Trước tiên, chúng ta cần tạo một thể hiện của lớp hồi quy tuyến tính mà chúng ta đã nhập lúc đầu và sau đó chúng ta chỉ cần gọi hàm fit[x,y] trên thể hiện đã tạo để tính toán đường hồi quy của chúng ta

reg = LinearRegression[]
reg.fit[x, y]

Nếu chúng ta chạy mã như thế này, nó sẽ trả về lỗi giá trị “Mảng 2D mong đợi, thay vào đó có mảng 1D. ”. May mắn thay, Python cung cấp cho chúng ta một gợi ý rất hữu ích về những gì đã xảy ra. Lý do cho lỗi này là lớp LinearRegression mong đợi các biến độc lập được trình bày dưới dạng ma trận có 2 chiều với các cột đại diện cho các biến độc lập và các hàng chứa các quan sát. Ở đây chúng ta chỉ có một biến độc lập và do đó vectơ của chúng ta chỉ có một chiều. Chúng tôi có thể sửa lỗi này bằng cách định hình lại x. Nếu chúng ta in hình dạng của x, chúng ta sẽ nhận được một mảng [5, 1] 2D, là cách nói của Python cho một ma trận, thay vì một mảng [5,] 1D, một vectơ

x = np.array[[8,9,10,11,12]].reshape[[-1, 1]]
print[x.shape]

#fit the model to the data
reg.fit[x, y]

Bây giờ chúng tôi đã xây dựng thành công mô hình hồi quy của mình, chúng tôi có thể thu được một số tham số như hệ số xác định, độ dốc và hệ số chặn

#Coefficient of determination
r_squared = reg.score[x,y]
print[r_squared]

#slope
slope = reg.coef_
print[slope]

#intercept
intercept = reg.intercept_
print[intercept]

Cuối cùng, chúng ta có thể sử dụng mô hình được trang bị để dự đoán y cho bất kỳ giá trị nào của x

y_pred = reg.predict[x]
print[y_pred]

Chúng ta có thể tính toán thêm phần dư, sự khác biệt giữa giá trị thực tế của y và giá trị được dự đoán bởi mô hình hồi quy của chúng ta. Nếu chúng ta bình phương sự khác biệt và tổng hợp chúng, nó sẽ cho chúng ta tổng bình phương phần dư

________số 8

Lưu ý rằng Python vector hóa các thao tác được thực hiện trên vectơ. Tất cả những gì chúng ta phải làm là viết y – y_pred và Python tính toán sự khác biệt giữa mục nhập đầu tiên của y và mục nhập đầu tiên của y_pred, mục nhập thứ hai của y và mục nhập thứ hai của y_pred, v.v.

Đó là nó cho hồi quy tuyến tính đơn giản. Để biết tổng quan đầy đủ về lớp hồi quy tuyến tính của SciKit, hãy xem tài liệu

Nhiều hồi quy tuyến tính trong Python

Cho đến bây giờ chúng tôi đã chơi với dữ liệu giả. Đối với ví dụ này, cuối cùng chúng ta sẽ sử dụng một tập dữ liệu thực. Chúng tôi sẽ sử dụng bộ dữ liệu bệnh tiểu đường có 10 biến số độc lập còn được gọi là các đặc điểm được sử dụng để dự đoán sự tiến triển của bệnh tiểu đường trên thang điểm từ 25 đến 346. Dữ liệu được bao gồm trong bộ dữ liệu của SciKitLearn

Đầu tiên, chúng tôi cần hai lần nhập bổ sung

from sklearn import datasets
import pandas as pd

Tiếp theo, chúng tôi nhập tập dữ liệu bệnh tiểu đường và gán các biến dữ liệu độc lập cho X và biến mục tiêu phụ thuộc cho y

x = np.array[[8,9,10,11,12]]
y = np.array[[1.5,1.57,1.54,1.7,1.62]]
0

Nếu bạn in hình này ra, bạn sẽ thấy X là một ma trận có 442 hàng và 10 cột, trong khi y là một vectơ có 442 hàng. Tham số “as_frame=True” nhập tập dữ liệu dưới dạng khung dữ liệu bằng thư viện Pandas thay vì mảng NumPy. Pandas giúp trực quan hóa dễ dàng hơn và tự động nhập các tiêu đề cột. Hãy in X để xem ý tôi là gì

x = np.array[[8,9,10,11,12]]
y = np.array[[1.5,1.57,1.54,1.7,1.62]]
1

Tiếp theo, chúng ta nên kiểm tra xem có bất kỳ giá trị nào bị thiếu trong dữ liệu không. Giá trị null có thể dẫn đến các lỗi tiện lợi đôi khi khó theo dõi. Vì vậy, tốt hơn là an toàn hơn xin lỗi. Đoạn mã sau kiểm tra giá trị NA, là cú pháp Python cho giá trị null.

x = np.array[[8,9,10,11,12]]
y = np.array[[1.5,1.57,1.54,1.7,1.62]]
2

Mọi thứ có vẻ tốt. Lưu ý rằng khi xử lý một tập dữ liệu thực, tôi thực sự khuyến khích bạn thực hiện một số phân tích dữ liệu sơ bộ hơn nữa trước khi điều chỉnh mô hình. Ở mức tối thiểu, bạn nên kiểm tra một số thống kê cơ bản như giá trị trung bình, tối thiểu và tối đa cũng như mức độ tương quan giữa các tính năng độc lập của bạn. Trong hầu hết các trường hợp, bạn nên xác định và có thể loại bỏ các giá trị ngoại lai, gán các giá trị còn thiếu và chuẩn hóa dữ liệu của bạn. Nhưng các hoạt động này nằm ngoài phạm vi của bài đăng này, vì vậy chúng tôi sẽ xây dựng mô hình hồi quy tiếp theo.

Đầu tiên, chúng tôi chia tập dữ liệu của mình thành một tập huấn luyện lớn và một tập kiểm tra nhỏ hơn. Scikit Learn có chức năng riêng để chia ngẫu nhiên một tập dữ liệu, nhưng chúng tôi sẽ chỉ cắt bỏ 42 mục nhập cuối cùng

x = np.array[[8,9,10,11,12]]
y = np.array[[1.5,1.57,1.54,1.7,1.62]]
3

Chúng ta sẽ áp dụng quy ước rằng X [viết hoa] biểu thị một tập hợp nhiều biến độc lập, trong khi x là một biến độc lập duy nhất

Bây giờ chúng ta có thể điều chỉnh mô hình của mình như trước đây. Chỉ lần này chúng ta có một ma trận gồm 10 biến độc lập nên không cần định hình lại

x = np.array[[8,9,10,11,12]]
y = np.array[[1.5,1.57,1.54,1.7,1.62]]
4

Nếu bạn in độ dốc và giao điểm, bạn sẽ nhận ra rằng Scikit learn sẽ cung cấp cho bạn một mảng mười độ dốc. Vì chúng tôi có nhiều biến độc lập, nên chúng tôi không xử lý một đường duy nhất trong 2 chiều, mà với một siêu phẳng trong 11 chiều. Mỗi biến độc lập có độ dốc khác nhau đối với y

x = np.array[[8,9,10,11,12]]
y = np.array[[1.5,1.57,1.54,1.7,1.62]]
5

Cuối cùng, chúng tôi muốn mô hình được trang bị đưa ra dự đoán về dữ liệu mà nó chưa từng thấy trước đây. Với mục đích này, chúng tôi đã chia dữ liệu thành tập huấn luyện và tập kiểm tra

x = np.array[[8,9,10,11,12]]
y = np.array[[1.5,1.57,1.54,1.7,1.62]]
6

Bản thân các dự đoán không giúp chúng ta nhiều hơn nữa. Để đánh giá mô hình ta tính hệ số xác định và sai số bình phương trung bình [tổng bình phương phần dư chia cho số quan sát]

x = np.array[[8,9,10,11,12]]
y = np.array[[1.5,1.57,1.54,1.7,1.62]]
7

Vì hàm dự đoán đã cung cấp cho chúng tôi y_pred dưới dạng mảng 2D có hình dạng = [42,1], nên chúng tôi đã viết y_pred[. , 0] trong dòng 8 để chọn rõ ràng tất cả các hàng và cột đầu tiên để có được mảng hình dạng 1D [42, ]. Nếu bạn không làm điều này, bạn sẽ không gặp lỗi mà là một giá trị cao điên cuồng

Để đảm bảo mô hình của bạn vững chắc, bạn cũng cần kiểm tra các giả định mà phân tích hồi quy tuyến tính dựa vào. Trong một mô hình hồi quy đơn giản, chỉ cần vẽ đồ thị dữ liệu thường cho bạn ý tưởng ban đầu về việc liệu hồi quy tuyến tính có phù hợp hay không. Vì chúng ta đang ở trong không gian 11 chiều và con người chỉ có thể nhìn thấy 3D nên chúng ta không thể vẽ sơ đồ mô hình để đánh giá nó một cách trực quan.
Nhưng bạn có thể vẽ từng giá trị x riêng lẻ theo giá trị y.

Dưới đây là một ví dụ về cách thực hiện việc này cho biến độc lập đầu tiên

x = np.array[[8,9,10,11,12]]
y = np.array[[1.5,1.57,1.54,1.7,1.62]]
8

Nếu chúng tôi trích xuất một cột từ X_train và X_test, gấu trúc sẽ cung cấp cho chúng tôi mảng 1D. Vì mô hình hồi quy mong đợi một mảng 2D và chúng tôi không thể định hình lại nó trực tiếp trong gấu trúc, nên chúng tôi trích xuất các giá trị dưới dạng một mảng NumPy trước khi trích xuất cột và định hình lại nó thành một mảng 2D

Tóm lược

Chúng ta đã học cách thực hiện hồi quy tuyến tính đơn giản và hồi quy tuyến tính bội trong Python bằng cách sử dụng các gói NumPy và SKLearn. Phân tích hồi quy là một chủ đề rộng lớn. Có một số phương pháp để chọn các tính năng, xác định các tính năng dư thừa hoặc kết hợp một số tính năng thành một tính năng mạnh hơn. Tuy nhiên, các phương pháp này nằm ngoài phạm vi của bài đăng này và cần đợi đến một thời điểm khác

Làm cách nào để vẽ biểu đồ hồi quy tuyến tính từ sklearn?

Cách tạo mô hình hồi quy tuyến tính Sklearn .
Bước 1. Nhập tất cả các thư viện cần thiết. nhập numpy dưới dạng np. .
Bước 2. Đọc tập dữ liệu. .
Bước 3. Khám phá phân tán dữ liệu. .
Bước 4. Dọn dẹp dữ liệu. .
Bước 5. Đào tạo người mẫu của chúng tôi. .
Bước 6. Khám phá kết quả của chúng tôi. .
Bước 7. Làm việc với một tập dữ liệu nhỏ hơn

Làm thế nào để vẽ hồi quy tuyến tính với numpy?

Nhận dữ liệu x bằng cách sử dụng np. .
Lấy dữ liệu y bằng cách sử dụng np. .
Lấy hồi quy tuyến tính bình phương nhỏ nhất thông thường, i. e. , kiểu mẫu
Phù hợp với mô hình tuyến tính
Trả về các số cách đều nhau trong một khoảng thời gian đã chỉ định, sử dụng phương thức linspace[]
Dự đoán bằng mô hình tuyến tính, sử dụng phương thức predict[]

Lệnh Python nào sẽ vẽ đường hồi quy?

Các hàm vẽ mô hình hồi quy tuyến tính . regplot[] and lmplot[] .

Biểu đồ nào được sử dụng cho hồi quy tuyến tính?

biểu đồ [ mdl ] tạo biểu đồ của mô hình hồi quy tuyến tính mdl. Loại cốt truyện phụ thuộc vào số lượng biến dự đoán. Nếu mdl bao gồm nhiều biến dự đoán, thì biểu đồ sẽ tạo Biểu đồ biến được thêm vào cho toàn bộ mô hình ngoại trừ thuật ngữ [chặn] không đổi, tương đương với plotAdded[mdl].

Chủ Đề