Numpy의 평균 제곱 오차?


81

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

나는 검색을 시도했지만 아무것도 찾지 못했습니다. 다른 이름으로되어 있습니까?

없는 경우 어떻게 극복합니까? 직접 작성하거나 다른 lib를 사용합니까?


13
((A - B) ** 2).mean(axis=ax)여기서 ax=0열 단위 인 ax=1당 행이고 ax=None총합을 준다.
— Fred Foo

2
당신이 그것을 대답으로 공식화한다면 나는 그것을 받아 들일 것입니다.
— TheMeaningfulEngineer

numpy 행렬을 제곱하면 각 요소를 개별적으로 제곱하여 행렬 곱셈을 수행하기 때문에이 대답은 올바르지 않습니다. Saullo Castro의 답변에서 내 의견을 확인하십시오. (PS : Python 2.7.5 및 Numpy 1.7.1을 사용하여 테스트했습니다.)
— renatov 2014

또한 신경망의 맥락에서 이것을보고있는 사람을위한 메모처럼 평균이 아닌 오류를 합산해야합니다. 그래도 확인을 시도 할 경우 오류를 평균화하면 잘못된 그래디언트 값이 제공됩니다 (평균에 대한 역 전파를 고려하지 않는 한, 가치보다 더 많은 작업)
— Recessive

답변:


101

당신이 사용할 수있는:

mse = ((A - B)**2).mean(axis=ax)

또는

mse = (np.square(A - B)).mean(axis=ax)
  • 함께 ax=0평균 어레이를 돌려 각 열에 대해 행을 따라 수행
  • 함께 ax=1평균 어레이를 돌려 각 행, 열을 따라 수행
  • 함께 ax=None평균 스칼라 값을 반환하는 배열을 따라 소자 현명한 수행

2
내가 틀렸다면 맞지만 (MatrixA-MatrixB) ** 2를 수행하면 각 요소를 개별적으로 제곱하는 것과 다른 행렬 곱셈을 수행하려고 할 것입니다. 정사각형이 아닌 행렬에 다음 공식을 사용하려고하면 ValueError가 발생합니다.
— renatov 2014

7
@renatov 어쩌면 당신은을 사용하여, 저를 오해 np.ndarray하는 요소 현명한 곱셈을 할 것입니다 a**2,하지만 사용 np.matrixlib.defmatrix.matrix에 대한 행렬 곱셈 할 것입니다 a**2...
— Saullo GP 카스트로

2
죄송합니다. 오해했습니다. 나는 당신이 numpy.matrix를 사용하고 있다고 생각했습니다.
— renatov 2014

1
두 개의 단위 행렬을 비교하는 경우 차이가 음수이므로이 방법이 작동하지 않습니다. 먼저 int 복사본을 만들어야합니다 ( Acmp = np.array(A, dtype=int))
— Charles L.

3
np.nanmean(((A - B) ** 2))값이없는 경우
— 사용자 0을

38

이것은의 일부는 numpy아니지만 numpy.ndarray개체 와 함께 작동 합니다. A numpy.matrix는 a numpy.ndarray와 a 로 변환 될 수 있습니다 .numpy.ndarray 로 변환 할 수 있고 a는 numpy.matrix.

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

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



5

행렬 곱셈과 관련된 문제를 피하는 허용되는 답변의 또 다른 대안 :

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

np.square에 대한 문서에서 : "입력의 요소 별 제곱을 반환합니다."


4

그냥 킥

mse = (np.linalg.norm (AB) ** 2) / len (A)


0

평균 제곱 오차 (분산) 및 제곱근 (표준 편차)을 계산하는 표준 numpy 방법은 numpy.var()및 입니다. 여기 와 여기를numpy.std() 참조 하세요 . 그것들은 행렬에 적용되며 .numpy.mean()

이 기능을 사용할 수 있기 전에 질문과 이전 답변이 게시되었을 수 있다고 가정합니다.


MSE와 분산은 평균이 0이 아닌 한 동일하지 않습니다 (즉, A와 B의 평균이 같지 않아 AB가 위의 계산에서 평균이 0이 아닌 경우).
— Drew
당사 사이트를 사용함과 동시에 당사의 쿠키 정책과 개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.