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ứcTrong 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ứcScikit-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ínhTrê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ầndữ 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
0Chú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
1Nó đượ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