16

Tôi có một vấn đề classic linear hồi quy có dạng:Constrained Linear Regression bằng Python

y = X b

nơi y là một vector phản ứngX là một ma trận của các biến đầu vào và b là vector của thông số phù hợp tôi đang tìm kiếm.

Python cung cấp b = numpy.linalg.lstsq(X , y) để giải quyết các vấn đề của biểu mẫu này.

Tuy nhiên, khi tôi sử dụng điều này, tôi có xu hướng nhận được các giá trị vô cùng lớn hoặc cực kỳ nhỏ cho các thành phần của b.

Tôi muốn thực hiện phù hợp tương tự, nhưng hạn chế các giá trị của b từ 0 đến 255.

Dường như scipy.optimize.fmin_slsqp() là một lựa chọn, nhưng tôi thấy nó rất chậm đối với kích thước của vấn đề tôi m quan tâm đến (X giống như 3375 by 1500 và hy vọng thậm chí còn lớn hơn).

  1. Có bất kỳ tùy chọn Python nào khác để thực hiện ràng buộc ít nhất ô vuông phù hợp không?
  2. Hoặc có thói quen python để thực hiện Lasso Regression hoặc Ridge Regression hoặc một số phương pháp hồi quy khác phạt các giá trị hệ số b lớn?

Trả lời

8

Có một cái nhìn tại địa chỉ: http://scipy-central.org/item/17/3/pymls-solving-bounded-linear-least-squares-problems

Cũng Openopt đã gán cho bvls, khác bị chặn giải lsq tuyến tính.

Chỉnh sửa: Bạn cũng có thể thử nếu scipy.optimize.nnls là đủ.

+0

Đẹp, trên bề mặt nghe có vẻ chính xác những gì tôi cần.Việc có thể cung cấp trọng số cho các hàng ma trận biến 'X' có thể thực sự rất hữu ích đối với tôi (tôi có ý thức về độ tin cậy của các điểm dữ liệu khác nhau có thể giúp tôi tận dụng). Tôi chắc chắn sẽ cung cấp cho nó một thử, cảm ơn! – ulmangt

+0

Nó không phải là thực sự tốt thử nghiệm thông qua, hy vọng nó sẽ làm việc cho bạn. Mã là python tinh khiết và nên dễ kiểm tra. – tillsten

+0

'scipy.opimize.nnls' cũng là một mẹo hay. Chỉ đơn giản là ràng buộc với các giá trị không âm có thể là đủ. Các giải pháp 'numpy.linalg.lstsq' dường như cân bằng các giá trị' b' cực lớn với các giá trị 'b' âm lớn. – ulmangt

9

Bạn đề cập đến bạn sẽ tìm thấy Lasso Regression hoặc Ridge Regression chấp nhận được. Những mô hình này và nhiều mô hình tuyến tính ràng buộc khác có sẵn trong gói scikit-learn. Hãy xem section on generalized linear models.

Thường hạn chế các hệ số liên quan đến một số loại tham số (C hoặc alpha) --- một số mô hình (kết thúc trong CV) có thể sử dụng xác thực chéo để tự động thiết lập các tham số này. Bạn cũng có thể hạn chế thêm các mô hình để chỉ sử dụng các hệ số tích cực --- ví dụ, có một tùy chọn cho điều này trên mô hình Lasso.