2013-05-27 266 views
29

2つの行列間の平均二乗誤差を計算するためのnumpyにはメソッドがありますか?Numpyの平均二乗誤差?

私は検索を試みましたが、何も見つかりませんでした。それは別の名前の下にありますか?

もしそうでなければ、これをどのように克服しますか?あなたはそれを自分で書くのですか、別のライブラリを使いますか?

+11

'((A - B)** 2).mean(軸= AX)' 'AX =は '0' Axが= 1 'であり、列単位であります'ax = None'は総計を返します。 –

+2

あなたが答えとして公式化すれば、私はそれを受け入れます。 – TheMeaningfulEngineer

+0

この答えは正しくありません。なぜなら、numpy行列を四角形にすると、個々の要素ごとに行列乗算rathar squareを実行するからです。サウロ・カストロの答えで私のコメントをチェックしてください。 (PS:Python 2.7.5とNumpy 1.7.1を使ってテストしました) – renatov

答えて

39

使用できる@larsmansによって示唆されるように:

mse = ((A - B) ** 2).mean(axis=ax) 
  • 平均をax=1平均が沿って実行されると、アレイ
  • を返し、列ごとに、行に沿って行われるax=0と列ごとに配列を返す配列
  • ax=None平均は配列に沿って要素ごとに実行され、単一の値を返します。
+2

私が間違っていれば正解ですが、(MatrixA-MatrixB)** 2を実行すると行列乗算を実行しようとしますが、これは各要素を個別に四角形とは異なるものです。次の数式を非正方行列で使用しようとすると、ValueErrorが発生します。 – renatov

+0

@renatovはナンプィ配列でこの式は要素ごとに適用され、行列の乗算は行われません –

+0

@Saulo Castro、私はちょうどテストしましたが、結果は要素的ではないと主張する必要があります。私は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オブジェクトでは機能します。 numpy.matrixnumpy.ndarrayに、numpy.ndarraynumpy.matrixに変換することができます。

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

軸の制御方法については、Scikit Learn mean_squared_errorを参照してください。

1

行列の乗算ですべての問題を回避受け入れ答えに別の方法:np.squareのための文書から

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

:「入力の要素単位の正方形を返します」

1

さらにnumpyの

np.square(np.subtract(A, B)).mean() 
関連する問題