2013-05-27 2 views
29

두 행렬 사이의 평균 제곱 오류를 계산하는 방법이 numpy에 있습니까?Numpy의 Mean Squared Error?

검색을 시도했지만 아무 것도 찾지 못했습니다. 다른 이름인가?

그렇지 않으면 어떻게 극복합니까? 직접 쓰거나 다른 라이브러리를 사용합니까? @larsmans 의해 제안

+11

'

np.square(np.subtract(A, B)).mean() 
((A - B)는 ** 2) .mean'도끼 = 0 '인 (축선 = AX)', 열 단위,'도끼 1'이다 = 행당'ax = None'은 총합을 제공합니다. –

+2

답변으로 공식화한다면 받아 들일 것입니다. – TheMeaningfulEngineer

+0

이 답변은 정확하지 않습니다. 왜냐하면 당신이 numpy 행렬을 정사각형으로 만들 때, 행렬 곱셈을 각 행렬마다 개별적으로 수행하기 때문입니다. Saullo Castro의 대답에 대한 내 의견을 확인하십시오. (PS : Python 2.7.5와 Numpy 1.7.1을 사용하여 테스트했습니다.) – renatov

답변

39

다음을 사용할 수의 평균이 각각의 열에 대해 행을 따라 수행된다 ax=0으로

mse = ((A - B) ** 2).mean(axis=ax) 
  • ax=1으로 배열
  • 복귀 평균이 함께 수행 열, 각 행에 대해 배열을 반환
  • ax=None 평균은 배열을 따라 요소 단위로 수행되어 단일 값을 반환합니다.
+2

틀렸어도 맞지만, (MatrixA-MatrixB) ** 2이면 행렬 곱셈을 수행하려고합니다. 이는 각 요소를 개별적으로 사각형으로 표시하는 것과 다릅니다. 다음 수식을 비 정사각형 행렬과 함께 사용하려고하면 ValueError가 발생합니다. – renatov

+0

Nreny 배열의 @renatov이 수식은 요소 곱하기로 적용되어 행렬 곱셈은 수행되지 않습니다. –

+0

@Saulo Castro, 방금 테스트 했으므로 그 결과가 요소별로 발생하지 않을 것이라고 주장해야합니다. 저는 Python 2.7.5와 Numpy 1.7.1을 사용하고 있습니다. 행렬 "a"를 생성하고 다음 명령을 사용하여 제곱합니다 :'a = numpy.matrix ([[5, 5], [5, 5]])'그리고 나서'a ** 2 '. 결과는 numpy 행렬 곱셈이 요소 단위가 아니라는 것을 나타내는 numpy 행렬 행렬 ([[50, 50], [50, 50]])입니다. – renatov

7

이것은 numpy의 일부가 아니지만 numpy.ndarray 개체와 작동합니다. numpy.matrixnumpy.ndarray으로 변환 될 수 있으며 numpy.ndarraynumpy.matrix으로 변환 될 수 있습니다.

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

축을 제어하는 ​​방법에 대한 문서는 Scikit Learn mean_squared_error을 참조하십시오.

1

행렬 곱셈에 문제 방지 허용 대답에 또 다른 대안 : np.square의 문서에서

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

을 ". 입력의 요소 현명한 광장을 돌아"

1

더욱 NumPy와

가 가 는