Mean Squared Error in Numpy?
Question:
Is there a method in numpy for calculating the Mean Squared Error between two matrices?
I’ve tried searching but found none. Is it under a different name?
If there isn’t, how do you overcome this? Do you write it yourself or use a different lib?
Answers:
You can use:
mse = ((A - B)**2).mean(axis=ax)
Or
mse = (np.square(A - B)).mean(axis=ax)
- with
ax=0
the average is performed along the row, for each column, returning an array
- with
ax=1
the average is performed along the column, for each row, returning an array
- with omitting the ax parameter (or setting it to
ax=None
) the average is performed element-wise along the array, returning a scalar value
This isn’t part of numpy
, but it will work with numpy.ndarray
objects. A numpy.matrix
can be converted to a numpy.ndarray
and a numpy.ndarray
can be converted to a numpy.matrix
.
from sklearn.metrics import mean_squared_error
mse = mean_squared_error(A, B)
See Scikit Learn mean_squared_error for documentation on how to control axis.
Another alternative to the accepted answer that avoids any issues with matrix multiplication:
def MSE(Y, YH):
return np.square(Y - YH).mean()
From the documents for np.square
:
Return the element-wise square of the input.
Even more numpy
np.square(np.subtract(A, B)).mean()
Just for kicks
mse = (np.linalg.norm(A-B)**2)/len(A)
The standard numpy methods for calculation mean squared error (variance) and its square root (standard deviation) are numpy.var()
and numpy.std()
, see here and here. They apply to matrices and have the same syntax as numpy.mean()
.
I suppose that the question and the preceding answers might have been posted before these functions became available.
Is there a method in numpy for calculating the Mean Squared Error between two matrices?
I’ve tried searching but found none. Is it under a different name?
If there isn’t, how do you overcome this? Do you write it yourself or use a different lib?
You can use:
mse = ((A - B)**2).mean(axis=ax)
Or
mse = (np.square(A - B)).mean(axis=ax)
- with
ax=0
the average is performed along the row, for each column, returning an array - with
ax=1
the average is performed along the column, for each row, returning an array - with omitting the ax parameter (or setting it to
ax=None
) the average is performed element-wise along the array, returning a scalar value
This isn’t part of numpy
, but it will work with numpy.ndarray
objects. A numpy.matrix
can be converted to a numpy.ndarray
and a numpy.ndarray
can be converted to a numpy.matrix
.
from sklearn.metrics import mean_squared_error
mse = mean_squared_error(A, B)
See Scikit Learn mean_squared_error for documentation on how to control axis.
Another alternative to the accepted answer that avoids any issues with matrix multiplication:
def MSE(Y, YH):
return np.square(Y - YH).mean()
From the documents for np.square
:
Return the element-wise square of the input.
Even more numpy
np.square(np.subtract(A, B)).mean()
Just for kicks
mse = (np.linalg.norm(A-B)**2)/len(A)
The standard numpy methods for calculation mean squared error (variance) and its square root (standard deviation) are numpy.var()
and numpy.std()
, see here and here. They apply to matrices and have the same syntax as numpy.mean()
.
I suppose that the question and the preceding answers might have been posted before these functions became available.