2013-05-27 352 views
29

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

我试过搜索但没有找到。它是用不同的名字吗?

如果没有,你如何克服这一点?你是自己写的还是使用不同的lib?

+11

'((A - B)** 2).mean(轴= AX)',其中'AX = 0'是每列,'AX = 1'是每行和“ax = None”给出总计。 –

+2

如果你制定答案我会接受它。 – TheMeaningfulEngineer

+0

这个答案是不正确的,因为当你把一个numpy矩阵平方时,它会执行矩阵乘法rathar square每个元素个体。查看我对Saullo Castro的回答的评论。 (PS:我用Python 2.7.5和Numpy 1.7.1测试过) – renatov

回答

39

如@larsmans建议可以使用:

mse = ((A - B) ** 2).mean(axis=ax) 
  • ax=0沿着行进行平均,对于每一列,返回一个数组
  • ax=1平均沿着执行列,对于每一行,返回数组
  • ax=None沿着该数组执行元素平均值,返回单个值
+2

如果我错了,但我认为如果你这样做(MatrixA - MatrixB)** 2它会尝试执行矩阵乘法,这与每个元素单独平方不同。如果您尝试对非矩形矩阵使用以下公式,则会引发ValueError。 – renatov

+0

@renatov在Numpy数组中,这个公式将被应用到元素明智的,所以没有矩阵乘法执行 –

+0

@Saulo卡斯特罗,我刚刚测试过,我必须坚持,结果不会是元素明智的。我正在使用Python 2.7.5和Numpy 1.7.1。我创建了矩阵“a”,并将其平方为下列命令:'a = numpy.matrix([[5,5],[5,5]])'然后是'a ** 2'。结果是numpy矩阵'矩阵([[50,50],[50,50]])',这表明numpy矩阵乘法不会**是元素明智的。 – renatov

7

这不是numpy的一部分,但它可以与numpy.ndarray对象一起使用。 A 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关于如何控制轴文档。

1

另一种方法来接受的答案是避免与矩阵乘法的任何问题:

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

从证件np.square:“返回输入的元素方面的平方。”

1

甚至更​​numpy的

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