2014-12-15 41 views
5

Tôi không thấy có gì sai với mã của tôi cho hồi quy tuyến tính được chuẩn hóa. Tôi Unregularized có đơn giản này, mà tôi là hợp lý nhất định là đúng:Hồi quy tuyến tính gộp với việc chuẩn hóa

import numpy as np 

def get_model(features, labels): 
    return np.linalg.pinv(features).dot(labels) 

Đây là mã của tôi cho một giải pháp đúng quy tắc, nơi tôi không nhìn thấy những gì là sai với nó:

def get_model(features, labels, lamb=0.0): 
    n_cols = features.shape[1] 
    return linalg.inv(features.transpose().dot(features) + lamb * np.identity(n_cols))\ 
      .dot(features.transpose()).dot(labels) 

Với giá trị mặc định là 0.0 cho lamb, ý định của tôi là nó sẽ cho kết quả tương tự như (đúng) phiên bản không chính xác, nhưng sự khác biệt thực sự là khá lớn.

Có ai thấy vấn đề là gì không?

+0

tôi bắt đầu quy tắc, và sẽ regularizing một đường hồi quy tuyến tính tạo ra một đường cong? – duldi

+1

No. bạn vẫn sẽ nhận được các hệ số tuyến tính. Việc thường xuyên sẽ chỉ thay đổi độ dốc. –

Trả lời

6

Sự cố là:

features.transpose().dot(features) không thể đảo ngược. Và numpy.linalg.inv chỉ hoạt động với ma trận hạng đầy đủ theo các tài liệu. Tuy nhiên, một thuật ngữ thông thường (không khác) luôn luôn làm cho phương trình vô nghĩa.

Nhân tiện, bạn có quyền thực hiện. Nhưng nó không hiệu quả. Một cách hiệu quả để giải phương trình này là phương pháp hình vuông nhỏ nhất.

np.linalg.lstsq(features, labels) có thể thực hiện công việc cho np.linalg.pinv(features).dot(labels).

Trong một cách tổng quát, bạn có thể làm điều này

def get_model(A, y, lamb=0): 
    n_col = A.shape[1] 
    return np.linalg.lstsq(A.T.dot(A) + lamb * np.identity(n_col), A.T.dot(y)) 
+0

Nếu bạn sử dụng np.linalg.lstsq(), làm cách nào bạn phù hợp với cụm từ thông dụng 'lamb'? –

+0

chỉnh sửa câu trả lời của tôi. – nullas

+0

Điều đó hoạt động tốt! Cảm ơn. Tôi đã kết thúc với 'np.linalg.lstsq (...) [0]' bởi vì nếu không tôi sẽ nhận được một bộ dữ liệu trả về. Ngoài ra, bạn có cơ hội nào biết tại sao 'lstsq()' có hiệu quả hơn không? –

Các vấn đề liên quan