numpy中是否有一种方法来计算两个矩阵之间的均方误差?
我已经尝试过搜索,但没有找到。它可能有不同的名称吗?
如果没有,你会如何克服这个问题?你会自己编写还是使用不同的库?
numpy中是否有一种方法来计算两个矩阵之间的均方误差?
我已经尝试过搜索,但没有找到。它可能有不同的名称吗?
如果没有,你会如何克服这个问题?你会自己编写还是使用不同的库?
你可以使用:
mse = ((A - B)**2).mean(axis=ax)
或者
mse = (np.square(A - B)).mean(axis=ax)
ax=0
时,沿行执行平均值,并为每列返回一个数组ax=1
时,沿列执行平均值,并为每行返回一个数组ax
参数(或将其设置为ax=None
)时,沿数组的每个元素执行平均值,并返回标量值np.ndarray
将对a**2
进行逐元素乘法运算,但使用np.matrixlib.defmatrix.matrix
将对a**2
进行矩阵乘法运算... - Saullo G. P. CastroAcmp = np.array(A, dtype=int)
)。 - Charles L.这不是 numpy
的一部分,但它可以与 numpy.ndarray
对象一起使用。一个 numpy.matrix
可以转换为 numpy.ndarray
,而 numpy.ndarray
可以转换为 numpy.matrix
。
from sklearn.metrics import mean_squared_error
mse = mean_squared_error(A, B)
请查看Scikit Learn mean_squared_error以获取有关如何控制轴的文档。
更多的numpy
np.square(np.subtract(A, B)).mean()
只是为了好玩
mse = (np.linalg.norm(A-B)**2)/len(A)
def MSE(Y, YH):
return np.square(Y - YH).mean()
来自于 np.square
的文档:
Return the element-wise square of the input.
numpy.var()
和numpy.std()
,请参阅here和here。它们适用于矩阵,并且与numpy.mean()
具有相同的语法。关于统计的注解
回答@Drew的评论:
这个答案与本主题中的顶级答案是相等的。从技术上讲,均方误差(MSE)与方差不同,它使用参数的“真实”值而不是其估计值,参见 方差和均方误差之间的区别是什么? 和 方差和均方误差之间的区别是什么?。然后,这两个量的差异由我们对中心参数的估计的偏差决定。然而,当计算样本方差时,如在OP中所做的那样,我们无法真正了解这个参数的值。我认为OP在宽泛的意义上使用了术语MSE。
此外,上面提出的numpy函数允许使用参数ddof
(自由度的数量),这可以获得无偏的方差估计(与一些关于Python和R的肤浅比较所声称的相反)。
这样做符合 np.operation
的风格怎么样?
mse = np.mean(np.square(A - B))
请记住,如果没有指定axis
关键字参数,np.mean()
将输出一个标量,就像np.sum()
一样。
((A - B) ** 2).mean(axis=ax)
,其中ax=0
表示按列计算均值,ax=1
表示按行计算均值,ax=None
表示计算所有元素的均值。 - Fred Foo