【问题标题】:Mean Squared Error in Numpy?Numpy中的均方误差?
【发布时间】:2013-05-22 09:48:58
【问题描述】:

numpy 中是否有计算两个矩阵之间的均方误差的方法?

我尝试过搜索,但没有找到。是不是用了不同的名字?

如果没有,你如何克服这个问题?你是自己写的还是使用不同的库?

【问题讨论】:

  • ((A - B) ** 2).mean(axis=ax),其中ax=0 是每列,ax=1 是每行,ax=None 给出总计。
  • 如果您将其表述为答案,我会接受。
  • 这个答案是不正确的,因为当你对一个 numpy 矩阵求平方时,它会单独执行一个矩阵乘法,将每个元素平方。检查我在 Saullo Castro 的回答中的评论。 (PS:我已经使用 Python 2.7.5 和 Numpy 1.7.1 对其进行了测试)
  • 另外,作为在神经网络背景下查看此内容的任何人的注释,您应该对误差求和,而不是平均值。如果您尝试进行梯度检查,平均误差会给您提供不正确的梯度值(除非您在反向传播中考虑平均值,这比它的价值更多)

标签: python arrays numpy mean mean-square-error


【解决方案1】:

你可以使用:

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

或者

mse = (np.square(A - B)).mean(axis=ax)
  • ax=0 沿行执行平均,对于每一列,返回一个数组
  • ax=1 沿列执行平均,对于每一行,返回一个数组
  • ax=None 沿数组按元素执行平均,返回一个标量值

【讨论】:

  • 如果我错了,请更正,但我认为如果你这样做 (MatrixA - MatrixB) ** 2 它将尝试执行矩阵乘法,这与每个元素单独平方不同。如果您尝试对非方阵使用以下公式,则会引发 ValueError。
  • @renatov 也许你误解了我,使用np.ndarray 将为a**2 进行元素乘法,但使用np.matrixlib.defmatrix.matrix 将为a**2 进行矩阵乘法...
  • 对不起,我误会了你。我以为你在使用 numpy.matrix。
  • 请记住,如果您要比较 2 个 uint 矩阵,这将不起作用,因为差异将具有负数。您需要事先制作 int 副本 (Acmp = np.array(A, dtype=int))
  • np.nanmean(((A - B) ** 2)) 如果缺少值
【解决方案2】:

这不是numpy 的一部分,但它适用于numpy.ndarray 对象。 numpy.matrix 可以转换为numpy.ndarraynumpy.ndarray 可以转换为numpy.matrix

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

有关如何控制轴的文档,请参阅 Scikit Learn mean_squared_error

【讨论】:

    【解决方案3】:

    更加麻木

    np.square(np.subtract(A, B)).mean()
    

    【讨论】:

    • 顺便说一句,这种方式相当于Sci-kitLearn的功能,不错!
    【解决方案4】:

    避免矩阵乘法出现任何问题的公认答案的另一种选择:

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

    documentsnp.square

    Return the element-wise square of the input.
    

    【讨论】:

      【解决方案5】:

      只是为了好玩

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

      【讨论】:

        【解决方案6】:

        计算均方误差(方差)及其平方根(标准差)的标准numpy方法是numpy.var()numpy.std(),见herehere。它们适用于矩阵并且具有与numpy.mean() 相同的语法。

        我想问题和前面的答案可能在这些功能可用之前就已经发布了。

        【讨论】:

        • MSE 和方差不一样,除非均值为零(即,除非 A 和 B 具有相同的均值,因此 A-B 在上述计算中的均值为零)。
        猜你喜欢
        • 2020-03-29
        • 2018-03-10
        • 2016-12-28
        • 1970-01-01
        • 2015-07-11
        • 2013-10-23
        • 2011-01-22
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多