2013-04-17 36 views
6

tôi giả numpy.cov(X) tính ma trận hiệp phương sai mẫu như:hàm covariance (covariance), tính chính xác của nó là gì?

1/(N-1) * Sum (x_i - m)(x_i - m)^T (where m is the mean) 

tức là tổng của sản phẩm bên ngoài. Nhưng không nơi nào trong tài liệu, nó thực sự nói điều này, nó chỉ nói "Ước tính ma trận hiệp phương sai".

Có ai có thể xác nhận đây là nội dung trong nội bộ không? (Tôi biết tôi có thể thay đổi hằng số ra phía trước với tham số bias.)

+0

https://github.com/numpy/numpy/blob/master/numpy/ma/extras.py#L1257 – YXD

Trả lời

3

Như bạn thấy nhìn vào source, trong trường hợp đơn giản nhất không có mặt nạ, và N biến với M mẫu mỗi, nó sẽ trả về ma trận (N, N) hiệp phương sai tính như sau:

(x-m) * (x-m).T.conj()/(N - 1) 

Trường hợp * đại diện cho sản phẩm ma trận [1]

thực hiện xấp xỉ như:

X -= X.mean(axis=0) 
N = X.shape[1] 

fact = float(N - 1) 

return dot(X, X.T.conj())/fact 

Nếu bạn muốn xem lại nguồn, look here thay vì liên kết từ Mr E trừ khi bạn quan tâm đến mảng bị che. Như bạn đã đề cập, the documentation không tuyệt vời.

[1] mà trong trường hợp này là một cách hiệu quả (nhưng không chính xác) sản phẩm bên ngoài vì (x-m)N vectơ cột của chiều dài M và do đó (x-m).T là bao nhiêu vectơ hàng. Kết quả cuối cùng là tổng của tất cả các sản phẩm bên ngoài. Cùng một * sẽ cung cấp cho sản phẩm bên trong (vô hướng) nếu thứ tự được đảo ngược. Tuy nhiên, về mặt kỹ thuật, đây chỉ là các phép nhân ma trận chuẩn và sản phẩm ngoài thực sự chỉ là sản phẩm của một vectơ cột vào một vectơ hàng.

+0

Phải, và điều này tương đương với tổng sản phẩm bên ngoài của tôi? – Flash

+0

@Andrew Đúng vậy, và tôi đã cố gắng làm cho câu trả lời của tôi rõ ràng hơn cho bạn và những người khác. – askewchan

0

Vâng, đó là những gì numpy.cov tính toán. FWIW, tôi đã so sánh đầu ra của numpy.cov để lặp lại một cách rõ ràng các mẫu (như trong mã giả bạn đã cung cấp) để so sánh hiệu suất và sự khác biệt trong mảng kết quả đầu ra là điều mong đợi do độ chính xác của dấu chấm động.

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