2013-05-27 377 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()