Để có được sự phù hợp bình phương nhỏ nhất của đa thức với dữ liệu, hãy sử dụng đa thức. polyfit[] trong Python Numpy. Phương thức trả về các hệ số Đa thức được sắp xếp từ thấp đến cao. Nếu y là 2-D, thì các hệ số trong cột k của coef thể hiện sự phù hợp đa thức với dữ liệu trong cột thứ k của y. Tham số, x là tọa độ x của M điểm mẫu [dữ liệu] [x[i], y[i]]
Tham số, y là tọa độ y của các điểm mẫu. Một số bộ điểm mẫu chia sẻ cùng tọa độ x có thể phù hợp [độc lập] với một lệnh gọi tới polyfit bằng cách chuyển cho y một mảng 2 chiều chứa một bộ dữ liệu trên mỗi cột. Tham số, deg là [Các] Bậc của các đa thức phù hợp. Nếu deg là một số nguyên duy nhất thì tất cả các số hạng cho đến và bao gồm cả số hạng thứ deg đều được bao gồm trong phép khớp
Tham số, rcond là số điều kiện tương đối của sự phù hợp. Giá trị số ít nhỏ hơn rd, so với giá trị số ít lớn nhất, sẽ bị bỏ qua. Giá trị mặc định là len[x]*eps, trong đó eps là độ chính xác tương đối của loại float của nền tảng, khoảng 2e-16 trong hầu hết các trường hợp. Tham số, đầy đủ là công tắc xác định tính chất của giá trị trả về. Khi Sai [mặc định], chỉ các hệ số được trả về;
Tham số, w là trọng số. Nếu không phải là Không, trọng số w[i] áp dụng cho phần dư chưa bình phương y[i] - y_hat[i] tại x[i]. Lý tưởng nhất là các trọng số được chọn sao cho sai số của các sản phẩm w[i]*y[i] đều có cùng phương sai. Khi sử dụng trọng số phương sai nghịch đảo, hãy sử dụng w[i] = 1/sigma[y[i]]. Giá trị mặc định là không có
Hướng dẫn này sẽ chỉ cho bạn cách thực hiện hồi quy tuyến tính bình phương nhỏ nhất với Python bằng một ví dụ mà chúng ta đã thảo luận trước đó. Kiểm tra tại đây để tìm hiểu hồi quy bình phương tối thiểu là gì
Tập dữ liệu mẫu
Chúng tôi sẽ sử dụng 10 cặp điểm dữ liệu được tạo ngẫu nhiên sau đây
x = [12,16,71,99,45,27,80,58,4,50]
y = [56,22,37,78,83,55,70,94,12,40]
Công thức bình phương nhỏ nhất
Đối với bài toán bình phương nhỏ nhất, mục tiêu của chúng ta là tìm một đường thẳng y = b + wx thể hiện/phù hợp nhất với các điểm dữ liệu đã cho. Nói cách khác, chúng ta cần tìm các giá trị b và w sao cho tổng sai số bình phương của đường thẳng là nhỏ nhất.
Xin nhắc lại, các phương trình sau đây sẽ giải b [giá trị chặn] và w [độ dốc] tốt nhất cho chúng ta
Hồi quy tuyến tính bình phương nhỏ nhất bằng tay
Hãy tạo hai danh sách mới, xy và x_sqrt
xy = []
for i, val in enumerate[x]:
xy.append[x[i] * y[i]]
x_sqrt = [i**2 for i in x]
n = len[x]
xy
[672, 352, 2627, 7722, 3735, 1485, 5600, 5452, 48, 2000]
x_sqrt
[144, 256, 5041, 9801, 2025, 729, 6400, 3364, 16, 2500]
n
10
Sau đó, chúng ta có thể tính các số hạng w [độ dốc] và b [giá trị chặn] bằng cách sử dụng công thức trên
w = [n*sum[xy] - sum[x]*sum[y]] / [n*sum[x_sqrt] - sum[x]**2]
b = [sum[y] - w*sum[x]]/n
w
0.4950512786062967
b
31.82863092838909
Hồi quy tuyến tính bình phương nhỏ nhất với Python Sklearn
Scikit-learning là một thư viện Python tuyệt vời dành cho khoa học dữ liệu và chúng tôi sẽ sử dụng nó để giúp chúng tôi hồi quy tuyến tính. Chúng tôi cũng cần sử dụng thư viện numpy để giúp chuyển đổi dữ liệu. Hãy cài đặt cả hai bằng cách sử dụng pip, lưu ý tên thư viện là sklearn
pip install sklearn numpy
Nói chung, sklearn thích đầu vào mảng 2D hơn 1D. Danh sách x và y được coi là 1D, vì vậy chúng tôi phải chuyển đổi chúng thành mảng 2D bằng cách sử dụng phương thức reshape[] của numpy. Lưu ý mặc dù x và y mới bên dưới vẫn trông giống như mảng 1D sau khi chuyển đổi, nhưng về mặt kỹ thuật, chúng là 2D vì mỗi x và y hiện là một danh sách các danh sách
from sklearn.linear_model import LinearRegression
import numpy as np
x = [12,16,71,99,45,27,80,58,4,50]
y = [56,22,37,78,83,55,70,94,12,40]
x = np.array[x].reshape[-1,1]
y = np.array[y].reshape[-1,1]
x
array[[[12],
[16],
[71],
[99],
[45],
[27],
[80],
[58],
[ 4],
[50]]]
y
array[[[56],
[22],
[37],
[78],
[83],
[55],
[70],
[94],
[12],
[40]]]
Dữ liệu của chúng tôi hiện ở định dạng phù hợp, chúng tôi có thể tạo hồi quy tuyến tính và “phù hợp” [một thuật ngữ khác là “đào tạo”] mô hình. Về cơ bản, sklearn sẽ thực hiện các phép tính w và b
Chúng tôi có thể kiểm tra các giá trị chặn [b] và độ dốc [w]. Lưu ý theo quy ước đặt tên của sklearn, các thuộc tính được theo sau bởi dấu gạch dưới “_” ngụ ý chúng được ước tính từ dữ liệu.
linreg = LinearRegression[].fit[x,y]
linreg.intercept_
array[[31.82863093]]
linreg.coef_
array[[[0.49505128]]]
Như được hiển thị ở trên, các giá trị khớp với các giá trị được tính toán thủ công trước đây của chúng tôi
Vẽ dữ liệu và đường hồi quy trong Python
Chúng tôi sẽ sử dụng thư viện matplotlib để vẽ đồ thị, lấy nó bằng pip nếu bạn chưa có nó
pip install matplotlib
Matplotlib có lẽ là thư viện vẽ sơ đồ nổi tiếng nhất trong Python. Nó cung cấp tính linh hoạt tuyệt vời để tùy chỉnh nếu bạn biết mình đang làm gì 🙂