2013-05-27 76 views
29

Có một phương pháp nào để tính toán sai số trung bình giữa hai ma trận không?Lỗi bình phương bình phương trong Numpy?

Tôi đã thử tìm kiếm nhưng không tìm thấy gì. Nó có tên khác không?

Nếu không có, bạn khắc phục điều này như thế nào? Bạn có tự mình viết hoặc sử dụng một lib khác không?

+11

'((A - B) ** 2) .mean (trục = ax)', nơi 'rìu = 0' là mỗi cột, 'rìu = 1' là mỗi hàng và 'ax = None' cho tổng số lớn. –

+2

Nếu bạn xây dựng đó như một câu trả lời tôi sẽ chấp nhận nó. – TheMeaningfulEngineer

+0

Câu trả lời này là không chính xác vì khi bạn vuông một ma trận khối u, nó sẽ thực hiện một ma trận nhân ô vuông rathar mỗi yếu tố cá nhân. Kiểm tra bình luận của tôi trong câu trả lời của Saullo Castro. (PS: Tôi đã thử nghiệm nó bằng cách sử dụng Python 2.7.5 và Numpy 1.7.1) – renatov

Trả lời

39

Theo đề nghị của @larsmans bạn có thể sử dụng:

mse = ((A - B) ** 2).mean(axis=ax) 
  • với ax=0 mức trung bình được thực hiện dọc theo hàng, mỗi cột, trả lại một mảng
  • với ax=1 mức trung bình được thực hiện dọc theo , đối với mỗi hàng, trả lại một mảng
  • với ax=None mức trung bình được thực hiện theo nguyên tố dọc theo mảng, trả về một giá trị đơn
+2

Đúng nếu tôi sai, nhưng tôi nghĩ nếu bạn làm (MatrixA - MatrixB) ** 2 nó sẽ cố gắng thực hiện phép nhân ma trận, khác với từng phần tử riêng lẻ. Nếu bạn cố gắng sử dụng công thức sau đây với một ma trận không vuông, nó sẽ tăng một ValueError. – renatov

+0

@renatov trong một mảng Numpy công thức này sẽ được áp dụng yếu tố khôn ngoan để nhân ma trận không được thực hiện –

+0

@Saulo Castro, tôi vừa thử nghiệm và tôi phải nhấn mạnh rằng kết quả sẽ không được yếu tố khôn ngoan. Tôi đang sử dụng Python 2.7.5 và Numpy 1.7.1. Tôi tạo ra ma trận "a" và bình phương nó dùng các lệnh sau: 'a = numpy.matrix ([[5, 5], [5, 5]])' và sau đó 'a ** 2'. Kết quả là ma trận numpy ma trận 'ma trận ([[50, 50], [50, 50]])', trong đó cho thấy nhân ma trận numpy ** sẽ không được phần tử khôn ngoan. – renatov

7

Đây không phải là một phần của numpy, nhưng nó sẽ hoạt động với các đối tượng numpy.ndarray. A numpy.matrix có thể được chuyển đổi thành numpy.ndarraynumpy.ndarray có thể được chuyển đổi thành numpy.matrix.

from sklearn.metrics import mean_squared_error 
mse = mean_squared_error(A, B) 

Xem Scikit Learn mean_squared_error để biết tài liệu về cách điều khiển trục.

1

Một thay thế cho câu trả lời chấp nhận rằng tránh bất kỳ vấn đề với nhân ma trận:

def MSE(Y, YH): 
    return np.square(Y - YH).mean() 

Từ các tài liệu cho np.square: "Quay trở lại quảng trường yếu tố khôn ngoan của đầu vào"

1

Thậm chí NumPy hơn

np.square(np.subtract(A, B)).mean() 
Các vấn đề liên quan