Bình phương nhỏ nhất trong Python

Để 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.

Bình phương nhỏ nhất trong Python
Một ví dụ về hồi quy tuyến tính bình phương 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

Bình phương nhỏ nhất trong Python

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ì 🙂

Phương pháp bình phương nhỏ nhất Python là gì?

Như tên ngụ ý, phương pháp Bình phương nhỏ nhất giảm thiểu tổng bình phương của các phần dư giữa các mục tiêu được quan sát trong tập dữ liệu và các mục tiêu được dự đoán bằng phép tính gần đúng tuyến tính< . .

Làm cách nào để sử dụng NumPy Least Squares?

Cách thực hiện Khớp hình vuông nhỏ nhất trong NumPy (Có ví dụ) .
Bước 1. Nhập giá trị cho X và Y. Đầu tiên, hãy tạo các mảng NumPy sau. nhập numpy dưới dạng np #define mảng x và y x = np. .
Bước 2. Thực hiện lắp bình phương nhỏ nhất. .
Bước 3. Giải thích kết quả

Công thức cho bình phương nhỏ nhất là gì?

Công thức phương pháp bình phương nhỏ nhất .
Giả sử khi chúng ta phải xác định phương trình của đường thẳng phù hợp nhất với dữ liệu đã cho, thì trước tiên chúng ta sử dụng công thức sau
Phương trình của đường bình phương nhỏ nhất được cho bởi Y = a + bX
Phương trình bình thường cho 'a'
∑Y = na + b∑X
phương trình bình thường cho 'b'
∑XY = a∑X + b∑X2

Sự khác biệt giữa Scipy Curve_fit và Least_squares là gì?

Không có sự khác biệt cơ bản nào giữa curve_fit và least_squares . Hơn nữa, nếu bạn không sử dụng method = 'lm' thì chúng sẽ làm chính xác điều tương tự. Bạn có thể kiểm tra nó trong mã nguồn của hàm điều chỉnh đường cong trên Github. nếu phương thức == 'lm'. .