Python tìm hệ số của đa thức

Hồi quy tuyến tính cũ tốt là một công cụ thống kê được sử dụng rộng rãi để xác định mối quan hệ tuyến tính giữa hai biến, cho phép các nhà phân tích đưa ra suy luận và trích xuất những hiểu biết sâu sắc từ dữ liệu, bao gồm cả dự đoán

Tuy nhiên, không chỉ có dữ liệu tuyến tính. Không phải tất cả các bộ dữ liệu đều mang một mẫu tuyến tính. Có những trường hợp chúng gần như ở đó, nhưng chúng ta cần thực hiện các phép biến đổi để “giúp” chúng khớp với một thuật toán tuyến tính

Một trong những khả năng là biến đổi lũy thừa, chẳng hạn như làm cho một phương trình bậc hai hoặc bậc ba hoạt động giống như một phương trình tuyến tính. Bằng cách thêm một lớp chuyển đổi vào dữ liệu, chúng ta có thể điều chỉnh nó tốt hơn nhiều, như chúng ta sắp thấy

đa thức

Trong toán học, đa thức là một phương trình bao gồm các biến [x, y, z] và các hệ số [các số sẽ nhân các biến]

Hồi quy tuyến tính đơn giản là một đa thức bậc nhất, trong đó chúng ta có hệ số nhân với biến x, đơn giản và đơn giản. Như bạn đã thấy nhiều lần, đây là công thức hồi quy tuyến tính đơn giản

Đa thức bậc hai, bậc ba hoặc bậc N sẽ tương tự, nhưng trong trường hợp này, các hệ số nhân với lũy thừa bậc hai, bậc ba hoặc bậc N của biến. Ví dụ: trong công thức bậc hai bên dưới, beta nhân biến bình phương và beta 1 nhân biến không bình phương. Vì lũy thừa cao nhất ở đây là 2 nên đa thức là bậc hai. Nếu chúng ta có một biến bậc ba, nó sẽ là bậc 3 và cho đến nay, cứ thế

Tốt đẹp. Bây giờ chúng ta biết cách xác định bậc của một đa thức. Hãy tiếp tục và xem xét tác động của nó trong dữ liệu

Những gì thay đổi trong dữ liệu?

Điều quan trọng là phải xem biểu đồ dữ liệu của chúng tôi để biết hình dạng của nó và cách hồi quy tuyến tính sẽ phù hợp. Hoặc, thậm chí tốt hơn, nếu nó phù hợp nhất

Hãy nhìn vào hình dạng của đa thức của các bậc khác nhau

Hình dạng của các đường cong cho Đa thức của các bậc khác nhau. Hình ảnh của tác giả

Quan sát rằng việc thêm từng độ làm cho dữ liệu tạo thêm một số đường cong. Độ 1 là một đường, như mong đợi, độ 2 là một đường cong và các độ khác sau đó có hình chữ “S” hoặc một số đường cong khác

Biết rằng dữ liệu không còn là một dòng nữa, việc sử dụng hồi quy tuyến tính đơn giản sẽ không phù hợp. Chà, tùy thuộc vào độ đậm nhạt của đường cong, bạn vẫn có thể nhận được một số kết quả thú vị, nhưng sẽ luôn có những điểm rất khác biệt

Hãy xem cách đối phó với những trường hợp này

Tính năng đa thức

Scikit-Learn có tên lớp

from sklearn.linear_model import LinearRegression
from sklearn.preprocessing import PolynomialFeatures
1 để xử lý các trường hợp bạn có đa thức bậc cao hơn để phù hợp với hồi quy tuyến tính

Trên thực tế, những gì nó làm là biến đổi dữ liệu của bạn, giống như thêm một lớp trên dữ liệu giúp thuật toán

from sklearn.linear_model import LinearRegression
from sklearn.preprocessing import PolynomialFeatures
2 xác định đúng mức độ đường cong cần thiết. Nó tính toán các điểm ở mức độ chúng ta cần

dữ liệu bậc hai

Hãy bắt đầu với phương trình bậc hai. Chúng ta có thể tạo một tập dữ liệu

# Dataset
X = 8 * np.random.rand[500, 1]
y = 1 + X**2 + X + 2 + np.random.randn[500,1]
# Plot
plt.scatter[X,y, alpha=0.5];

phương trình bậc hai. Hình ảnh của tác giả

Hãy nhập các mô-đun cần thiết

from sklearn.linear_model import LinearRegression
from sklearn.preprocessing import PolynomialFeatures

Và, tiếp theo, chúng ta có thể khớp một mô hình tuyến tính. Chỉ để hiển thị những gì xảy ra

# Linear Regression
linear_model = LinearRegression[].fit[X,y]
preds = linear_model.predict[X]

Điều này sẽ tạo ra cốt truyện sau

Hồi quy tuyến tính phù hợp với đa thức bậc 2. Hình ảnh của tác giả

Hmmm… Chúng tôi sẽ đúng một vài lần và chúng tôi sẽ gần đúng vào những lần khác, nhưng hầu hết các dự đoán sẽ không quá tốt. Hãy đánh giá mô hình

# y_mean
label_mean = np.mean[y]
print['label mean:', label_mean ]
# RMSE
rmse = np.sqrt[ mean_squared_error[y, preds]]
print['RMSE:', rmse ]
# % Off
print['% off:',rmse/label_mean]
[OUT]:
label mean: 26.91768042533155
RMSE: 4.937613270465381
% off: 0.18343383205555547

Giảm trung bình 18%. Nếu chúng tôi cho điểm là

from sklearn.linear_model import LinearRegression
from sklearn.preprocessing import PolynomialFeatures
0 , chúng tôi sẽ nhận được 94% R²

Bây giờ, chúng ta sẽ chuyển đổi dữ liệu để phản ánh đường cong bậc hai và điều chỉnh lại mô hình

# Instance
poly2 = PolynomialFeatures[degree=2, include_bias=False]
X_poly = poly2.fit_transform[X]
# Fit Linear model with poly features
poly_model = LinearRegression[].fit[X_poly,y]
poly_pred = poly_model.predict[X_poly]
# Plot
plt.scatter[X,y, alpha=0.5]
plt.plot[X, poly_pred, color='red', linestyle='', marker='.', lw=0.1];

Đây là kết quả [99% R²]

Hồi quy tuyến tính cấp 2 phù hợp với dữ liệu bậc hai. Hình ảnh của tác giả

Ồ. Bây giờ nó trông thực sự tốt đẹp. Chúng tôi sẽ đánh giá nó

label mean: 26.91768042533155 
RMSE: 1.0254085813750857
% off: 0.038094240111792826

Chúng tôi đã giảm sai số xuống còn 3% phương sai so với giá trị trung bình

Thử nghiệm nhiều biến đổi

Chúng ta có thể kiểm tra nhiều phép biến đổi và xem tác động của phép biến đổi đó trong các giá trị được trang bị là gì. Bạn có thể nhận thấy rằng, khi chúng ta càng tiến gần đến bậc của hàm, thì đường thẳng càng khớp với các giá trị. Đôi khi, nó thậm chí có thể khớp dữ liệu

Chúng tôi sẽ tạo hàm này nhận các biến giải thích [X] và biến phản hồi [y] và chạy dữ liệu thông qua một đường ống phù hợp với Hồi quy tuyến tính ở các mức độ khác nhau trong một vòng lặp cho các giá trị do người dùng chỉ định và vẽ kết quả. Tôi sẽ để chức năng này trong kho lưu trữ GitHub của mình

fit_polynomials[X2, y2, from_= 1, to_= 4][OUT]: Results for each [degree, R²]
[[1, 0.042197674876638835],
[2, 0.808477636439972],
[3, 0.8463294262006292],
[4, 0.9999999996536807]]

Quan sát rằng chúng tôi bắt đầu với một mô hình vừa vặn kém, chỉ với 4% R² và kết thúc với một mô hình vừa vặn hoàn hảo, với độ vừa vặn 99%

Các chấm đen là Y thật. Các chấm đỏ hoàn toàn phù hợp với họ. Hình ảnh của tác giả

Nhìn vào hình trước, trong đó chức năng cấp độ 1 [chấm xanh] thực sự rất sai và cấp độ 4 [chấm đỏ] có thể là một mô hình được trang bị quá mức [Y thực sự là các chấm đen]. Đồ họa này cho thấy sức mạnh của các phép biến đổi đa thức để phù hợp với dữ liệu hàm mũ

Một điều khác mà chúng ta nên chú ý là nếu chúng ta tiếp tục tăng đối số

from sklearn.linear_model import LinearRegression
from sklearn.preprocessing import PolynomialFeatures
1 từ
from sklearn.linear_model import LinearRegression
from sklearn.preprocessing import PolynomialFeatures
2 , dữ liệu sẽ ngày càng bị khớp quá nhiều, cho đến khi, đối với các giá trị rất cao, nó sẽ bắt đầu giảm điểm, vì nó sẽ khớp với

from sklearn.linear_model import LinearRegression
from sklearn.preprocessing import PolynomialFeatures
0

Chúng ta có thể thấy rằng, khi chúng ta tăng lên, R² sẽ giảm xuống và các điểm không còn phù hợp nữa

Các giá trị độ cao sẽ quá khớp và có thể mô hình hóa tiếng ồn. Hình ảnh của tác giả. Trước khi bạn đi

Đây là một công cụ hay khác từ Scikit-Learn.

from sklearn.linear_model import LinearRegression
from sklearn.preprocessing import PolynomialFeatures
1

Nó được sử dụng để chuyển đổi dữ liệu phi tuyến tính thành dữ liệu mới có thể được mô hình hóa bằng hồi quy tuyến tính

Khi bạn tăng mức độ, đường hồi quy sẽ càng khớp với dữ liệu

Nếu bạn thích nội dung này, hãy theo dõi blog của tôi để biết thêm

Gustavo Santos - Trung bình

Đọc bài viết từ Gustavo Santos trên Medium. Nhà khoa học dữ liệu. Tôi trích xuất những hiểu biết sâu sắc từ dữ liệu để giúp mọi người và các công ty…

gustavorsantos. Trung bình. com

Nếu bạn đang cân nhắc tham gia Phương tiện với tư cách là thành viên, thì đây là mã giới thiệu của tôi, nơi một phần giá trị này được chia sẻ với tôi, vì vậy bạn cũng có thể thúc đẩy tôi

Chủ Đề