Hồi quy đa thức sử dụng scikit-learn


29

Tôi đang cố gắng sử dụng scikit-learn cho hồi quy đa thức. Từ những gì tôi đọc hồi quy đa thức là một trường hợp đặc biệt của hồi quy tuyến tính. Tôi đã hy vọng rằng có thể một trong những mô hình tuyến tính tổng quát của scikit có thể được tham số hóa để phù hợp với đa thức bậc cao hơn nhưng tôi thấy không có tùy chọn nào để làm điều đó.

Tôi đã quản lý để sử dụng một Regressor Vector hỗ trợ với một hạt nhân poly. Điều đó hoạt động tốt với một tập hợp con dữ liệu của tôi, nhưng phải mất nhiều thời gian để phù hợp với các tập dữ liệu lớn hơn nên tôi vẫn cần tìm thứ gì đó nhanh hơn (ngay cả khi giao dịch chính xác).

Tôi có thiếu một cái gì đó rõ ràng ở đây?

Câu trả lời:


25

Cho dữ liệu , vectơ cột và y , vectơ đích, bạn có thể thực hiện hồi quy đa thức bằng cách nối các đa thức của x . Ví dụ, xem xét nếuxyx

x=[2113]

Chỉ sử dụng vectơ này trong hồi quy tuyến tính ngụ ý mô hình:

y=α1x

X=[24811113132133]

Đây là ma trận dữ liệu mới của chúng tôi mà chúng tôi sử dụng trong hồi quy tuyến tính của sklearn và nó đại diện cho mô hình:

y=α1x+α2x2+α3x3

1


26

Học thuyết

Hồi quy đa thức là một trường hợp đặc biệt của hồi quy tuyến tính. Với ý tưởng chính về cách bạn chọn các tính năng của bạn. Nhìn vào hồi quy đa biến với 2 biến: x1x2. Hồi quy tuyến tính sẽ như thế này:y = a1 * x1 + a2 * x2.

Bây giờ bạn muốn có một hồi quy đa thức (hãy thực hiện đa thức 2 độ). Chúng tôi sẽ tạo ra một vài tính năng bổ sung: x1*x2, x1^2x2^2. Vì vậy, chúng tôi sẽ nhận được 'hồi quy tuyến tính' của bạn:

y = a1 * x1 + a2 * x2 + a3 * x1*x2 + a4 * x1^2 + a5 * x2^2

Điều này độc đáo cho thấy một lời nguyền khái niệm quan trọng về chiều , bởi vì số lượng các tính năng mới tăng nhanh hơn nhiều so với tuyến tính với sự tăng trưởng của mức độ đa thức. Bạn có thể xem qua khái niệm này ở đây .

Thực hành với scikit-learn

Bạn không cần phải làm tất cả điều này trong scikit. Hồi quy đa thức đã có sẵn ở đó (trong phiên bản 0.15 . Kiểm tra cách cập nhật tại đây ).

from sklearn.preprocessing import PolynomialFeatures
from sklearn import linear_model

X = [[0.44, 0.68], [0.99, 0.23]]
vector = [109.85, 155.72]
predict= [[0.49, 0.18]]
#Edit: added second square bracket above to fix the ValueError problem

poly = PolynomialFeatures(degree=2)
X_ = poly.fit_transform(X)
predict_ = poly.fit_transform(predict)

clf = linear_model.LinearRegression()
clf.fit(X_, vector)
print clf.predict(predict_)

1
Điều gì xảy ra nếu tôi không muốn có một thuật ngữ tương tác là x1 * x2, tôi có phải xây dựng X_ bằng tay không? có một tham số "tương tác_only" trong hàm tạo PolynomialFeatures () và theo mặc định, nó là Sai. Nhưng đặt nó thành True sẽ làm ngược lại với những gì tôi muốn: nó CHỈ giữ các điều khoản tương tác và không giữ x1 ^ 2, x2 ^ 2, v.v.
DenisFLASH

Liên kết đến youtube tuyên bố rằng video không còn tồn tại nữa. Bạn có bất kỳ liên kết khác đến đó?
Markon

@Markon bất kỳ video nào từ danh sách này là đủ tốt: youtube.com/results?search_query=curse+of+dimensionality
Salvador Dali

@SalvadorDali, đó là cách giảm kích thước dành cho
dùng3916597

Tôi tự hỏi liệu chúng ta nên tập trung dữ liệu trước hay sau khi áp dụng PolynomialFeatures?
renakre

2

x1x2y=a1x1+a2x2+a3x12+a4x22+a5x1x2a5x1x2) là một trong những tôi đang nói về.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.